我正在使用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
的值?
答案 0 :(得分: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)]
答案 1 :(得分:1)
为避免重复,您还可以按如下方式在枚举中编码有效值。这就是我直接在PowerShell中完成它的方式,但是可能在c#代码中声明一个枚举也可以使用相同的内容。例如:
Add-Type -TypeDefinition @"
public enum ContourBranch
{
Main,
Planned,
POP,
Statements
}
"@
然后将参数声明为该新类型,即
[CmdletBinding(SupportsShouldProcess=$True)]
param (
[Parameter(Mandatory=$true)]
[ContourBranch] $Branch
)
这为您提供了标签完成功能,如果您得到错误的值,错误消息还会列出有效的枚举值,这非常简洁。