我怎样才能让Powershell TabExpansion打印所有可能的完成?

Powershell中的默认TabExpansion将循环执行命令提示符处片段的可能完成项。 在PowerShell主机的内部,有一个循环缓冲区,第一个TAB填充缓冲区,并将第一个潜在的完成提交给提示。 随后的TAB循环遍历可能的完成列表。

我怎样才能修改TabExpansion只显示一套可能的完成当我打?

另外,我可以从命令提示符显式调用TabExpansion函数,如果是这样,如何?

(如果您不知道“修改TabExpansion”的含义,请参阅此链接 。)

检查PowerTab 。 它太酷了。

UPDATE

在CodePlex上下载PowerTab。

可以直接在提示符处修改它 – 或者在您的配置文件脚本中 – 这只是一个函数,所以您可以在提示符下输入以更改它以打印所有答案:

Copy Function:\TabExpansion Function:\OriginalTabExpansion function TabExpansion([string] $line, [string] $lastword) { OriginalTabExpansion $line $lastword | Out-Host $line } 

或者你可以走得更远,并将其格式化:

 Copy Function:\TabExpansion Function:\OriginalTabExpansion function TabExpansion([string] $line, [string] $lastword) { Write-Host # an emtpy newline to avoid outputting on the prompt line # A hack, because Format-Wide doesn't work on strings $obj = new-object psobject | add-member noteproperty value "" -Passthru OriginalTabExpansion $line $lastword | ForEach { $obj.value = $_; $obj } | Format-Wide -auto value | Out-Host ## Maybe even re-output your prompt function... depending on how it's written Write-Host $(prompt) -NoNewLine return $line # keep the command as it was } 

PS: 为格式范围的错误投票

这一行似乎解决了与格式和字符串数组的问题:

$ ComputerList | Select-Object -Property @ {Expression = {[Object []] $ _}; Name =“Name”} | 格式范围 – 属性名称 – 列5

在这种情况下,字符串数组是这样定义的$ ComputerList:

[数组] $ ComputerList = @(“WINSRV2003-32B”,“WINSRV2003-64B”)