3

我正在 C# 中通过继承来编写 Powershell cmdlet PSCmdlet。这是包含二进制和脚本组件的 powershell 模块的一部分。

我希望能够从我的二进制 cmdlet 中调用脚本模块 cmdlet。

我发现继承 fromPSCmdlet让我可以访问更多 Powershell 的内容,我专门研究了这些内容InvokeCommand.GetCmdlet()InvokeCommand.GetCommand()但它们似乎都返回了 CommandInfo 对象,而这些对象似乎没有调用它们的方法。

我应该打电话InvokeCommand.InvokeScript()来调用我的 cmdlet 吗?如果是这样,CommandInfo应该如何/应该使用对象来提供帮助?

4

1 回答 1

0

可能InvokeScript是您想要的,因为您想执行脚本。现在,您可能会遇到问题,因为您会更喜欢使用它

InvokeCommand.InvokeScript("Get-MyCmdlet -ParameterName value");

话虽如此,您问题的真正答案是您需要一个PowerShell代表解释器的对象。

var ps = PowerShell.Create();
ps.AddCommand(InvokeCommand.GetCmdlet("Get-MyCmdlet"));
ps.AddParameter("ParameterName", "value");

var output = ps.Invoke();

解释器使用CommandInfo(并且AddCommand有一个string在引擎盖下会创建一个的重载)它的反射工作来解释你想要的任何东西。

于 2022-01-06T02:08:28.880 回答