Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
演示如何在Windows PowerShell 3.0中重写TabExpansion2的示例_Powershell_Windows 8_Powershell 3.0_Tabexpansion - Fatal编程技术网

演示如何在Windows PowerShell 3.0中重写TabExpansion2的示例

演示如何在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之前和之后添加代码

有人举过一个例子来说明如何在Windows PowerShell 3.0中重写TabExpansion2函数吗?我知道如何覆盖旧的TabExpansion函数,但我想为PowerShell ISE中的intellisense提供一个项目列表。我查看了TabExpansion2的定义,不容易理解我是如何在tab扩展过程中注入自己的代码的。

我认为这个示例应该为您提供一个很好的起点:。示例代码显示,您可以在默认调用
[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
    TabExpansion2
    通过一个或多个 路径中的profiles
    *ArgumentCompleters.ps1
    。配置文件只调用一次 在第一次调用
    TabExpansion2
    时。可能会附带多个配置文件 不同的独立模块、工具等,同时使用
  • 除了标准的自定义参数完成符和 本机参数完成此自定义
    TabExpansion2
    支持的 结果处理器,用于调整内置完成的结果 以及可以截取和替换内置完成的输入处理器
  • 在某些情况下,它可以处理只读的空内置结果
  • 包含替换内置的输入处理器的示例 使用更有用的替代方法完成类型和名称空间 有时候
  • 另一个完成符在注释中提供完成:帮助标记(.Synopsis, 。说明等)并完成注释掉的代码,为什么不

是否有正式的文件记录?这些信息最初是如何传播出去的?遗憾的是,我还没有看到任何正式的文档,但我很想看看它是否存在。