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.

¿Fue útil?

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;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top