我有一个大数据列表(超过 1000 个不同的值),我希望用户能够从 PowerShell 控制台的列表中选择某些值。
从控制台中允许用户快速选择值的最简单方法是什么?
我想做一些类似选项卡完成或使用箭头键滚动值的能力,但我不知道如何做这些事情。
任何建议将不胜感激。
我有一个大数据列表(超过 1000 个不同的值),我希望用户能够从 PowerShell 控制台的列表中选择某些值。
从控制台中允许用户快速选择值的最简单方法是什么?
我想做一些类似选项卡完成或使用箭头键滚动值的能力,但我不知道如何做这些事情。
任何建议将不胜感激。
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
来实现这一点。
您可以选择在http://powertab.codeplex.com/查看 PowerTab 模块
对于正在寻找一种方法并且有幸使用 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-complete 输入“-noun”来为其值提出建议。