8

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

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

我想做一些类似选项卡完成或使用箭头键滚动值的能力,但我不知道如何做这些事情。

任何建议将不胜感激。

4

2 回答 2

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 模块

于 2013-06-15T04:22:35.600 回答
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-complete 输入“-noun”来为其值提出建议。

于 2013-11-18T20:09:49.847 回答