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();
}
Je vois que vous ne vérifiez pas snapInException ou info. Est-il possible que l'appel de rsConfig.AddPSSnapIn échoue? –