错误类型
错误是一个错误,人们可能想知道它中是否有类型。好吧,使用 PowerShell,错误大致分为两个标准,
- 终止错误
- 非终止错误
正如名称所示,终止错误将终止执行,非终止错误让执行继续执行下一个语句。
假设 $ ErrorActionPreference 值是默认值(Continue) ,这是事实。 $ ErrorActionPreference 是一个 Prefrence 变量 ,它告诉 powershell 在出现非终止错误时该怎么做。
终止错误
可以使用典型的 try catch 处理终止错误,如下所示
Try
{
Write-Host "Attempting Divide By Zero"
1/0
}
Catch
{
Write-Host "A Terminating Error: Divide by Zero Caught!"
}
上面的代码片段将执行,错误将通过 catch 块捕获。
非终止错误
另一方面,非终止错误默认情况下不会在 catch 块中捕获。其背后的原因是非终止错误不被视为严重错误。
Try
{
Stop-Process -Id 123456
}
Catch
{
Write-Host "Non-Terminating Error: Invalid Process ID"
}
如果执行上面的行,则不会从 catch 块获取输出,因为错误不被认为是关键的,执行只会从下一个命令继续执行。但是,错误将显示在控制台中。要处理非终止错误,你只需更改错误首选项即可。
Try
{
Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
"Non-Terminating Error: Invalid Process ID"
}
现在,使用更新的错误首选项,此错误将被视为终止错误,并将在 catch 块中捕获。
调用终止和非终止错误:
Write-Error cmdlet 只是将错误写入调用主机程序。它不会停止执行。凡为扔会给你一个终止错误,并停止执行
Write-host "Going to try a non terminating Error "
Write-Error "Non terminating"
Write-host "Going to try a terminating Error "
throw "Terminating Error "
Write-host "This Line wont be displayed"