Mic*_*ley 14 powershell tabexpansion windows-8 powershell-3.0
有没有人有一个示例显示如何在Windows PowerShell 3.0中覆盖TabExpansion2函数?我知道如何覆盖旧的TabExpansion函数,但我想在PowerShell ISE中提供intellisense的项目列表.我查看了TabExpansion2的定义,如何在tab扩展过程中注入自己的代码并不容易理解.
Cha*_*lie 13
我认为这个例子应该给你一个很好的起点:Windows Powershell Cookbook:TabExpansion2的示例实现.示例代码显示您可以在默认调用之前和之后添加代码[CommandCompletion]::CompleteInput.
例如,您可以向$options名为CustomArgumentCompleters 的哈希表添加一个条目,以获取命令参数的自定义完成.该条目应该是哈希表,其中键是参数名称(例如"ComputerName"或"Get-ChildItem:Filter"),值是可用于完成该参数的值数组.Powertheshell.com也有一篇关于此的文章:Dynamic Argument Completion.您还可以使用NativeArgumentCompleters选项为本机可执行文件指定自定义完成(同样,键是命令名称和值是可能的完成的数组).
一旦CompleteInput返回,你可以把结果保存在$result作进一步的分析.结果是CommandCompletion类的一个实例.如果默认完成没有找到任何匹配项,您可以将自己的CompletionResult条目添加到匹配列表中:
$result.CompletionMatches.Add(
(New-Object Management.Automation.CompletionResult "my completion string") )
Run Code Online (Sandbox Code Playgroud)
不要忘记$result从函数返回,以便实际完成.
最后,关于故障排除的说明:调用的代码TabCompletion2似乎压制了所有基于控制台的输出(不足为奇),因此如果您想为自己编写调试消息,可以尝试将它们写入单独的文本文件.例如,您可以将End函数更改为TabCopmletion2如下所示:
$result = [System.Management.Automation.CommandCompletion]::CompleteInput(
$inputScript, $cursorColumn, $options)
$result | Get-Member | Add-Content "c:\TabCompletionLog.txt"
$result
Run Code Online (Sandbox Code Playgroud)
Rom*_*min 11
以下是重写的示例TabExpansion2-
TabExpansion2.ps1
以及在实践配置文件中使用的几个完整的配置文件:
兴趣点:
TabExpansion2通过*ArgumentCompleters.ps1路径中的一个或多个配置文件提供扩展机制.在第一次调用时调用一次配置文件TabExpansion2.几个配置文件可能带有不同的独立模块,工具等,并同时使用.TabExpansion2符之外,此自定义还 支持结果处理器,它可以调整内置完成和输入处理器的结果,这些处理器可以拦截和替换内置完成.| 归档时间: |
|
| 查看次数: |
2324 次 |
| 最近记录: |