我有一个简单的脚本来删除文件,我知道它可能更健壮,但是在这里

$LogFile = ".\deleteRegPol.log"

try
{
    Remove-Item "c:\test\new text document.txt" -force
    Add-Content $LogFile -Value "We ran the command"
}
catch [Exception]
{
    Add-Content $LogFile -Value $_
}
finally
{
}

当我要删除的文件不存在时,我在命令行中收到一条错误消息,但在我的日志文件中却显示命令已运行。这是在告诉我没有引发异常,导致流进入catch块。为什么不?

最佳答案

发生错误时,PowerShell通常不会引发异常。而是将记录写入错误流,您可以将其重定向。要强制它抛出,有两种选择。一种是将全局错误首选项设置为停止:

$ErrorActionPreference = "Stop"

另一种是将ErrorAction参数设置为stop。接受所谓的通用参数的cmdlet对此提供支持,Remove-Item会执行以下操作:
Remove-Item "c:\test\new text document.txt" -force -EA "Stop"

要重定向错误流,请使用代码2:
Remove-Item "c:\test\new text document.txt" -Force 2>> $LogFile

那会将错误附加到日志文件中。但是,如果您选择“停止”,则记录不会写入错误流。它仅包含在抛出的异常中。

07-24 09:32