PowerShell 2.0 a través de C #, los valores de retorno están vacías?
-
20-09-2019 - |
Pregunta
Estoy usando C # para llamar a los métodos de Exchange 2010 PowerShell y yo sólo he encontrado con un obstáculo.
La colección devuelta por el método Execute no tienen un BaseObject. Puedo usar .Las propiedades reportadas [ "PropertyName"], pero parece que todos esos valores son los valores de cadena. No es muy práctico para el tamaño de archivo, GUID y así sucesivamente.
Lectura http://blogs.msdn.com/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions.aspx , parece que esto es normal, y los tipos que tengo son Deserialized.Namespace.TypeName.
Estoy buscando una manera de serializar de nuevo en un objeto vivo que puedo utilizar las propiedades y así sucesivamente. Tengo la DLL y todo apropiado.
Solución
Parece que puedo conseguir cualquier bien que quiero, sino que tiene que estar en el guión PS invoco a distancia.
he descubierto al consultar a través de PowerShell PowerShell remoto directa, no con el espacio de nombres de Exchange.
Este es un ejemplo
$spsite | Select Id, Url,
@{ Name = "Owner"; Expression = { $_.Owner.UserLogin } }
Esto funciona perfectamente, puedo entonces utilizar
psResult.Members["Owner"].Value as string
para que el propietario
Otros consejos
Usted puede obtener el objeto original como esto:
bits PS:
$results = $MyCustomCollection
C # bits:
System.Collections.ObjectModel.Collection<PSObject>
results = pipeline.Invoke();
CustomCollection theCustumCollection
= (CustomCollection )runspace.SessionStateProxy.GetVariable("results");
usted tiene que asegurarse de que lo único que se devuelve es ese objeto y nada más; a fin de poner cualquier cosa que devolver nada a nula;