1

確実に例外を生成するコードがあります。これは予想されることなので、実際の問題を探すために $error 変数をダンプするときに、スクリプトの最後に表示されないようにします。

ステップ 1 は、この例外を見つけて処理することですよね? そこまでたどり着けない。これが私が持っているものです:

Function Add-PowerShellSnapIn($SnapInName){
    Try{
        if ((Get-PSSnapin -Name $SnapInName) -eq $null){
            Write-Warning "SnapIn Is Not Already Loaded"
        }
    }Catch [System.Exception]{
        Write-Warning "Error Caught"
    }
}

Add-PowerShellSnapIn -SnapInName "Microsoft.Exchange.Management.PowerShell.Admin"

このコードを実行すると例外が表示されますが、Catch ブロックが例外をキャッチしたことを示す小さな「書き込み警告」テスト メッセージは表示されません。ここで何かが欠けているに違いありません。ここに私が見る例外があります:

Get-PSSnapin : パターン 'Microsoft.Exchange.Management.PowerShell.Admin' に一致する Windows PowerShell スナップインが見つかりませんでした。パターンを確認してから、コマンドを再試行してください。C:\users\myuser\Desktop\Test.ps1:4 char:20 + if ((Get-PSSnapin <<<< -Name $SnapInName) -eq $null){ + CategoryInfo : InvalidArgument: (Microsoft.Excha. ..owerShell.Admin:String) [Get-PSSnapin]、PSArgumentException + FullyQualifiedErrorId : NoPSSnapInsFound、Microsoft.PowerShell.Commands.GetPSSnapinCommand

編集:時間を割いて私を助けてくれた人に感謝します!

4

1 に答える 1

6

Catch ブロックに入るには、に 追加する必要-ErrorAction stopがあります。Get-PSSnapin

Function Add-PowerShellSnapIn($SnapInName){
    Try{
        if ((Get-PSSnapin -Name $SnapInName -ErrorAction Stop) -eq $null){
            Write-Warning "SnapIn Is Not Already Loaded"
        }
    }Catch [System.Exception]{
        Write-Warning "Error Caught"
    }
}

Add-PowerShellSnapIn -SnapInName "Microsoft.Exchange.Management.PowerShell.Admin"
于 2013-08-29T01:38:39.553 に答える