我有一个带有许多可选参数的.NET类,例如:
void Method(int one, int two, int three = 0, int four = 0, int five = 0);
是否可以通过PowerShell调用方法,将值传递给参数five
,而不列出参数three
和four
?
在C#中,我可以这样做:
instance.Method(1, 2, five: 5);
PowerShell是否有类似的语法?
答案 0 :(得分:3)
PowerShell没有用于命名的可选参数的本机语法,因此我们需要一些反射魔术才能使其正常工作。
基本上,您需要计算命名参数的相应参数索引,然后使用[type]::Missing
传递数组,以代替要忽略的可选参数MethodInfo.Invoke()
:
$method = $instance.GetType().GetMethod("Method") # assuming Method has no additional overloads
$params = @(1, 2, [type]::Missing, [type]::Missing, 5)
$method.Invoke($instance, $params)
答案 1 :(得分:-2)
是的,这是可能的。 Posweshell建立在.Net之上。您可以通过在Poweshell中调用构造函数来创建.Net类的对象。这是有关如何在Powershell中使用.Net的文章。
https://mcpmag.com/articles/2015/11/04/net-members-in-powershell.aspx
希望这会有所帮助