使用Get-Member进行反射

时间:2012-03-31 02:06:06

标签: .net reflection powershell watin

我基本上喜欢在Powershell中使用反射,并且在动态查找我想使用标准powershell命令调用的方法之后,我最终得到了一个MemberDefinition对象,并且没有太多关于如何调用它的线索。我不能肯定,所以如果你有经验,你可以说不要这样做。我知道我可以进入Assembly命名空间,但不知道我是否可以这样做:

$method = $ie | get-member -type method | ? { $_.name -eq 'span' }
invoke-member $ie $method

$method变量的类型为Microsoft.PowerShell.Commands.MemberDefinition,这是否可能?

谢谢,马修

2 个答案:

答案 0 :(得分:6)

听起来你对.NET非常熟悉,为什么不直接下载并直接使用反射?

PS> $d = Get-Date
PS> $t = $d.GetType()
PS> $t.InvokeMember("ToUniversalTime", "Public,InvokeMethod,Instance", $null, $d, $null)

Saturday, March 31, 2012 3:10:51 AM

答案 1 :(得分:5)

FWIW,你总是可以做'老式'反思(如果不清楚的话,请提及)。

例如:

# get some object
$proc = get-process | select -first 1

# get its type and pick a method
$method = $proc.gettype().getmethods() | ?{ $_.name -eq 'tostring' }

# invoke
$method.Invoke($proc, $null)