Param()块中的PowerShell捕获异常

Param()块中的PowerShell捕获异常,powershell,powershell-3.0,Powershell,Powershell 3.0,当$age超出范围时如何捕获异常?正如注释中指出的,需要在调用上下文中捕获验证错误 试试看{ \Set-Age.ps1 } catch[System.Management.Automation.ParameterBindingException]{ Write Host“尝试将参数绑定到参数$($).Exception.ParameterName)时引发错误,消息为:$($).Exeption.message” } 抓住{ #参数绑定器以外的其他对象引发了异常 } 正如注释中指出的,需要在调用上

$age
超出范围时如何捕获异常?

正如注释中指出的,需要在调用上下文中捕获验证错误

试试看{
\Set-Age.ps1
}
catch[System.Management.Automation.ParameterBindingException]{
Write Host“尝试将参数绑定到参数$($).Exception.ParameterName)时引发错误,消息为:$($).Exeption.message”
}
抓住{
#参数绑定器以外的其他对象引发了异常
}

正如注释中指出的,需要在调用上下文中捕获验证错误

试试看{
\Set-Age.ps1
}
catch[System.Management.Automation.ParameterBindingException]{
Write Host“尝试将参数绑定到参数$($).Exception.ParameterName)时引发错误,消息为:$($).Exeption.message”
}
抓住{
#参数绑定器以外的其他对象引发了异常
}

调用方必须捕获参数验证的异常。无法在
Param()
块中捕获它。如果我无法捕获异常,[ValidateRange]的主要目的是什么?将异常保存为。通常预期用户会提供不适当的参数值。
[需要引证
]目的是确保脚本或函数仅在参数接收到有效值时运行,否则不会运行。如果您希望参数接受任何内容并处理您自己得到的任何值:不要使用参数验证。在函数/脚本体中执行您自己的类型检查(例如在
Begin{}
块中)。我说过在
Param()
块中无法捕获它。参数验证的异常必须由调用方捕获。无法在
Param()
块中捕获它。如果我无法捕获异常,[ValidateRange]的主要目的是什么?将异常保存为。通常预期用户会提供不适当的参数值。
[需要引证
]目的是确保脚本或函数仅在参数接收到有效值时运行,否则不会运行。如果您希望参数接受任何内容并处理您自己得到的任何值:不要使用参数验证。在函数/脚本体中执行您自己的类型检查(例如在
Begin{}
块中)。我说过在
Param()
块中无法捕捉它。
Param(
    [ValidateRange(21,90)]
    [int[]]$Age
)