我有一个简单的脚本来删除文件,我知道它可能更强大,但这里是
$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块。为什么不呢?
答案 0 :(得分:2)
将ErrorAction
开关添加到Remove-Item
命令:
Remove-Item "c:\test\new text document.txt" -force -ErrorAction Stop
这里有很好的错误处理方法:
答案 1 :(得分:2)
当出现错误时,PowerShell通常不会抛出异常。而是将记录写入错误流,您可以重定向。要强制它抛出,有两种选择。一种是将全局错误首选项设置为停止:
$ErrorActionPreference = "Stop"
另一种是将ErrorAction
参数设置为停止。这对于接受所谓的公共参数的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
这会将错误附加到日志文件中。如果您的选项是"停止"则记录不会写入错误流。然而。它只包含在抛出的异常中。