我有一个看起来像这样的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
它接近我想要的东西,但它有一些问题。
它默默接受将无法通过验证的输入,然后保留它们,直到用户输入每个参数的值,然后消失并显示错误消息。我不想死,我只想在验证失败时重新提示。而且,理想情况下,我想立即重新提示,而不是在输入所有内容之后。我只想重新提示验证失败的那些。
我想在用户搞砸之前告诉用户验证规则是什么。如果唯一允许的值是" onpremise"或者"云"然后应该告诉用户。理想情况下,用户只需输入" 1,输入" for" onpremise"," 2,输入" for" cloud"。
有些参数有一个合理的默认值,我想提示用户接受。例如,如果$CustomerName
是" abcd",那么" abcd"是$FacilityName
的合理默认值。提示$FacilityName
时,我想允许用户更改它,或按"输入"接受" abcd"作为默认值。我不仅希望接受默认设置,而且还希望显示' abcd'将是提示行上的默认值。同样," onpremise"是$DeploymentMode
的合理默认值,但我希望他们肯定地接受默认值。
某些参数集仅在条件上是强制性的。例如,如果这是云部署,则必须提供一堆凭证。我可以保持好的"从命令行接受但是回到提示"运行时条件的行为?