【发布时间】:2017-02-14 19:25:53
【问题描述】:
我有一种情况,我需要为 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 = 测试 名称是必填参数...请提供一个值 年龄是一个强制性参数...请提供一个值 PS> $var = 测试 -Name Subhayan 年龄是必填参数...请提供一个值
但是当我省略参数的值时,我遇到了系统定义的错误消息并且我的错误处理程序没有被调用:
PS> $var = test -Name -age 32
测试:缺少参数“名称”的参数。指定类型的参数
'System.String' 然后再试一次。
在行:1 字符:13
+ $var = 测试 -Name -age 32
+ ~~~~~
+ CategoryInfo : InvalidArgument: (:) [test], ParameterBindingException
+ FullyQualifiedErrorId : MissingArgument,test
如何确保每次参数块中出现任何错误时都会调用我的自定义错误消息,即使在我使用参数名称但未能提供值的情况下也是如此。
【问题讨论】:
标签: powershell