Powershell中的默认TabExpansion在命令提示符下循环完成片段的可能完成。在PowerShell主机内部,有一个循环缓冲区,第一个TAB填充缓冲区并在提示符下放置第一个可能的完成。随后的TAB循环可能的完成列表。
如何修改TabExpansion以便在我点击时显示可能的完成集?
另外,我可以从命令提示符中显式调用TabExpansion函数吗?如果是,如何调用?
(如果您不知道“修改TabExpansion”的含义,请参阅this link。)
答案 0 :(得分:5)
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以直接在提示符下修改它 - 或者在您的个人资料脚本中 - 它只是一个函数,因此您可以在提示符处输入以更改它以打印所有答案:
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:格式范围内的Vote for the bug
答案 3 :(得分:0)
这个单线程似乎解决了格式范围和字符串数组的问题:
$ ComputerList | Select-Object -Property @ {Expression = {[Object []] $ _}; Name =“Name”} | Format-Wide -Property Name -Column 5
在这种情况下,字符串数组是$ ComputerList,定义如下:
[array] $ ComputerList = @(“WINSRV2003-32B”,“WINSRV2003-64B”)