3

Powershell v2:

try { Remove-Item C:\hiberfil.sys -ErrorAction Stop }
catch [System.IO.IOException]
{ "problem" }
catch [System.Exception]
{ "other" }

もちろん、例として休止状態ファイルを使用しています。実際には、削除する権限がない場合があると予想される別のファイルがあり、この例外的な状況を把握したいと考えています。

出力:

output

それでも$error[0] | fl * -Force出力System.IO.IOException: Not Enough permission to perform operation.

問題: 最初の catch ブロックでこの例外をキャッチしない理由がわかりません。なぜなら、これは例外の種類と一致するからです。

4

2 に答える 2

7

ストップアクションを使用すると、PowerShellは例外の種類を次のように変更します。

[System.Management.Automation.ActionPreferenceStopException]

だから、これはあなたが捕まえるべきものです。また、それを省略して、すべてのタイプをキャッチすることもできます。さまざまな例外を検討したい場合は、これを試してみてください。

try 
{
    Remove-Item C:\pagefile.sys -ErrorAction Stop
}
catch
{
    $e = $_.Exception.GetType().Name

    if($e -eq 'ItemNotFoundException' {...}
    if($e -eq 'IOException' {...}
}
于 2013-02-01T14:53:31.027 に答える
0

データの破損を避けるために未処理の例外が発生した場合にスクリプトを停止したかったので、グローバル エラー処理の Trap メソッドが気に入っています。ErrorActionPreference を全面的に停止するように設定しました。次に、エラーが発生すると予想される場所で Try/Catch を使用して、スクリプトが停止するのを防ぎます。ここで私の質問を参照してくださいPowerShellスクリプトでエラーが発生した場合はメールを送信し、スクリプトを終了してください

于 2013-02-02T14:27:15.263 に答える