Powershell参数处理

时间:2017-06-05 16:59:51

标签: powershell

我有一个看起来像这样的PowerShell脚本。

Function Write-DeploymentConf {
    param
    (
        [Parameter(Mandatory)]
        [ValidateLength(4, 15)]
        [String]
        $CustomerName,

        [Parameter(Mandatory)]
        [ValidateLength(4, 15)]
        [String]
        $FacilityName = $CustomerName,

        [Parameter(Mandatory)]
        [ValidateLength(5, 1024)]
        [String]
        $LocationAddress,

        [Parameter(Mandatory)]
        [ValidateSet("onpremise", "cloud")]
        [String]
        $DeploymentMode = "onpremise"
    )
    Process {
        $( Write-Host "CustomerName: $CustomerName")
        $( Write-Host "FacilityName: $FacilityName")
        $( Write-Host "LocationAddress: $LocationAddress")
        $( Write-Host "DeploymentMode: $DeploymentMode")
    }

}

Write-DeploymentConf

它接近我想要的东西,但它有一些问题。

  1. 它默默接受将无法通过验证的输入,然后保留它们,直到用户输入每个参数的值,然后消失并显示错误消息。我不想死,我只想在验证失败时重新提示。而且,理想情况下,我想立即重新提示,而不是在输入所有内容之后。我只想重新提示验证失败的那些。

  2. 我想在用户搞砸之前告诉用户验证规则是什么。如果唯一允许的值是" onpremise"或者"云"然后应该告诉用户。理想情况下,用户只需输入" 1,输入" for" onpremise"," 2,输入" for" cloud"。

  3. 有些参数有一个合理的默认值,我想提示用户接受。例如,如果$CustomerName是" abcd",那么" abcd"是$FacilityName的合理默认值。提示$FacilityName时,我想允许用户更改它,或按"输入"接受" abcd"作为默认值。我不仅希望接受默认设置,而且还希望显示' abcd'将是提示行上的默认值。同样," onpremise"是$DeploymentMode的合理默认值,但我希望他们肯定地接受默认值。

  4. 某些参数集仅在条件上是强制性的。例如,如果这是云部署,则必须提供一堆凭证。我可以保持好的"从命令行接受但是回到提示"运行时条件的行为?

0 个答案:

没有答案