Powershell 2.0 über C #, Rückgabewerte sind leer?
-
20-09-2019 - |
Frage
Ich bin mit C # Exchange 2010 Powershell-Methoden aufrufen und ich habe gerade einen Haken gestoßen.
Die Sammlung zurückgegeben nach der Methode Execute keine Baseobject haben. Ich kann .Properties verwenden [ „Propertyname“], aber es scheint, dass alle diese Werte String-Werte sind. Nicht sehr praktisch für die Dateigröße, Guids und so weiter.
Beim Lesen http://blogs.msdn.com/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions.aspx , es scheint, dass dies normal ist, und die Typen ich habe, sind Deserialized.Namespace.TypeName.
Ich bin auf der Suche nach einem Weg, um sie in ein Live-Objekt serialisiert zurück, dass ich Eigenschaften verwenden kann, und so weiter. Ich habe die entsprechende DLL und alles.
Lösung
Es scheint, dass ich jede Eigenschaft bekommen kann ich will, aber muss sie aus der Ferne in dem PS-Skript rief ich sein.
ich es heraus, während Powershell über direkte Remote-Powershell abfragen, nicht mit dem Exchange-Namespace.
Hier ist ein Beispiel
$spsite | Select Id, Url,
@{ Name = "Owner"; Expression = { $_.Owner.UserLogin } }
Das funktioniert einwandfrei, dann kann ich verwenden
psResult.Members["Owner"].Value as string
an den Eigentümer bekommen
Andere Tipps
Sie können das ursprüngliche Objekt wie diese:
PS Bit:
$results = $MyCustomCollection
C # Bit:
System.Collections.ObjectModel.Collection<PSObject>
results = pipeline.Invoke();
CustomCollection theCustumCollection
= (CustomCollection )runspace.SessionStateProxy.GetVariable("results");
Sie müssen sicherstellen, dass das einzige, was zurückgegeben wird, ist das Objekt und nichts anderes; so habe alles, was alles auf null zurückkommen würde;