about_Throw
简短说明
介绍了生成终止错误的 throw
关键字。
长说明
throw
关键字会导致终止错误。 可以使用 throw
关键字停止对命令、函数或脚本的处理。
例如,可以在 if
语句的脚本块中使用 throw
关键字来响应条件,或者将其用在 try
-catch
-finally
语句的 catch
块中。
throw
关键字可以引发任何对象,例如用户消息字符串或导致了错误的对象。
语法
throw
关键字的语法如下:
throw [<expression>]
throw
语法中的表达式是可选的。 如果 throw
语句未出现在 catch
块中,并且未包含表达式,则它会生成 ScriptHalted 错误。
throw
Exception: ScriptHalted
如果在没有表达式的 catch
块中使用 throw
关键字,它将再次引发当前 RuntimeException。 有关详细信息,请参阅 about_Try_Catch_Finally。
引发字符串
throw
语句中的可选表达式可以是字符串,如以下示例所示:
throw "This is an error."
Exception: This is an error.
引发其他对象
表达式还可以是一个对象,该对象引发表示 PowerShell 进程的对象,如以下示例所示:
throw (Get-Process pwsh)
Exception: System.Diagnostics.Process (pwsh) System.Diagnostics.Process (pwsh) System.Diagnostics.Process (pwsh)
可以使用 $Error
自动变量中 ErrorRecord 对象的 TargetObject 属性来查看错误。
$Error[0].TargetObject
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
125 174.44 229.57 23.61 1548 2 pwsh
63 44.07 81.95 1.75 1732 2 pwsh
63 43.32 77.65 1.48 9092 2 pwsh
你还可以 throw
ErrorRecord 对象或 .NET 异常。 以下示例使用 throw
关键字引发 System.FormatException 对象。
$formatError = New-Object System.FormatException
throw $formatError
OperationStopped: One of the identified items was in an invalid format.
生成的错误
throw
关键字可以生成 ErrorRecord 对象。 ErrorRecord 对象的 Exception 属性包含 RuntimeException 对象。
ErrorRecord 对象和 RuntimeException 对象的其余部分因被引发的对象而异。
throw
对象包装在 ErrorRecord 对象中,ErrorRecord 对象自动保存在 $Error
自动变量中。
使用 throw
创建强制参数
与以前版本的 PowerShell 不同,请勿使用 throw
关键字进行参数验证。 有关正确方式,请参阅 about_Functions_Advanced_Parameters。