Exchange 学習帳

ExchangeやOffice 365の備忘録です。

Exchange Onlineでエラー処理をしたい

こんにちは!
Exchange Onlineである処理を実行したく、スクリプトを書いていたのですが、
エラー処理のTry-Catch構文がうまく動かず…
調べてみると、どうやら-ErrorActionオプションがうまく動かないようです。

 

Exchange Online のリモート PowerShell におけるエラー ハンドリング

紹介されている方法だと制限が多い…

 

ということで、Try-Catch構文を代替する方法を思いつきました。
$?変数という、直前のコマンドの実行状態をbool型で示す変数を使います。
成功していればTrue、失敗(エラー)していればFalse、シンプルです。
以下のように書きます。

 

ForEach($User in $Users){
    Get-Mailbox $User.Mailaddress
    If($? -eq $False){
        Write-Host "$User is not found"
    }
    }

 

エラー処理したいコマンド(例ではGet-Mailbox)の直後にIf文で$?を評価してます。
エラーが発生していれば(Falseならば)別の処理を追加で実行する、Catchの役割を果たしています。

 

応用すれば、いろいろなシーンで代替できそうです。
他にもこんな使い方があるよ!などあれば教えてください。