2011-12-07 2 views
2

J'essaie d'obtenir une sortie de commande PowerShell simple en C#, en utilisant la fonctionnalité trouvée dans l'espace de noms System.Management.Automation.C# Exchange PowerShell pipeLine Invoke déclenche une CmdletInvocationException pour les valeurs de paramètre nul

J'ai la console Exchange sur ma machine et je peux exécuter des commandes avec succès à partir de la console, mais à partir de C#, j'obtiens une erreur que je ne comprends pas.

Voici le code exemple qui devrait obtenir des informations sur le serveur simple:

static void Main(string[] args) 
{ 
    RunspaceConfiguration rsConfig = RunspaceConfiguration.Create(); 
    PSSnapInException snapInException = null; 
    PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException); 

    using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig)) 
    { 
     myRunSpace.Open(); 

     using (Pipeline pipeLine = myRunSpace.CreatePipeline()) 
     { 
      Command serverCommand = new Command("Get-MailboxServer"); 

      pipeLine.Commands.Add(serverCommand); 
      Collection<PSObject> server = pipeLine.Invoke(); 
      foreach (PSObject cmdlet in server) 
      { 
       string cmdletName = cmdlet.Properties["Name"].Value.ToString(); 
       Console.WriteLine(cmdletName); 
      } 
     } 
    } 
} 

L'erreur réelle occurrs sur la ligne pipeLine.Invoke():

System.Management.Automation.CmdletInvocationException n'a pas été gérée
La valeur ne peut pas être nulle.
Nom du paramètre: paramètres
Source = System.Management.Automation

J'ai essayé d'ajouter des paramètres, par exemple le serveur Identity, mais la même chose se produit:

using (Pipeline pipeLine = myRunSpace.CreatePipeline()) 
{ 
    Command serverCommand = new Command("Get-MailboxServer"); 
    serverCommand.Parameters.Add("Identity", mbServerName); 
    pipeLine.Commands.Add(serverCommand); 
    Collection<PSObject> server = pipeLine.Invoke(); 
} 
+0

Je vois que vous ne vérifiez pas snapInException ou info. Est-il possible que l'appel de rsConfig.AddPSSnapIn échoue? –

Répondre

2

ajoutez ces lignes à votre fichier app.config

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
</startup> 
Questions connexes