RobustCloudCommand Module の紹介

以前は Script だった Start-RobustCloudCommand.ps1 が、Module になってしかも MFA にも対応したということで、使い方を紹介します。

おさらい

Exchange Online の PowerShell はスロットリングやセッションの不安定さなどの問題から、長時間大量のオブジェクトに対する処理を実行するのがものすごく苦手です。そんな時にセッションを管理しながら Exchange Online のコマンドを実行するのが Start-RobustCloudCommand.ps1 でした。紹介ブログが日本語にも翻訳されていたので、 Start-RobustCloudCommand.ps1 を知らないという方はまずは日本語版のブログを読むことをおすすめします。

膨大な数の Office 365 ユーザーへの PowerShell コマンドレットの実行
https://blogs.technet.microsoft.com/exchangeteamjp/2015/11/16/office-365-powershell/

準備

はじめにモジュールのインストールを行います。管理者権限で起動した Windows PowerShell で以下のようにコマンドを実行してモジュールをインストールします。依存しているモジュールがあるためか、Force スイッチをつけておかないとうまくインストールされなかったので、スイッチをつけておいた方が無難です。

Install-Module -Name RobustCloudCommand -Force

次にコマンドの実行対象ユーザーのリストを作成します。これは以前から特には変わらないです。PowerShell V2 Module を使用するのもよいと思いますが、ここでは従来通りの Get-Mailbox を使用して以下のようにリストを作っておきます。

Invoke-Command -Session (Get-PSSession) -ScriptBlock { Get-Mailbox -ResultSize Unlimited | Select-Object -Property DisplayName, Identity, PrimarySMTPAddress } | Export-Csv c:\temp\users.csv -NoTypeInformation -Encoding UTF8

非対話式 (基本認証) で使用する

一旦 Windows PowerShell を再起動して、作ったリストを読み込みます。

$Users = Import-Csv c:\temp\users.csv

そして資格情報の用意と、念のため明示的にモジュールの読み込みを行います。

$SecPassword = ConvertTo-SecureString "password" -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $SecPassword)
Import-Module RobustCloudCommand

モジュールに含まれている Start-RobustCloudCommand コマンドが使用できるので、以下のように実行します。ここではリストに記載されているユーザーのモバイル デバイスの情報を取得して CSV ファイルに書き出すという処理を例として行います。スクリプト版にはあった Agree スイッチはなくなっています。

Start-RobustCloudCommand -LogFile c:\temp\RobustCloudCommand.log -Recipients $Users -ScriptBlock { Get-MobileDeviceStatistics -Mailbox $Input.PrimarySmtpAddress.ToString() | Select-Object @{Name="DisplayName";Expression={$Input.DisplayName}}, Status, DeviceOS, DeviceModel, LastSuccessSync, FirstSyncTime | Export-Csv c:\temp\devices.csv -Append -NoTypeInformation -Encoding UTF8 } -Credential $Cred

出力ファイルを見ると分かるように、スクリプト版の時と同じように情報が取得できています。

対話式 (MFA) で使用する

モジュールになって MFA に対応しているので、同じ処理を対話式でも使用してみます。まずは Windows PowerShell を再起動して、先ほどと同じようにリストの読み込みとモジュールの読み込みを行います。

$Users = Import-Csv c:\temp\users.csv
Import-Module RobustCloudCommand

そして Credential パラメーターを指定せずに実行します。

Start-RobustCloudCommand -LogFile c:\temp\RobustCloudCommand.log -Recipients $Users -ScriptBlock { Get-MobileDeviceStatistics -Mailbox $Input.PrimarySmtpAddress.ToString() | Select-Object @{Name="DisplayName";Expression={$Input.DisplayName}}, Status, DeviceOS, DeviceModel, LastSuccessSync, FirstSyncTime | Export-Csv c:\temp\devices.csv -Append -NoTypeInformation -Encoding UTF8 }

すると Office 365 のサインイン画面が表示されます。管理者の資格情報でサインインをするとあとは非対話式の時と同じように処理が行われ、出力ファイルが書き出されます。