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', $_) } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-10-13 AM@闭区间上连续函数的性质定理@一致连续性
2022-10-13 批量删除某个类型的文件(windows端+linux端)(最佳实践)
2021-10-13 linux_用户管理/查看本机的用户/完整删除用户/创建新用户(交互命令adduser来创建新用户/用户切换su/sudo