繁体   English   中英

Powershell 在 if 语句中使用参数调用 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM