Powershell 如何使验证集也适用于强制参数输入提示?
我对我的函数使用动态验证集作为强制参数 未提供时,Powershell会提示并强制用户输入 但是在这种情况下,TAB没有响应,我必须键入值Powershell 如何使验证集也适用于强制参数输入提示?,powershell,Powershell,我对我的函数使用动态验证集作为强制参数 未提供时,Powershell会提示并强制用户输入 但是在这种情况下,TAB没有响应,我必须键入值 有没有办法使动态验证集在提示符下可用?您只能使用ValidateSet上的选项卡 如果使用Show命令,则可以看到相同的行为 唯一的预运行验证是ValidateSet 试试这个: Function Test-Function { Param ( [String]$NormalParameter, [Valida
有没有办法使动态验证集在提示符下可用?您只能使用ValidateSet上的选项卡 如果使用Show命令,则可以看到相同的行为 唯一的预运行验证是ValidateSet 试试这个:
Function Test-Function
{
Param
(
[String]$NormalParameter,
[ValidateSet('T1','T2','T3')]
[String]$ValidateSetParameter,
[ValidatePattern("[T4]|[T5]|[T6]")]
[String]$ValidatePatternParameter,
[ValidateScript({$_ -In ('T7','T8','T9')})]
[String]$ValidateScriptParameter,
[ValidateRange('A','C')]
[String]$ValidateRangeParameter
)
}
Show-Command Test-Function
你无能为力!
原因是,主机应用程序向您显示的提示没有必要的信息可供循环使用有效值
要了解原因,必须准确了解调用cmdlet时发生的情况,而不将参数传递给强制
参数。让我们一起探索吧
首先,让我们定义一个简单的示例函数:
function Test-ValidateSet {
param(
[Parameter(Mandatory)]
[ValidateSet('a','b','c')]
[string[]]$Character
)
Write-Host "You entered: $Character!"
}
如果要查看PowerShell在按下enter键时对语句所做的操作,请使用Trace命令
PS C:\> Trace-Command ParameterBinding {Test-ValidateSet} -PSHost
DEBUG: ParameterBinding Information: 0 : BIND NAMED cmd line args [Test-ValidateSet]
DEBUG: ParameterBinding Information: 0 : BIND POSITIONAL cmd line args [Test-ValidateSet]
DEBUG: ParameterBinding Information: 0 : MANDATORY PARAMETER CHECK on cmdlet [Test-ValidateSet]
DEBUG: ParameterBinding Information: 0 : PROMPTING for missing mandatory parameters using the host
cmdlet Test-ValidateSet at command pipeline position 1
Supply values for the following parameters:
Character[0]:
这些DEBUG
消息必须是从调用提示的位置发出的。在PowerShell
GitHub repo中搜索“使用主机提示缺少必需参数”将引导您
正如您可能能够破译的那样,只需要3件事:
[string]
)[string]
)[System.Management.Automation.Host.FieldDescription[]]
)查看对象的属性,您会发现它们大致对应于
[参数]
属性-没有其他类型的属性-这就是您无法基于验证属性完成值的基本原因。不幸的是,我怀疑是这样。我不认为有办法做到这一点,因为这更像是后端PS引擎的工作。但如果有办法的话,我很想知道