ActiveSync 利用履歴のあるアカウント一覧を取得する
発行日: 2010 年 8 月
この記事では、Windows phoneやiPhone などのスマートフォンを使って ActiveSync を行っているユーザーの一覧を、Microsoft Online Services 移行ツールに付属する PowerShell スクリプトと Exchange Web Services Managed API によりこのタスクを自動化する方法についてご紹介します。
Exchange Web Services Managed API を PowerShell スクリプトから呼び出して利用するには、Exchange Web Services Managed API、Microsoft Online Services 移行ツールや PowerShell をインストールしておく必要があります。詳細は以下を参照してください。
- 移行ツール (32 ビット) のダウンロード
- 移行ツール (64 ビット) のダウンロード
- 移行ツール インストールの前提条件
- Exchange Web Services Managed API (32 ビット/64 ビット) のダウンロード (英語)
Exchange Web Services Managed API の詳細については、MSDN の SDK (英語) をご覧ください。
準備ができたら、以下のスクリプトをメモ帳にコピーし、ActiveSynced.ps1 というファイルに保存します。このスクリプトでは、ユーザー識別子を列挙しつつ、そのユーザーが過去に ActiveSync を行っている場合、”ActiveSync-Enabled” というフラグを出力します。
$bposlogin = "admin@contoso.com"
$bpospwd = "Password"
$password=ConvertTo-SecureString $bpospwd -AsPlainText -Force
$uri=[system.URI] "https://red003.mail.apac.microsoftonline.com/ews/exchange.asmx"
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\1.0\Microsoft.Exchange.WebServices.dll"
$adminCredential = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $bposlogin,$password
[void][Reflection.Assembly]::LoadFile($dllpath)
add-PSSnapIn Microsoft.Exchange.Transporter
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)
$service.Url = $uri
$service.Credentials = New-Object System.Net.NetworkCredential($bposlogin,$bpospwd,"")
$enabledUsers = Get-MSOnlineUser -Enabled -Quiet -Credential $admincredential
$enabledUsers | ForEach-Object {
If (($_.ProxyAddresses -ne "") -and ($_.SubscriptionIDs -ne ""))
{
$activeSyncEnabled=""
$emailaddresses = $_.ProxyAddresses
ForEach ($address in $emailaddresses){
$addresstype=$address.ProxyAddress.substring(0,5)
If ($addresstype.compareto('SMTP:') -eq 0)
{
$mailboxname = $address.ProxyAddress.Replace("SMTP:","")
}
}
$folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Root,$MailboxName)
$folderRoot = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $folderid)
$folderview = New-Object Microsoft.Exchange.WebServices.Data.FolderView(10000);
$foldercoll = $service.FindFolders($folderid,$folderview)
$foldercoll | foreach {
If (($_.displayname -eq "ExchangeSyncData") -and ($_.Childfoldercount -gt 0))
{
$activeSyncEnabled= "ActiveSync-Enabled"
}
}
Write-Host $mailboxname $activeSyncEnabled
}
}
ここで、以下のコマンド
add-PSSnapIn Microsoft.Exchange.Transporter
は、Microsoft Online Services 移行ツールによって追加された PowerShell コマンドレットを有効にするためのコマンドです。ちなみに、「移行コマンド シェル」から Microsoft Online Services 専用の PowerShell スクリプトを実行する場合は、このコマンドを実行する必要はありません。
以下のコマンド
$uri=[system.URI] "https://red003.mail.apac.microsoftonline.com/ews/exchange.asmx"
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\1.0\Microsoft.Exchange.WebServices.dll"
$adminCredential = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $bposlogin,$password
[void][Reflection.Assembly]::LoadFile($dllpath)
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)
$service.Url = $uri
$service.Credentials = New-Object System.Net.NetworkCredential($bposlogin,$bpospwd,"")
は、PowerShell で Exchange Web Services Managed API を有効にするためのコマンドです。$dllpath にはAPIのDLLをインストールしたパスを指定します。$url は Exchange Web Services API のURLを指定します。組織が使っているデータセンターの場所により値を変更します。
アジア太平洋地域 (APAC) | https://red003.mail.apac.microsoftonline.com/ews/exchange.asmx |
ヨーロッパ、中東、アフリカ (EMEA) | https://red002.mail.emea.microsoftonline.com/ews/exchange.asmx |
北アメリカ | https://red001.mail.microsoftonline.com/ews/exchange.asmx |
$bposloginと$bpospwd には、管理者権限をもつアカウントのユーザー名とパスワードで置き換えてください。なお、このテキスト ファイルは管理者アカウント情報を含むため、取り扱いには十分注意ください。
以下のコマンド
$enabledUsers = Get-MSOnlineUser -Enabled -Quiet -Credential $admincredential
によって、対象となるユーザー オブジェクト (Microsoft.Exchange.Transporter.Provider.MicrosoftOnline.MicrosoftOnlineUser) の配列を $enabledUser に取得します。ここでは、有効なユーザー一覧のみ取得していますが、引数を変更することで特定の属性を持つユーザー一覧を取得することも可能です。詳細は Get-MSOnlineUser を参照してください。
その後、配列内で ProxyAddress が割り振られている各々のユーザーに対して、ルートフォルダの FolderId クラス (英語) を作成し、Folder.Bind メソッド (英語) で $folderRoot 変数にフォルダ オブジェクトを取得します。続いて、フォルダを建託するための FolderView クラス (英語) を作成し、“ExchangeSyncData” という名前のフォルダがないか探します。ActiveSync を実行すると ”ExchangeSyncData” というフォルダが作られるため、これでユーザーの判別が可能です。