powershell等同于get-argumentcompleter

时间:2017-11-21 16:31:23

标签: powershell powershell-v5.0

Register-ArgumentCompleter是一个非常有用的功能,但我怀疑某些模块过度使用它会导致我的shell减慢速度。我希望在我的会话中看到已注册的所有 ArgumentCompleters 的列表。

我知道如何写一个,但它过于复杂,我怀疑它会起作用,所以如果有人知道解决方案已经我会非常感激。

2 个答案:

答案 0 :(得分:0)

通过在PowerShell 6 code中查看Register-ArgumentCompleter的定义,我认为这是不可能的。

似乎带有ScriptBlocks映射到“ command:parameter”键的实际词典在Context.CustomArgumentCompletersExecutionContext类)的internal中。 我没有任何接口可以从InternalCommand的外部枚举ArgumentCompleter字典。

因此@BenH建议使用TabExpansionPlusPlus作为解决方法,这可能有助于诊断,因为它似乎已将内置System.Management.AutomationRegister-ArgumentCompleter替换为可以检查的自定义变量(因此,如果您尽早加载此模块,您可以查看可能正在注册大量完成程序的模块)。但是,如果直接调用TabExpansion2,则可能需要附加调试器。

答案 1 :(得分:0)

看看模块ImpliedReflection

然后您可以使用此行读取参数完成者。要在不使用ImpliedReflection模块的情况下进行访问,请使用标准的.net反射。

$ExecutionContext._invokeCommand._context.CustomArgumentCompleters.Keys