特定命令的自定义PowerShell选项卡完成?

时间:2015-11-03 10:49:45

标签: powershell tab-completion

我想知道是否可以在PowerShell中创建自定义选项卡完成,这将在某个命令之后提供特定的参数列表?

从命令行启动Visual Studio时,可以键入devenv /rootsuffix HiveName以使Visual Studio启动新的" hive"使用该名称,在特殊位置的磁盘上创建名为HiveName的文件夹。

我希望能够输入PowerShell:devenv /rootsuffix [tab],并获取现有配置单元的列表(从目录/注册表中查找,并不重要),覆盖默认行为,是文件名完成。

这样做的可能吗?

1 个答案:

答案 0 :(得分:0)

这可以使用 Register-ArgumentCompleter 命令完成。

以下是使用该命令的代码示例(可以复制并粘贴到您的 PowerShell 窗口中):

# Function that will be registered with the command
function Cmd {
    Param(
        [string] $Param
    )

    Write-Host "Param: $param"
} 

# The code that will perform the auto-completion
$scriptBlock = {
    # The parameters passed into the script block by the
    #  Register-ArgumentCompleter command
    param(
        $commandName, $parameterName, $wordToComplete,
        $commandAst, $fakeBoundParameters
    )

    # The list of values that the typed text is compared to
    $values = 'abc','adf','ghi'

    foreach ($val in $values) {
        # What has been typed matches the value from the list
        if ($val -like "$wordToComplete*") {
            # Print the value
            $val
        }
    }
}

# Register our function and auto-completion code with the command
Register-ArgumentCompleter -CommandName Cmd `
 -ParameterName Param -ScriptBlock $scriptBlock

我们可以通过在 shell 中键入以下不完整的命令并在提示中按 TAB 键(其中键入 <PRESS TAB>)来检查此代码是否正常工作:

# Using autocomplete with the TAB key will produce the results: abc, adf
PS > Cmd -Param a<PRESS TAB>

# Using autocomplete with the TAB key will produce the results: abc
PS > Cmd -Param ab<PRESS TAB>