PowerShell 2.0 tramite C #, valori di ritorno sono vuoti?
-
20-09-2019 - |
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.
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;