错误类型

错误是一个错误,人们可能想知道它中是否有类型。好吧,使用 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"