显示如何在Windows PowerShell 3.0中覆盖TabExpansion2的示例

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.ps1在加载时做的工作量最小.当完成真正发生时,可能会执行一次极其昂贵的初始化.
  • 重写TabExpansion2通过*ArgumentCompleters.ps1路径中的一个或多个配置文件提供扩展机制.在第一次调用时调用一次配置文件TabExpansion2.几个配置文件可能带有不同的独立模块,工具等,并同时使用.
  • 除了标准自定义参数完成符和本机参数完成TabExpansion2符之外,此自定义还 支持结果处理器,它可以调整内置完成和输入处理器的结果,这些处理器可以拦截和替换内置完成.
  • 在某些情况下,它适用于只读空内置结果.
  • ArgumentCompleters.ps1 包含一个输入处理器的示例,它替换了类型和命名空间的内置完成,有时候更有用.
  • 另一个完成者提供意见完成:帮助标签(.SYNOPSIS, .说明等)和注释掉的代码完成,为什么不呢?