PowerShell 2.0 через C#, возвращаемые значения пусты?
-
20-09-2019 - |
Вопрос
Я использую 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");
вам нужно убедиться, что возвращается только этот объект и ничего больше;поэтому поместите все, что вернет что-либо в ноль;