ユーザー情報の取得を自動化する

発行日: 2010 年 5 月

ユーザー情報のスナップショットを定期的に取得しておきたいというご要望を多くのお客様からいただいています。この記事では、Microsoft Online Services 移行ツールに付属する PowerShell スクリプトによりこのタスクを自動化する方法についてご紹介します。

PowerShell スクリプトによる自動化を行うには、Microsoft Online Services 移行ツールや PowerShell をインストールしておく必要があります。詳細は以下を参照してください。

 

特定のユーザーリストに対して基本的な情報を取得する

準備ができたら、以下のスクリプトをメモ帳にコピーし、getUserList01.ps1 というファイルに保存します。このスクリプトでは、ユーザー名、電子メール アドレス、最後にサインインした日付、メールボックス容量などを取得することができます。

add-PSSnapIn Microsoft.Exchange.Transporter
$bposlogin = "admin@contoso.com"
$bpospwd = "Password"
$str=ConvertTo-SecureString $bpospwd -AsPlainText -Force

$bposcred = New-Object System.Management.Automation.PSCredential($bposlogin, $str)

Write-Host "LastName, FirstName, DisplayName, Email, LastSignedInDate, MailboxSize(MB) `r"
$enabledUser = Get-MSOnlineUser -Enabled -Quiet -Credential $bposcred
ForEach($user in $enabledUser)
{
    Write-Host $user.LastName"," $user.FirstName"," $user.DisplayName"," $user.Identity","  $user.LastSignedInDate"," $user.MailboxSize`r"
}

ここで、以下のコマンド

add-PSSnapIn Microsoft.Exchange.Transporter

は、Microsoft Online Services 移行ツールによって追加された PowerShell コマンドレットを有効にするためのコマンドです。ちなみに、「移行コマンド シェル」から Microsoft Online Services 専用の PowerShell スクリプトを実行する場合は、このコマンドを実行する必要はありません。

$bposlogin と $bpospwd には、管理者権限をもつアカウントのユーザー名とパスワードで置き換えてください。なお、このテキスト ファイルは管理者アカウント情報を含むため、取り扱いには十分注意ください。

以下のコマンド

$enabledUser = Get-MSOnlineUser -Enabled -Quiet -Credential $bposcred

によって、対象となるユーザー オブジェクト (Microsoft.Exchange.Transporter.Provider.MicrosoftOnline.MicrosoftOnlineUser) の配列を $enabledUser に取得します。ここでは、有効なユーザー一覧のみ取得していますが、引数を変更することで特定の属性を持つユーザー一覧を取得することも可能です。詳細は Get-MSOnlineUser を参照してください。

注: ユーザー オブジェクトのプロパティ一覧については、この記事の最後をご覧ください。

getUserList01.ps1 をエクスプローラー上で右クリックして、[PowerShell で実行] を選択して実行すると、以下のような結果が得られます。

LastName, FirstName, DisplayName, Email, LastSignedInDate, MailboxSize(MB)
宇枝 , 都子 , 宇枝 都子 , user1@contoso.com , Last 15 days , 25600 
徳富 , 光晴 , 徳富 光晴 , user2@contoso.com , Last 15 days , 25600 
三森 , 恵美 , 三森 恵美 , user3@contoso.com , Last 15 days , 25600 
村田 , 一郎 , 村田 一郎 , user4@contoso.com , Last 15 days , 25600 
黒須 , 一世 , 黒須 一世 , user5@contoso.com , Last 15 days , 25600

また、出力形式を表にまとめることができるFormat-Tableコマンドレット (エイリアスはft) を用いると、以下のようにより簡単に記述することも可能です。

add-PSSnapIn Microsoft.Exchange.Transporter
$bposlogin = "admin@contoso.com"
$bpospwd = "Password"
$str=ConvertTo-SecureString $bpospwd -AsPlainText -Force

$bposcred = New-Object System.Management.Automation.PSCredential($bposlogin, $str)

Get-MSOnlineUser -Enabled -Quiet -Credential $bposcred | ft -AutoSize -Property LastName, FirstName, DisplayName, Identity, LastSignedInDate, MailBoxSize

ユーザーリストの取得を自動化する

getUserList01.ps1 を定期的に実行するようにするには、Windows の管理ツールの中にあるタスク スケジューラを使います。以下のスクリプトをメモ帳にコピーし、start.cmd というファイルに保存します。

chcp 932
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -file "D:\getUserList01.ps1" > "D:\UserList.csv"

getUserList01.ps1 のある場所と、出力先ファイル (UserList.csv) の場所は適宜変更してください。

コマンド

chcp 932

は、標準出力のコードページを Shift JIS に設定するものです。UserList.csv を Shift JIS エンコードで保存することができます。Microsoft Excel などでファイルを開いた時に文字化けをしないようにエンコーディングを指定しておきます。

作成された Start.cmd をタスク スケジューラで定期的に実行するようにすることで、UserList.csv を定期的に更新することが可能になります。

使用済みメールボックス容量とアイテム数を取得する

各ユーザーについて、割り当てたメールボックス容量の情報のほかに、使用済みメールボックス容量やアイテム数に関する情報も取得したい場合は、Get-XsHostedExchangeMailbox コマンドを使います。

このコマンドを以下のように組み込みます。以下のスクリプトをメモ帳にコピーし、getUserList02.ps1 というファイルに保存します。

add-PSSnapIn Microsoft.Exchange.Transporter
$bposlogin = "admin@contoso.com"
$bpospwd = "Password"
$str=ConvertTo-SecureString $bpospwd -AsPlainText -Force

$bposcred = New-Object System.Management.Automation.PSCredential($bposlogin, $str)

Write-Host "LastName, FirstName, DisplayName, Email, LastSignedInDate, MailboxSize(MB) , UsedSize(Byte), ItemCount`r"
$enabledUser = Get-MSOnlineUser -Enabled -Quiet -Credential $bposcred
ForEach($user in $enabledUser)
{
    $userDetail = Get-XsHostedExchangeMailbox -SourceServer red003.mail.apac.microsoftonline.com -Quiet -SourceIdentity $user.Identity -SourceAdminCredential $bposcred -SourceDetail Full
    Write-Host $user.LastName"," $user.FirstName"," $user.DisplayName"," $user.Identity","  $user.LastSignedInDate"," $user.MailboxSize"," $userDetail.storageByteSize"," $userDetail.ItemCount"`r"
}

Get-XsHostedExchangeMailbox は、元々メールのデータ移行を行うときに使用するコマンドですが、使用済みメールボックス容量やアイテム数に関する情報の取得が可能です。ただし、Get-MSOnlineUser に比べて実行に多少時間がかかりますのでご注意ください。

$userDetail = Get-XsHostedExchangeMailbox -SourceServer red003.mail.apac.microsoftonline.com -Quiet -SourceIdentity $user.Identity -SourceAdminCredential $bposcred -SourceDetail Full

SourceServer オプションについては、「Microsoft Online Services の URL」の「モバイル デバイスの URL」を参照してください。

getUserList02.ps1 をエクスプローラー上で右クリックして、[PowerShell で実行] を選択して実行すると、以下のような結果が得られます。

LastName, FirstName, DisplayName, Email, LastSignedInDate, MailboxSize(MB), UsedSize(Byte), ItemCount
宇枝 , 都子 , 宇枝 都子 , user1@contoso.com , Last 15 days , 25600 , 2847519 , 7
徳富 , 光晴 , 徳富 光晴 , user2@contoso.com , Last 15 days , 25600 , 1002062 , 279
三森 , 恵美 , 三森 恵美 , user3@contoso.com , Last 15 days , 25600 , 2847400 , 5
村田 , 一郎 , 村田 一郎 , user4@contoso.com , Last 15 days , 25600 , 9804 , 10
黒須 , 一世 , 黒須 一世 , user5@contoso.com , Last 15 days , 25600 , 70165 , 45

参考情報: ユーザー オブジェクトのプロパティ一覧

ユーザー オブジェクト (Microsoft.Exchange.Transporter.Provider.MicrosoftOnline.MicrosoftOnlineUser) のプロパティ一覧は以下の通りです。なお、Get-MSOnlineUser で返されるインスタンスでは、値が代入されていないプロパティもありますのでご注意ください。

Identity 
FirstName 
LastName 
Password 
UserLocation 
SubscriptionIds
MailboxSize
DisplayName 
FaxNumber 
MobilePhone 
OfficePhone 
StreetAddress 
City 
StateOrProvince 
ZipOrPostalCode 
CountryOrRegion 
JobTitle 
Department 
OfficeNumber 
ProxyAddresses
PasswordExpirationDate
UsedMailboxSize
CreatedDate
IsActive
LastSignedInDate
SourceProps
TargetPropsProps
ContentType
StatusText 
SourceTechnology
SourceServerVersion 
SourceServer 
SourceLocation 
SourceUID 
TargetTechnology 
TargetServerVersion 
TargetServer 
TargetLocation 
TargetUID 
ResolvedName 
MigrationStatus
LastMigrationTime
Error 
Warnings
TargetMatches
TargetMatchType 
HardMatch 
HardMatchName 
FirstSoftMatch 
FirstSoftMatchName 
AssociatedMatches
Name 
UniqueName 
Description 
StorageByteSize 
RuntimeByteSize
ItemCount
DetailLevel 
CreatedTime 
ModifiedTime
AccessedTime
Attachments 
Acls 
doNotInheritACL
ResolvableUri