【问题标题】:Add auto complete features for switch in powershell为 powershell 中的 switch 添加自动完成功能
【发布时间】:2017-05-11 22:55:29
【问题描述】:

我正在尝试在 powershell 中添加自动完成功能。在这种情况下,我希望能够在我的控制台中输入“test”。之后,可以键入 Get-Se[TAB] 以使用 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

【问题讨论】:

  • Poweshell 已经有自动完成功能了?如果我输入 Get-Se[TAB] 它会循环我通过 Get-SecureBootPolicy, Get-SecureBootUEFI, Get-Service 请参阅 gcm Get-Se* 要让开关对不精确的参数做出反应,您可以查看 -wildcard 或 -regex 选项 get-help about_switch -show

标签: powershell


【解决方案1】:

一开始我很难理解你的意图,但我想我现在明白了。

您想在Read-Host 提示符内实现制表符补全(制表符扩展)。

很遗憾,没有办法做到这一点。

如果你分享为什么你想要这个,可能会有更好的方法来实现你的最终目标。


根据您的其他信息,我有不同的方法。

  1. 为每个查询创建实际函数,例如Get-Search 等。您甚至可以为它们添加别名,以便s 直接对应。
  2. 将所有这些函数包装在适当的模块中,以便您可以导入它们(请参阅下一步)。
  3. Create a constrained runspace 只允许用户执行您想要的特定功能和别名(使用模块更容易,但模块不是必需的)。

这样做可以让您的最终用户(甚至远程)访问 PowerShell 会话,该会话只能使用您创建并允许执行的功能。其他 cmdlet/函数甚至语言功能(如使用变量)将受到限制且不可用。

这样,您将获得真正的 PowerShell 选项卡扩展和语义,并最终获得一组真正的函数,这些函数也可以以自动化方式使用。

您不必编写任何提示或解析。

此外,会话可以得到保护,只允许特定用户和组连接到它。

【讨论】:

  • 我希望能够使用看起来像 cmdlet 的参数来获得 Powershell 的感觉。
  • @Badlarry 最终目标是什么?如果您使用的是Read-Host,那么我认为它是针对最终用户的?
  • 是的,这是正确的,我创建了一个脚本来自动化来自多个 API 的查询,用于许多不同的用户。我现在搜索的是“s”,我希望它是“Get-Search”,所以 Read-Host 等待输入,用户将输入“s 'value'”并返回格式化的 JSON。
  • @Badlarry 查看我的编辑;一开始需要做更多的工作,但我相信从长远来看,这将是一个更加通用的解决方案。
  • 谢谢,这正是我要找的。​​span>
猜你喜欢
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2020-12-12
  • 2011-09-27
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
相关资源
最近更新 更多