我有一个庞大的数据列表(超过1000个不同的值),我希望用户能够从PowerShell控制台的列表中选择某些值。
在控制台中允许用户快速选择值的最简单方法是什么?
我想做标签完成或使用箭头键滚动值的功能,但我不知道如何做这些事情。
非常感谢任何建议。
答案 0 :(得分:7)
PowerShell选项卡完成可以扩展到自定义参数和参数值(在v3中)。但是,这是高级功能的属性。您可以使用ValidateSetAttribute
来执行此操作。
查看有关高级功能的Technet帮助主题:http://technet.microsoft.com/en-us/library/hh847806.aspx
您可以在PowerShell中替换tabexpansion(v2)和tabexpansion2(v3)函数,以自动完成高级函数之外的参数值。您可以通过运行
在PowerShell v3中获得此基本定义 Get-Content function:TabExpansion2
以下是显示自定义标签扩展功能的示例。
http://www.powershellmagazine.com/2012/11/29/using-custom-argument-completers-in-powershell-3-0/
但是,如果您希望用户能够自动完成Read-Host
种输入的值,则需要为Read-Host
编写代理才能实现此目的。
答案 1 :(得分:1)
对于那些正在寻找方法并且有幸使用PS v3的人(以及对所有需要继续使用V2的人道歉):
实现此目的的最简单方法是在输入参数中使用“ValidateSet”选项。
function Show-Hello {
param (
[ValidateSet("World", "Galaxy", "Universe")]
[String]$noun
)
$greetingString = "Hello, " + $noun + "!"
Write-Host "`t=>`t" $greetingString "`t<="
}
如果用户尝试使用任何其他输入,则ValidateSet会引发错误:
Show-Hello "Solar System"
Show-Hello : Cannot validate argument on parameter 'noun'. The argument `
"Solar System" does not belong to the set "World,Galaxy,Universe" specified `
by the ValidateSet attribute. Supply an argument that is in the set and `
then try the command again.
它还为您的函数添加了tab-completion以用于该参数。如果它是您的函数的FIRST参数,您甚至不必为tab-complete键入“-noun”来为其值提供建议。