我正在尝试在PowerShell中添加自动完成功能。在这种情况下,我希望能够在我的控制台中键入“test”。之后,能够使用TAB扩展键入Get-Se [TAB]以自动完成Get-Search。
PS > Get-Se[TAB]
PS > Get-Search
function test
{
[CmdletBinding()]
param()
# label the while loop "outer"
:outer while($true){
$x = Read-Host
# split $x into two parts
$first,$second = $x -split '\s',2
# switch evaluating the first part
switch($first){
Get-Search {
# Searching
}
default {
Write-Host "False"
}
}
}
}
其他信息:
目标: 我希望能够使用看起来像cmdlet的参数来感受Powershell。
关于原始剧本:
我创建了一个脚本来自动化来自多个API的查询,适用于许多不同的用户。我现在用于搜索的是“s”,我希望它是“Get-Search”所以Read-Host等待输入,用户输入“Get-Search'value'”并且格式化的JSON返回
PS > Get-Search foobar
#Returns JSON
答案 0 :(得分:2)
起初我很难理解你的意图,但我想我现在就明白了。
您希望在Read-Host
提示符内实现标签页完成(标签扩展)。
不幸的是,没有办法做到这一点。
如果你想要分享为什么,可能有更好的方法来实现你的最终目标。
根据您的其他信息,我有不同的方法。
Get-Search
等。您甚至可以为它们添加别名,以便s
可以直接对应。这可以让您的最终用户访问(甚至远程)PowerShell会话,该会话只能使用您已创建并允许执行的功能。其他cmdlet /函数甚至语言功能(如使用变量)都将受到限制且不可用。
通过这种方式,您可以获得真正的PowerShell选项卡扩展和语义,并最终获得一组以自动方式使用的真实函数。
您不必编写任何提示或解析。
此外,会话可以受到保护,只允许特定用户和组连接到它。