Domanda

sto usando C # per chiamare i metodi di Exchange 2010 PowerShell e ho appena incontrato un intoppo.

La collezione restituito dal metodo Execute non hanno un BaseObject. Posso usare .Properties [ "PropertyName"], ma sembra che tutti questi valori sono valori di stringa. Non molto pratico per le dimensioni del file, GUID e così via.

Reading http://blogs.msdn.com/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions.aspx , sembra che questo è normale, e le tipologie che ho sono Deserialized.Namespace.TypeName.

Sto cercando un modo per serializzare di nuovo in un oggetto vivo che posso utilizzare le proprietà e così via. Ho la DLL e tutto appropriata.

È stato utile?

Soluzione

Sembra posso ottenere qualsiasi proprietà che voglio, ma ha bisogno di essere nello script PS invoco da remoto.

ho capito durante l'interrogazione PowerShell tramite Remote PowerShell diretta, non con lo spazio dei nomi Exchange.

Ecco un esempio

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

Questo funziona perfettamente, posso quindi utilizzare

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

per ottenere il proprietario

Altri suggerimenti

È possibile ottenere l'oggetto originale in questo modo:

po PS:

$results = $MyCustomCollection

C # bit:

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

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

si ha a fare in modo che l'unica cosa restituito è l'oggetto e nient'altro; così si può mettere qualsiasi cosa che sarebbe tornato di tutto per null;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top