Exchange Online の PowerShell で警告出力を取得する方法

Exchange Online の PowerShell では以下のように警告が出力されることがあります。

この警告の内容をスクリプトで取得するには、コマンド自体を Invoke-Command で実行して、WarningVariable で取得します。以下のようにします。

$warn = ""
Invoke-Command -Command {Get-Mailbox -ResultSize 1} -Session:(Get-PSSession) -WarningVariable warn

こうすると、WarningVariable に指定した変数を参照することで警告出力の内容を取得できます。


以下は補足です。これらの方法では Exchange Online PowerShell の警告出力は取得できません。

通常は以下のように、警告出力の内容を取得したいコマンド自体の WarningVariable で、警告出力の内容を取得できます。

function myfunc{[CmdletBinding()] param() Process {Write-Output "result"; Write-Warning "my warning"}}
$warn = ""
myfunc -WarningVariable warn

Warning Stream の Redirect でも取得できます。

$warn = myfunc 3>&1; "----"; $warn

ただし繰り返しになりますがこれらの方法では Exchange Online PowerShell の警告出力は取得できませんので、冒頭で説明した方法を利用する必要があります。