Register-ArgumentCompleter
是一个非常有用的功能,但我怀疑某些模块过度使用它会导致我的shell减慢速度。我希望在我的会话中看到已注册的所有 ArgumentCompleters 的列表。
我知道如何写一个,但它过于复杂,我怀疑它会起作用,所以如果有人知道解决方案已经我会非常感激。
答案 0 :(得分:0)
通过在PowerShell 6 code中查看Register-ArgumentCompleter
的定义,我认为这是不可能的。
似乎带有ScriptBlocks映射到“ command:parameter”键的实际词典在Context.CustomArgumentCompleters
(ExecutionContext
类)的internal
中。
我没有任何接口可以从InternalCommand
的外部枚举ArgumentCompleter字典。
因此@BenH建议使用TabExpansionPlusPlus作为解决方法,这可能有助于诊断,因为它似乎已将内置System.Management.Automation
和Register-ArgumentCompleter
替换为可以检查的自定义变量(因此,如果您尽早加载此模块,您可以查看可能正在注册大量完成程序的模块)。但是,如果直接调用TabExpansion2
,则可能需要附加调试器。
答案 1 :(得分:0)
然后您可以使用此行读取参数完成者。要在不使用ImpliedReflection模块的情况下进行访问,请使用标准的.net反射。
$ExecutionContext._invokeCommand._context.CustomArgumentCompleters.Keys