Register-ArgumentCompleter
注册自定义参数完成程序。
语法
NativeSet
Register-ArgumentCompleter
-CommandName <String[]>
-ScriptBlock <ScriptBlock>
[-Native]
[<CommonParameters>]
PowerShellSet
Register-ArgumentCompleter
-ParameterName <String>
-ScriptBlock <ScriptBlock>
[-CommandName <String[]>]
[<CommonParameters>]
说明
Register-ArgumentCompleter cmdlet 注册自定义参数完成程序。 通过参数完成器,可以在运行时为指定的任何命令提供动态选项卡完成。
示例
示例 1:注册自定义参数完成程序
以下示例为 cmdlet 的 Set-TimeZone 参数注册参数完成程序。
$scriptBlock = {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
(Get-TimeZone -ListAvailable).Id | Where-Object {
$_ -like "$wordToComplete*"
} | ForEach-Object {
"'$_'"
}
}
Register-ArgumentCompleter -CommandName Set-TimeZone -ParameterName Id -ScriptBlock $scriptBlock
第一个命令创建一个脚本块,该脚本块采用用户按 Tab 键时传入的所需参数。有关详细信息,请参阅 ScriptBlock 参数说明。
在脚本块中,使用 cmdlet 检索 Get-TimeZone 的可用值。 每个时区的 Id 属性通过管道传递给 Where-Object cmdlet。
Where-Object该 cmdlet 筛选出任何不以 提供的$wordToComplete值开头的 ID,该值表示用户在按 Tab 键之前键入的文本。如果值包含空格,则筛选的 ID 将通过管道传输到 cmdlet,ForEach-Object该 cmdlet 将每个值括在引号中。
第二个命令通过传递 scriptblock、ParameterNameId 和 CommandNameSet-TimeZone来注册参数完成程序。
示例 2:向选项卡完成值添加详细信息
以下示例覆盖 cmdlet 的 Stop-Service 参数的选项卡完成,并且仅返回正在运行的服务。
$s = {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
$services = Get-Service | Where-Object {$_.Status -eq "Running" -and $_.Name -like "$wordToComplete*"}
$services | ForEach-Object {
New-Object -Type System.Management.Automation.CompletionResult -ArgumentList $_.Name,
$_.Name,
"ParameterValue",
$_.Name
}
}
Register-ArgumentCompleter -CommandName Stop-Service -ParameterName Name -ScriptBlock $s
第一个命令创建一个脚本块,该脚本块采用用户按 Tab 键时传入的所需参数。有关详细信息,请参阅 ScriptBlock 参数说明。
在脚本块中,第一个命令使用 Where-Object cmdlet 检索所有正在运行的服务。 服务通过管道传递给 ForEach-Object cmdlet。
ForEach-Object cmdlet 创建新的 System.Management.Automation.CompletionResult 对象,并使用当前服务的名称填充它(由管道变量 $_.Name表示)。
CompletionResult 对象允许向每个返回的值提供其他详细信息:
- completionText (字符串) - 要用作自动完成结果的文本。 这是发送到命令的值。
- listItemText (String) - 列表中要显示的文本,例如当用户按下 Ctrl +空格时。 这仅用于显示,未在选中时传递给命令。
- resultType (CompletionResultType) - 完成结果的类型。
- 工具提示 (字符串) - 要显示有关对象的详细信息的工具提示的文本。 当用户 在按 Ctrl+空格后选择项目时,这可见。
最后一个命令演示停止的服务仍可手动传递到 Stop-Service cmdlet。 选项卡完成是受影响的唯一方面。
示例 3:注册自定义本机参数完成程序
可以使用 Native 参数为本机命令提供 Tab 补全。 以下示例为 dotnet 命令行接口 (CLI) 添加制表符补全。
注释
dotnet complete 命令仅在 2.0 版及更高版本的 dotnet cli 中可用。
$scriptblock = {
param($wordToComplete, $commandAst, $cursorPosition)
dotnet complete --position $cursorPosition $commandAst.ToString() | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock $scriptblock
第一个命令创建一个脚本块,该脚本块采用用户按 Tab 键时传入的所需参数。有关详细信息,请参阅 ScriptBlock 参数说明。
在脚本块中,dotnet complete 命令用于执行选项卡完成。
结果通过管道传输到 cmdlet,ForEach-Object该 cmdlet 使用 System.Management.Automation.CompletionResult 类的新静态方法为每个值创建新的 CompletionResult 对象。
参数
-CommandName
将命令的名称指定为数组。
参数属性
| 类型: | String[] |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
NativeSet
| Position: | Named |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
PowerShellSet
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Native
指示参数完成程序适用于 PowerShell 无法完成参数名称的本机命令。
参数属性
| 类型: | SwitchParameter |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
NativeSet
| Position: | Named |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ParameterName
指定其参数正在完成的参数的名称。 指定的参数名称不能是枚举值,例如 cmdlet 的 Write-Host 参数。
有关枚举的详细信息,请参阅 about_Enum。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
PowerShellSet
| Position: | Named |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-ScriptBlock
指定要运行的命令以执行选项卡完成。 提供的脚本块应返回完成输入的值。 脚本块必须使用管道(ForEach-Object、Where-Object等)或其他合适的方法取消注册值。 返回值数组会导致 PowerShell 将整个数组视为 一个 选项卡完成值。
脚本块必须接受以下参数,其顺序如下。 参数的名称并不重要,因为 PowerShell 按位置传入值。
-
$commandName(位置 0) - 此参数设置为脚本块提供选项卡完成的命令的名称。 -
$parameterName(位置 1) - 此参数设置为其值需要选项卡完成的参数。 -
$wordToComplete(位置 2) - 此参数设置为用户在按下 Tab tab之前提供的值。脚本块应使用此值来确定选项卡完成值。 -
$commandAst(位置 3) - 此参数设置为当前输入行的抽象语法树(AST)。 有关详细信息,请参阅 Ast 类。 -
$fakeBoundParameters(位置 4) - 此参数设置为包含 cmdlet$PSBoundParameters的哈希表,然后用户按下 Tab Tab。有关详细信息,请参阅 about_Automatic_Variables。
指定 Native 参数时,脚本块必须按指定顺序采用以下参数。 参数的名称并不重要,因为 PowerShell 按位置传入值。
-
$wordToComplete(位置 0) - 此参数设置为用户在按下 Tab 键之前提供的值。脚本块应使用此值来确定制表符补全值。 -
$commandAst(位置 1) - 此参数设置为当前输入行的抽象语法树 (AST)。 有关详细信息,请参阅 Ast 类。 -
$cursorPosition(位置 2) - 此参数设置为用户按 Tab 键时光标的位置。
还可以提供 ArgumentCompleter 作为参数属性。 有关详细信息,请参阅 about_Functions_Advanced_Parameters。
参数属性
| 类型: | ScriptBlock |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | Named |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。
输入
None
不能用管道将对象传送到此 cmdlet。
输出
None
此 cmdlet 不返回任何输出。