2010-01-13 4 views
2

J'utilise C# pour appeler les méthodes Exchange 2010 PowerShell et je viens de rencontrer un problème.PowerShell 2.0 via C#, les valeurs de retour sont vides?

La collection renvoyée par la méthode Execute ne possède pas d'objet BaseObject. Je peux utiliser .Properties ["PropertyName"], mais il semble que toutes ces valeurs sont des valeurs de chaîne. Pas très pratique pour la taille de fichier, Guids et ainsi de suite. Lecture http://blogs.msdn.com/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions.aspx, il semble que ce soit normal, et les types que j'ai sont Deserialized.Namespace.TypeName.

Je suis à la recherche d'un moyen de les sérialiser de nouveau dans un objet en direct que je peux utiliser les propriétés et ainsi de suite. J'ai la DLL appropriée et tout.

Répondre

0

Il semble que je peux obtenir n'importe quelle propriété que je veux, mais il doit être dans le script PS que j'appelle à distance. Je l'ai compris lors de l'interrogation PowerShell via PowerShell à distance directe, pas avec l'espace de noms Exchange.

Voici un exemple

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

Cela fonctionne parfaitement, je peux alors utiliser

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

pour obtenir le propriétaire

0

Vous pouvez obtenir l'objet orginal comme ceci:

PS bit:

$results = $MyCustomCollection 

C# bits:

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

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

vous ne devez vous assurer que la seule chose retournée est que objet et rien d'autre; alors mettez tout ce qui renverrait quelque chose à null;

Questions connexes