Вопрос

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

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

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

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

Это было полезно?

Решение

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

Я понял это, запрашивая PowerShell через прямой удаленный PowerShell, а не через пространство имен Exchange.

Вот пример

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

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

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

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

Другие советы

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

PS немного:

$results = $MyCustomCollection

Бит С#:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top