Ich habe ein Problem mit dem PowerShell-Befehl in einer WPF-App festgestellt. Die Grundvoraussetzung hierfür ist, dass PowerShell im Hintergrund ausgeführt werden sollte, ohne ein Konsolenfenster zu öffnen.C# So blenden Sie das PowerShell-Fenster aus
Wenn ich jedoch einen RunSpace erstellen und den Befehl in der Pipeline ausführen, kann ich das Konsolenfenster überhaupt nicht ausblenden. Folgendes ist mein Code:
Die einzige Möglichkeit, das Fenster zu verbergen, ist die PowerShell in einem Prozess auszuführen. Auf diese Weise kann ich den Kontext nicht wiederverwenden, da ich jedes Mal einen brandneuen PowerShell-Prozess gestartet habe. Hier sind meine Codes:
private void RunPowerShellProcess()
{
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = "import-module vmware.appcapture;Start-AVAppCapture -Name Test";
startInfo.FileName = "Powershell.exe";
p.StartInfo = startInfo;
StringBuilder stringBuilder = new StringBuilder();
p.OutputDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
using (StreamReader output = p.StandardOutput)
{
stringBuilder.AppendLine(output.ReadToEnd());
}
}
);
p.ErrorDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
using (StreamReader output = p.StandardError)
{
stringBuilder.AppendLine(output.ReadToEnd());
}
}
);
p.Start();
p.WaitForExit();
string finalStdOuputLine = p.StandardOutput.ReadToEnd();
string finalStdErrorLine = p.StandardError.ReadToEnd();
try
{
Result.Dispatcher.Invoke(new Action(() =>
{
Result.Text = String.Format("Result: {0}, Error: {1}", finalStdOuputLine, finalStdErrorLine);
}));
}
catch (Exception e)
{
}
}
Ich möchte wirklich RunSpace verwenden. Aber wie kann ich einerseits einen PowerShell-Kontext wiederverwenden, andererseits aber das Konsolenfenster ausblenden?
haben Ihr versucht, die mit folgenden 'StartInfo.WindowStyle = .ProcessWindowStyle.Hidden;' – MethodMan
In meinem zweiten Codes Code-Schnipsel, ich den Prozess verwendet, um die Powershell-Fenster zu verstecken. Ich mag diese Methode jedoch nicht, da ich einen PowerShell-Kontext nicht verwenden kann. Zum Beispiel muss ich das Modul jedes Mal importieren, wenn ich den Befehl ausführe. Mit RunSpace kann ich jedoch einen Kontext wiederverwenden. Aber das Problem mit RunSpace ist, dass ich das Fenster nicht verstecken kann. Daher frage ich, ob ein Experte es weiß? – Fiona