2010-11-18 20 views
4

J'ai une application que j'utilise pour exécuter des commandes Exchange Powershell à l'intérieur du code C# comme ci-dessous. Voici un exemple des lignes pertinentes que j'utilise pour exécuter la commande powershell.Exécution d'une commande powershell en C# avec "Impossible d'appeler cette fonction parce que l'hôte actuel ne l'implémente pas"

  RunspaceConfiguration rsConfig = RunspaceConfiguration.Create(); 
     PSSnapInException snapInException = null; 

     //load Exchange shell 
     rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException); 
     Runspace runSpace = RunspaceFactory.CreateRunspace(rsConfig); 

     //open runspace 
     runSpace.Open(); 

     //setup pipeline 
     Pipeline pipeLine = runSpace.CreatePipeline(); 
     String sScript = "get-mailbox -identity 'rj'"; 

     //add script to pipeline 
     pipeLine.Commands.AddScript(sScript); 

     //run the script 
     pipeLine.Invoke(); 
     pipeLine.Dispose(); 

Ce code fonctionne parfaitement dans tous les cas jusqu'à présent. Le script que j'essaie de lancer à la place de celui ci-dessus consiste à définir RetentionPolicy pour une boîte aux lettres. Le script que je suis en train de courir ressemble à ceci:

Set-Mailbox -Identity « rj » « Politique de rétention du campus principal » -RetentionPolicy

Quand je lance cela dans powershell lui-même il fonctionne parfaitement, mais lorsque je tente de exécutez-le en utilisant le code ci-dessous, je reçois l'erreur, "Impossible d'appeler cette fonction parce que l'hôte actuel ne l'implémente pas." De cette erreur, il semble presque que la commande qui s'exécute en C# ne peut pas exécuter la commande RetentionPolicy mais cela n'a pas beaucoup de sens. J'ai googlé ceci et essayé tout suggéré mais pas de chance.

Si quelqu'un sait pourquoi cela se produit, ce serait très utile.

Répondre

11

Si cette commande normalement demandera confirmation alors vous devrez soit:

  • Set -Confirm:$false comme paramètre (et peut-être -Force ainsi)
  • Set $ConfirmPreference = "None" avant d'appeler Set-Mailbox (et peut-être -Force aussi)
  • Création d'un hôte et mettre en œuvre la fonctionnalité Confirmer ;-)
+0

Vous cloués avec le -Fo rce. Cela a fonctionné parfaitement une fois que j'ai ajouté cela. Merci pour l'aide, qui complète ces exigences. Impressionnant! –

+0

A travaillé comme un charme !!! Merci –

+0

tout échantillon de code source complet? peut être source trop complète pour créer un hôte .. – Kiquenet