演示如何在Windows PowerShell 3.0中重写TabExpansion2的示例
有人举过一个例子来说明如何在Windows PowerShell 3.0中重写TabExpansion2函数吗?我知道如何覆盖旧的TabExpansion函数,但我想为PowerShell ISE中的intellisense提供一个项目列表。我查看了TabExpansion2的定义,不容易理解我是如何在tab扩展过程中注入自己的代码的。我认为这个示例应该为您提供一个很好的起点:。示例代码显示,您可以在默认调用演示如何在Windows PowerShell 3.0中重写TabExpansion2的示例,powershell,windows-8,powershell-3.0,tabexpansion,Powershell,Windows 8,Powershell 3.0,Tabexpansion,有人举过一个例子来说明如何在Windows PowerShell 3.0中重写TabExpansion2函数吗?我知道如何覆盖旧的TabExpansion函数,但我想为PowerShell ISE中的intellisense提供一个项目列表。我查看了TabExpansion2的定义,不容易理解我是如何在tab扩展过程中注入自己的代码的。我认为这个示例应该为您提供一个很好的起点:。示例代码显示,您可以在默认调用[CommandCompletion]::CompleteInput之前和之后添加代码
[CommandCompletion]::CompleteInput
之前和之后添加代码
例如,您可以向名为CustomArgumentCompleters的$options
哈希表中添加一个条目,以获得命令参数的自定义完成。条目应该是一个哈希表,其中键是参数名(例如“ComputerName”或“Get ChildItem:Filter”),值是可用于完成该参数的值数组。Powertheshell.com也有一篇关于此的文章:。您还可以使用NativeArgumentCompleters选项为本机可执行文件指定自定义完成(同样,键是命令名,值是可能完成的数组)
返回CompleteInput
后,您可以将结果存储在$result
中以供进一步分析。结果是类的一个实例。如果默认完成未找到任何匹配项,您可以将自己的条目添加到匹配项列表中:
$result.CompletionMatches.Add(
(New-Object Management.Automation.CompletionResult "my completion string") )
不要忘记从函数中返回$result
,以便实际完成
最后,关于疑难解答的注意事项:调用TabCompletion2
的代码似乎会抑制所有基于控制台的输出(这并不奇怪),因此如果您想自己编写调试消息,可以尝试将它们写入单独的文本文件。例如,您可以将选项卡COPMLETION2
中的End
函数更改为如下所示:
$result = [System.Management.Automation.CommandCompletion]::CompleteInput(
$inputScript, $cursorColumn, $options)
$result | Get-Member | Add-Content "c:\TabCompletionLog.txt"
$result
下面是重写的
TabExpansion2
-
在实践中使用了几个配置文件,其中包含补全符:
- 的参数完成符
- 的参数完成符
- 参数、输入和结果完成符
- TabExpansion2.ps1在加载时做的工作最少。潜在的昂贵 当真正完成时,初始化只执行一次
- Overrided
通过一个或多个 路径中的profilesTabExpansion2
。配置文件只调用一次 在第一次调用*ArgumentCompleters.ps1
时。可能会附带多个配置文件 不同的独立模块、工具等,同时使用TabExpansion2
- 除了标准的自定义参数完成符和
本机参数完成此自定义
支持的 结果处理器,用于调整内置完成的结果 以及可以截取和替换内置完成的输入处理器TabExpansion2
- 在某些情况下,它可以处理只读的空内置结果
- 包含替换内置的输入处理器的示例 使用更有用的替代方法完成类型和名称空间 有时候
- 另一个完成符在注释中提供完成:帮助标记(.Synopsis, 。说明等)并完成注释掉的代码,为什么不