3

电源外壳 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 回答