2 votes

Visual Studio 2017 C# lancer powershell script

J'espère que c'est le bon endroit pour demander à un nouveau venu sur ce site :)

J'ai créé une interface graphique dans Visual Studio pour la création de nouveaux utilisateurs. Une partie du code appelle ensuite un script Powershell que j'ai utilisé pour la création d'utilisateurs.

Donc l'interface graphique fonctionne, je peux ajouter les utilisateurs à un fichier CSV qu'il crée et lance ensuite le script Powershell script.

Le problème que je rencontre est qu'une partie du script de Powershell charge le snapin d'exchange 2007. Pour une raison quelconque, lors de l'exécution du script via l'interface graphique que j'ai créée, il s'affiche toujours avec une erreur disant qu'il est incapable de trouver le plugin.

Donc, en gros, le code pour lancer le Powershell est le suivant. Maintenant, je ne suis pas du tout un codeur donc je pourrais m'y prendre de la mauvaise façon et ce pourrait être un peu le bordel hehe :)

Process p = new Process();

p.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);

// Redirect the output stream of the child process.
p.StartInfo.CreateNoWindow = false; (false for testing)
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = false; //(false for testing)
p.StartInfo.RedirectStandardOutput = false; //(false for testing)
p.StartInfo.RedirectStandardError = false; //(false for testing)
p.StartInfo.LoadUserProfile = true;
p.StartInfo.FileName = "This points to a file on a network share" @"\\server\folder\file";

p.Start();
p.BeginOutputReadLine();

Ce qui précède se produit après un clic sur un bouton et sera affiché dans une zone de texte dans l'interface graphique une fois que tout fonctionnera. Mais pour l'instant, j'ai désactivé ce côté des choses afin de pouvoir voir les erreurs dans Powershell.

Le message d'erreur dans Powershell est donc le suivant

Microsoft.exchange.management.powershell.admin n'est pas installé sur cet ordinateur.

Mais encore une fois, si je lance le script manuellement sans l'interface graphique, cela fonctionne bien. C'est comme si l'interface graphique le lançait dans un environnement fermé qui n'a pas accès à l'ordinateur sur lequel il s'exécute. Je suis probablement en train de rater quelque chose de simple car je n'ai vraiment aucune idée de la création d'applications c#.

0voto

MichaelS Points 11

OK, je pense avoir résolu le problème.

J'aurais dû mieux expliquer ce que je faisais pour lancer le script de Powershell. En gros, j'utilisais le code ci-dessus pour lancer un fichier .bat et je le faisais de cette façon pour une raison quelconque lorsque ce fichier bat s'exécutait, il ne fonctionnait pas et j'obtenais l'erreur ci-dessus.

J'ai donc utilisé un petit programme pour convertir le fichier bat en exe et le configurer pour qu'il soit toujours exécuté en tant qu'administrateur. Cela a résolu le problème et maintenant le script s'exécute correctement.

Je ne sais pas trop pourquoi, mais en lançant le fichier bat, il n'a pas eu accès au profil de l'utilisateur local et n'a donc pas pu charger le snap-in d'échange Powershell, car les détails de celui-ci sont stockés dans le registre de l'utilisateur local.

La solution était donc de changer le fichier bat que mon interface graphique lançait pour le script Powershell script en un fichier EXE. Je ne sais pas trop pourquoi, mais ça marche :)

Merci Michael Smith

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X