我有一个简单的脚本来删除文件,我知道它可能更健壮,但是在这里
$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
那会将错误附加到日志文件中。但是,如果您选择“停止”,则记录不会写入错误流。它仅包含在抛出的异常中。