相当于获取argumentcompleter的powershell

相当于获取argumentcompleter的powershell,powershell,powershell-5.0,Powershell,Powershell 5.0,Register ArgumentCompleter是一个非常有用的函数,但我怀疑某些模块过度使用它导致我的shell速度减慢。我想查看会话中注册的所有ArgumentCompleter的列表 我有一个如何编写一个的想法,但它太复杂了,我怀疑它是否会起作用,因此如果有人已经知道解决方案,我将非常感激。我认为从PowerShell 6中的Register ArgumentCompleter的定义来看,这是不可能的 脚本块映射到“command:parameter”键的实际字典似乎位于上下文中。Cu

Register ArgumentCompleter
是一个非常有用的函数,但我怀疑某些模块过度使用它导致我的shell速度减慢。我想查看会话中注册的所有ArgumentCompleter的列表


我有一个如何编写一个的想法,但它太复杂了,我怀疑它是否会起作用,因此如果有人已经知道解决方案,我将非常感激。

我认为从PowerShell 6中的
Register ArgumentCompleter
的定义来看,这是不可能的

脚本块映射到“command:parameter”键的实际字典似乎位于
上下文中。CustomArgumentCompleters
是从
InternalCommand
继承的
执行上下文(
internal
类)。 我没有看到从
System.Management.Automation
之外枚举ArgumentCompleter字典的任何接口


因此@BenH建议将其用作一种解决方法可能有助于诊断,因为它似乎将内置的
Register ArgumentCompleter
TabExpansion2
替换为一个可以检查的自定义模块(因此,如果您足够早地加载此模块,您可以查看可能注册了大量completer的模块)。但是,如果有什么东西正在直接调用System.Management.Automation.RegisterArgumentCompleter命令,您可能需要附加一个调试器。

查看该模块

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


$ExecutionContext.\u invokeCommand.\u context.CustomArgumentCompleters.Keys

Jason Shirk的可能与此相关。