在PowerShell中按名称调用带有可选参数的.NET方法

时间:2018-10-11 14:04:59

标签: .net powershell

我有一个带有许多可选参数的.NET类,例如:

void Method(int one, int two, int three = 0, int four = 0, int five = 0);

是否可以通过PowerShell调用方法,将值传递给参数five,而不列出参数threefour

在C#中,我可以这样做:

instance.Method(1, 2, five: 5);

PowerShell是否有类似的语法?

2 个答案:

答案 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

希望这会有所帮助