自动完成用户输入PowerShell 2.0

时间:2013-06-14 18:06:27

标签: powershell autocomplete tabs powershell-v2.0 user-input

我有一个庞大的数据列表(超过1000个不同的值),我希望用户能够从PowerShell控制台的列表中选择某些值。

在控制台中允许用户快速选择值的最简单方法是什么?

我想做标签完成或使用箭头键滚动值的功能,但我不知道如何做这些事情。

非常感谢任何建议。

2 个答案:

答案 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编写代理才能实现此目的。

您可以选择在http://powertab.codeplex.com/

查看PowerTab模块

答案 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”来为其值提供建议。