1

我正在使用 C# 创建 PowerShell cmdlet。对于其中一个参数,我使用的是ValidateSet.

[ValidateNotNullOrEmpty]
[ValidateSet(new string[]{"STANDARD", "CUSTOM","MINIMUM","DEFAULT"},IgnoreCase=true)]
[Parameter(
    Mandatory = true,
    ValueFromPipelineByPropertyName = false,
    ValueFromPipeline = false,
    HelpMessage = "House Mode")
]
[Alias("hm")]
public string HouseMode
{
    get { return m_housemode; }
    set { m_housemode = value;  }
}   

如何使值ValidateSet出现在制表符完成列表中?

4

2 回答 2

1

为避免重复,您还可以对枚举中的有效值进行如下编码。这就是我直接在 PowerShell 中执行此操作的方式,但大概在您的 c# 代码中声明一个枚举会起作用,例如:

Add-Type -TypeDefinition @"
    public enum ContourBranch
    {
       Main,
       Planned,
       POP,
       Statements
    }
"@

然后将您的参数声明为该新类型,即

[CmdletBinding(SupportsShouldProcess=$True)]
param (
    [Parameter(Mandatory=$true)]
    [ContourBranch] $Branch 
)

这使您可以完成制表符,如果您输入错误的值,错误消息还会列出有效的枚举值,这非常简洁。

于 2014-11-27T11:56:46.813 回答
1

这是来自 PSCX 中的 Format-Hex 命令:

[Parameter(ParameterSetName = ParameterSetObject,
           ValueFromPipelineByPropertyName = true,
           HelpMessage = "The encoding to use for string InputObjects.  Valid values are: ASCII, UTF7, UTF8, UTF32, Unicode, BigEndianUnicode and Default.")]
[ValidateNotNullOrEmpty]
[ValidateSet("ascii", "utf7", "utf8", "utf32", "unicode", "bigendianunicode", "default")]
public StringEncodingParameter StringEncoding
{
    get { return _encoding; }
    set { _encoding = value; }
}

制表符补全适用于此参数。在您的情况下,我认为您想像这样指定属性:

[ValidateSet("STANDARD", "CUSTOM","MINIMUM","DEFAULT", IgnoreCase = true)]
于 2014-11-27T02:42:38.210 回答