我想知道是否可以在PowerShell中创建自定义选项卡完成,这将在某个命令之后提供特定的参数列表?
从命令行启动Visual Studio时,可以键入devenv /rootsuffix HiveName
以使Visual Studio启动新的" hive"使用该名称,在特殊位置的磁盘上创建名为HiveName
的文件夹。
我希望能够输入PowerShell:devenv /rootsuffix [tab]
,并获取现有配置单元的列表(从目录/注册表中查找,并不重要),覆盖默认行为,是文件名完成。
这样做的可能吗?
答案 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>