2016-08-09 9 views
0

Ich versuche, von Powershell, indem Sie den folgenden Befehl ein Anwendungspool zu stoppenkonnte nicht die Arbeit Powershell Scriptlet machen aus C#

Stop-WebAppPool "Test1234" 

Das funktionierte. Ich habe überprüft, dass der Anwendungspool "Test1234" gestoppt wurde.

Wenn ich es jedoch als test.ps1-Datei erstellt und dasselbe aus meinem C# -Code aufgerufen habe, hat es nicht funktioniert.

C# -Code

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.FileName = @"powershell.exe"; 
startInfo.Arguments = @"& 'c:\test.ps1'"; 
startInfo.RedirectStandardOutput = true; 
startInfo.RedirectStandardError = true; 
startInfo.UseShellExecute = false; 
startInfo.CreateNoWindow = true; 
Process process = new Process(); 
process.StartInfo = startInfo; 
process.Start(); 

Es sind keine Störungen haben werfen, aber nicht funktionierte. Warum das passiert ist und wie man diese Arbeit bekommt?

+0

warum der Befehl args "& 'c: \ test.ps1'" sicher sein gerechten "c: \ test.ps1" – BugFinder

+0

In PowerShell ausgelöste Fehler werden häufig nicht als Ausnahme auf Prozessebene zurückgegeben (es sei denn, Sie verwenden explizit den Befehl "exit " in einem Skript). Ihr test.ps1-Skript benötigt eine Fehlerbehandlung und muss etwas mit diesen Fehlern tun, damit Sie es untersuchen können. Wenn C# ein Skript auf diese Weise ausführt, hat es keine Sichtbarkeit des Interieurs. –

Antwort

0

Wenn Sie Powershell von C# aus aufrufen müssen, können Sie das Paket System.Management.Automation nuget verwenden. Wie in msdn docs beschrieben, wird dieses nuget Paket können Sie Powershell ausgeführt werden, wie folgt:

using System.Management.Automation; 
// ... 
PowerShell ps = PowerShell.Create(); 
ps.AddCommand("Stop-WebAppPool"); 
ps.AddArgument("Test1234"); 
ps.Invoke(); 
Verwandte Themen