Используйте Get-Member для отражения - PullRequest
4 голосов
/ 31 марта 2012

Я бы в основном хотел использовать отражение в Powershell, и после динамического поиска методов, которые я хотел бы вызвать с помощью стандартных команд powershell, я в итоге получил объект MemberDefinition и не очень понимал, как его вызывать. Я не уверен, что могу, поэтому, если у вас есть опыт, вы можете просто сказать, что не делайте так. Я знаю, что могу попасть в пространство имен Assembly, но не знал, смогу ли я сделать что-то вроде этого:

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

Переменная $method имеет тип Microsoft.PowerShell.Commands.MemberDefinition , это вообще возможно?

Спасибо, Мэтью

Ответы [ 2 ]

6 голосов
/ 31 марта 2012

Звучит так, будто вы довольно хорошо знакомы с .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
5 голосов
/ 31 марта 2012

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)
...