为了添加其他有用的答案,我为我为工作制作的脚本使用了类似的东西:
$vf = @('Veg', 'Fruit','Apple','orange')
$ScriptBlock = {
Foreach($v in $vf){
New-Object -Type System.Management.Automation.CompletionResult -ArgumentList $v,
$v,
"ParameterValue",
"This is the description for $v"
}
}
Register-ArgumentCompleter -CommandName Test-ArgumentCompleter -ParameterName Arg -ScriptBlock $ScriptBlock
function Test-ArgumentCompleter {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[String]$Arg )
}
Register-ArgumentCompleter的文档在 Microsoft Docs 上有很好的解释。我个人不喜欢使用该enum
语句,因为它不允许我在 Intellisense 中使用空格;Validate
参数与添加描述的好功能相同。
输出:
编辑:
@Mklement 很好地验证了提供给参数的参数。仅此一项就不允许您在不使用更多的 powershell 逻辑为您进行验证的情况下这样做(不幸的是,它将在函数的主体中完成)。
function Test-ArgumentCompleter {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$Arg )
if($PSBoundParameters.ContainsKey('Arg')){
if($VF -contains $PSBoundParameters.Values){ "It work:)" }
else { "It no work:("}
}
}