Powershell 如何使验证集也适用于强制参数输入提示?

Powershell 如何使验证集也适用于强制参数输入提示?,powershell,Powershell,我对我的函数使用动态验证集作为强制参数 未提供时,Powershell会提示并强制用户输入 但是在这种情况下,TAB没有响应,我必须键入值 有没有办法使动态验证集在提示符下可用?您只能使用ValidateSet上的选项卡 如果使用Show命令,则可以看到相同的行为 唯一的预运行验证是ValidateSet 试试这个: Function Test-Function { Param ( [String]$NormalParameter, [Valida

我对我的函数使用动态验证集作为强制参数

未提供时,Powershell会提示并强制用户输入

但是在这种情况下,TAB没有响应,我必须键入值


有没有办法使动态验证集在提示符下可用?

您只能使用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引擎的工作。但如果有办法的话,我很想知道