与try-catch等效的Powershell Error?

时间:2014-09-29 22:20:30

标签: powershell

我经常写的脚本试图删除它没有能力的文件。这会抛出一些错误,一个错误,一个没有足够的访问权限,另一个错误,它后来尝试删除包含第一个问题的非空文件夹。它们很好,但是如果每次抛出的都不是这两条消息之一的话,我还是会输出错误消息。

try-catch块没有捕获任何内容,因为它们是错误而不是异常。

try
{
    Remove-Item D:\backup\* -Recurse
    Write-Host "Success" -ForegroundColor Green
    Write-Host $error.count
}
catch
{
    Write-Host "caught!" -ForegroundColor Cyan
}

即使$error.count内部有错误,它仍然可以成功完成try-block。我是否被迫手动检查每次是否有任何新的$ error,或者有更好的方法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

在Try / Catch中,仅在终止错误时调用Catch块。

使用ErrorAction通用参数强制终止所有错误:

try
{
    Remove-Item D:\backup\* -Recurse -ErrorAction Stop
    Write-Host "Success" -ForegroundColor Green
    Write-Host $error.count
}
catch
{
    Write-Host "caught!" -ForegroundColor Cyan
}

答案 1 :(得分:0)

或使用全局错误:

try {
 $erroractionpreference = 'stop'
 Remove-Item D:\backup\* -Recurse 
 Write-Host "Success" -ForegroundColor Green
 Write-Host $error.count 
} catch { 
 Write-Host "caught!" -ForegroundColor Cyan
}