我有一种情况需要为param块中的错误定义自定义错误处理程序。例如,如果param块中存在一些错误,我需要函数返回退出值1,并打印出自定义的错误消息。
以下是我的代码:
function test {
Param(
[string]$Name,
[int]$age
)
Begin {
$ErrorVar = 0
if (! $Name) {
Write-Host "Name is a mandatory parameter...please provide a value"
$ErrorVar = 1
}
if (! $age) {
Write-Host "Age is a mandatory parameter...please provide a value"
$ErrorVar = 1
}
}
Process {
if ($ErrorVar -eq 0) {
Write-Host "My name is $name and my age is $age"
}
}
End {
if ($ErrorVar -eq 1) {
return 1
} else {
return 0
}
}
}
如果我不使用任何一个参数(Name
,Age
),错误处理程序将正常运行:
PS> $var = test Name is a mandatory parameter...please provide a value Age is a mandatory parameter...please provide a value PS> $var = test -Name Subhayan Age is a mandatory parameter...please provide a value
但是当我省略参数的值时,我遇到了系统定义的错误消息并且没有调用我的错误处理程序:
PS> $var = test -Name -age 32 test : Missing an argument for parameter 'Name'. Specify a parameter of type 'System.String' and try again. At line:1 char:13 + $var = test -Name -age 32 + ~~~~~ + CategoryInfo : InvalidArgument: (:) [test], ParameterBindingException + FullyQualifiedErrorId : MissingArgument,test
如果param块中出现任何错误,我怎样才能确保调用自定义的错误消息,即使在我使用参数名但未能提供值的情况下也是如此。
答案 0 :(得分:1)
您应该阅读PowerShell中的高级功能。 这可以在这里完成:https://technet.microsoft.com/en-us/library/hh847743.aspx
至于您的功能,您只需在Mandatory
- 块中使用Parameter
关键字即可。
像这样:
function Test
{
Param(
[Parameter(Mandatory)]
[String]$Name,
[Parameter(Mandatory)]
[Int]$Age
)
Process
{
Write-Host "My name is $name and my age is $age"
}
}
该文档还说明了您是否需要特定范围(ValidateRange
)或特定集(ValidateSet
)。