Powershell@函数自动补全@Register-ArgumentCompleter@查看自定义函数或第三方模块中函数的源代码

abstract

  • Powershell@函数自动补全@Register-ArgumentCompleter
  • 查看自定义函数或第三方模块中函数的源代码

Register-ArgumentCompleter

  • Register-ArgumentCompleter (Microsoft.PowerShell.Core) - PowerShell | Microsoft Learn

  • Register-ArgumentCompleter 是 PowerShell 中的一个内建命令,用于向 PowerShell 命令或函数参数注册自定义的补全脚本块,以便在用户交互式输入时提供智能提示和自动补全功能。

  • 这个命令使得 PowerShell 能够根据上下文给出相关选项的建议,从而提高工作效率并减少手动输入错误。

    以下是 Register-ArgumentCompleter 的基本语法:

    Register-ArgumentCompleter `
        -CommandName <String[]> `
        -ParameterName <String> `
        -ScriptBlock <ScriptBlock> `
        [-Native] `
        [-Description <String>] `
        [-Option <CompletionResultType>]
    
  • 各个参数解释如下:

    • -CommandName:指定要为其注册补全器的命令名或命令集。可以是一个字符串(单个命令)或字符串数组(多个命令)。

    • -ParameterName:指出要在哪个命令参数上启用补全功能。此参数接受一个字符串值,对应于目标命令中需要补全功能的参数名。

    • -ScriptBlock:这是一个包含实现补全逻辑的 PowerShell 脚本块。当用户按下 <TAB> 键触发补全时,PowerShell 将执行此脚本块,并期望返回一个字符串数组,这些字符串将成为补全选项。

      该脚本块通常接收以下参数:

      • $commandName
      • $parameterName
      • $wordToComplete:当前已输入但未完成的部分。
      • $commandAst:抽象语法树 (AST),用于解析命令行。
      • $fakeBoundParameters:一个哈希表,包含已绑定到命令的参数及其值。
    • -Native(可选):如果设置,则指示补全器用于原生命令而非 PowerShell 函数或别名。

    • -Description(可选):为补全器提供一个描述性字符串。

    • -Option(可选):允许指定 CompletionResultType 枚举成员,用来控制补全结果的样式,如是否加粗、是否带下划线等。

    在实践中,您通过构造一个恰当的 ScriptBlock,根据用户已输入的内容检索匹配项,然后将其作为补全建议返回。这样,当用户在命令行中尝试输入某个参数的值时,只需按下 <TAB> 键就能看到相应的候选选项。

补全命令名字

  • 为了创建一个在 PowerShell 中的自动补全功能,你可以使用动态参数和参数补全(TabExpansion)。这些特性可以帮助你在输入命令参数时提供自动补全的功能。
  • 下面是一个如何创建一个 Show-Command 函数,它使用了 Register-ArgumentCompleter 来注册一个自定义的参数补全器,使你能够在输入 -Name 参数时自动补全以指定字符串开头的命令

查看Powershell当前环境下某个自定义函数的源代码

function Get-CommandSourceCode
{
    <# 
    .SYNOPSIS
    查看Powershell当前环境下某个命令(通常是自定义的函数)的源代码
    .DESCRIPTION
    为例能够更方便地查看,在函数外面配置了本函数的Register-ArgumentCompleter 自动补全注册语句
    这样在输入命令名后按Tab键,就能自动补全命令名,然后按Tab键再次,就能查看命令的源代码
    
    .EXAMPLE
    PS>Get-CommandSourceCode -Name prompt

        if ($Env:CONDA_PROMPT_MODIFIER) {
            $Env:CONDA_PROMPT_MODIFIER | Write-Host -NoNewline
        }
        CondaPromptBackup;

    #>
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$Name
    )

    Get-Command $Name | Select-Object -ExpandProperty ScriptBlock

}

# 注册参数补全,使其用于 Get-CommandSourceCode 的 Name 参数
Register-ArgumentCompleter -CommandName Get-CommandSourceCode -ParameterName Name -ScriptBlock {
    param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
    
    # 搜索所有可能的命令以便于补全
    $commands = Get-Command -Name "$wordToComplete*" | ForEach-Object { $_.Name }
    
    # 返回补全结果
    $commands | ForEach-Object {
        [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
    }
}

相关推荐

  1. 定义函数使用

    2024-04-14 00:32:02       16 阅读
  2. register_chrdev函数使用

    2024-04-14 00:32:02       39 阅读
  3. solr functionquery函数查询定义函数实现

    2024-04-14 00:32:02       23 阅读
  4. hive定义函数

    2024-04-14 00:32:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 00:32:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 00:32:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 00:32:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 00:32:02       20 阅读

热门阅读

  1. 新苗同学 — 大学新生的智能伴侣

    2024-04-14 00:32:02       21 阅读
  2. ubuntu sudo时候LD_LIBRARY_PATH设置问题

    2024-04-14 00:32:02       12 阅读
  3. cmath库常用函数

    2024-04-14 00:32:02       16 阅读
  4. C++-SET

    2024-04-14 00:32:02       16 阅读
  5. ChatGPT进阶指南:用AI智能工具提升论文写作水平

    2024-04-14 00:32:02       12 阅读
  6. ChatGPT 写作新体验:借助ChatGPT让论文写作更高效

    2024-04-14 00:32:02       16 阅读
  7. vue3+vant自动导入+pina+vite+js+pnpm搭建项目框架

    2024-04-14 00:32:02       14 阅读
  8. elasticSearch mapping设计

    2024-04-14 00:32:02       14 阅读
  9. cexprtk:Python中的数学表达式解析和计算

    2024-04-14 00:32:02       13 阅读
  10. win11开启copilot

    2024-04-14 00:32:02       14 阅读
  11. 基于STM32的智能家居控制系统设计方案

    2024-04-14 00:32:02       14 阅读
  12. clipper一些数据结构(入门初识(一))

    2024-04-14 00:32:02       14 阅读