[英]Powershell calling function with parameter inside if statement
我写了一个 function 像这样:
Param(
[Parameter(Mandatory=$False,
ParameterSetName="Error")]
[String[]]
$ErrorName
)
function Get-Err
{
if ($ErrorName -eq "SyncCert KO @vLDSA") {
"do something"
}
elseif ($ErrorName -eq "SyncCert KO @vLDS0") {
"do something"
}
elseif ($ErrorName -eq "SyncCert KO @vLDS1") {
"do something"
}
elseif ($ErrorName -eq $null) {
"You must enter a parameter to start the script, preceded by the prefix '-Error'!"
}
elseif ($ErrorName -eq 0) {
"You must enter a parameter to start the script, preceded by the prefix '-Error'!"
}
else {"Unexpected value '$ErrorName'"}
}
我想这样称呼它:
$a = "foo"
if ($a) {Get-Err -Error "SyncCert KO @vLDSA"} else {"bar"}
不幸的是不会工作!
Shell 匹配其他条件并显示“意外值''”
PSDebug 对我来说不是很清楚:
DEBUG: 1+ if ( >>>> $a) { Get-Err -Error "SyncCert KO @vLDSA"} else {"bar"}
DEBUG: ! CALL function '<ScriptBlock>'
DEBUG: 1+ if ($a) { >>>> Get-Err -Error "SyncCert KO @vLDSA"} else {"bar"}
DEBUG: 16+ >>>> {
DEBUG: ! CALL function 'script:Get-Err' (defined in file 'E:\Scripts\functions.ps1')
DEBUG: 17+ if ( >>>> $ErrorName -eq "SyncCert KO @vLDSA") {
DEBUG: 20+ elseif ( >>>> $ErrorName -eq "SyncCert KO @vLDS0") {
DEBUG: 23+ elseif ( >>>> $ErrorName -eq "SyncCert KO @vLDS1") {
DEBUG: 41+ else { >>>> "Unexpected value ''"}
似乎没有在命令行解释“ErrorName”
如果我取下 function sintax,在“脚本模式”下工作......
有人能帮助我吗?
在 function 本身中声明参数:
function Get-Err
{
param($ErrorName)
# ...
}
现在我们还可以将大量输入验证移至 param 块并简化代码:
function Get-Err
{
param(
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory = $true)]
[string]$ErrorName
)
if ($ErrorName -eq "SyncCert KO @vLDSA") {
"do something"
}
elseif ($ErrorName -eq "SyncCert KO @vLDS0") {
"do something"
}
elseif ($ErrorName -eq "SyncCert KO @vLDS1") {
"do something"
}
else {
"Unexpected value '$ErrorName'"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.