PowerShell 2.0 через C #, возвращаемые значения пусты? - PullRequest
2 голосов
/ 13 января 2010

Я использую C # для вызова методов Exchange 2010 PowerShell, и я только что столкнулся с ошибкой.

Коллекция, возвращаемая методом Execute, не имеет BaseObject. Я могу использовать .Properties ["PropertyName"], но кажется, что все эти значения являются строковыми значениями. Не очень удобно для размера файла, направляющих и т. Д.

Чтение http://blogs.msdn.com/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions.aspx, кажется, что это нормально, и у меня есть типы, десериализованные.

Я ищу способ сериализации их обратно в живой объект, чтобы я мог использовать свойства и так далее. У меня есть соответствующая DLL и все.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2010

Кажется, я могу получить любое свойство, которое захочу, но оно должно быть в сценарии PS, который я вызываю удаленно.

Я понял это при запросе PowerShell через прямой Remote powershell, а не с пространством имен Exchange.

Вот пример

$spsite | Select Id, Url,
          @{ Name = "Owner"; Expression = { $_.Owner.UserLogin } }

Это отлично работает, я могу использовать

psResult.Members["Owner"].Value as string

чтобы получить владельца

0 голосов
/ 24 сентября 2010

Вы можете получить оригинальный объект следующим образом:

PS бит:

$results = $MyCustomCollection

C # бит:

System.Collections.ObjectModel.Collection<PSObject>
results = pipeline.Invoke();

CustomCollection theCustumCollection
    = (CustomCollection )runspace.SessionStateProxy.GetVariable("results");

вы должны убедиться, что единственное, что возвращено, это тот объект и ничего больше; так что положите все, что вернет ноль;

...