Benutzer mit den meisten Antworten
CMD unterschied zu Powershell ?? Ausgabe in Richbox

Frage
-
Hallo,
ich habe versucht meine Ausgabe der PowershellConsole in eine Richbox umzuleiten.
Für die CMD habe ich folgenden Code genommen und umgebaut aber er bleibt immer bei test.start(); hängen und sagt :
Das System kann die Datei nicht finden.
Process test = new Process(); test.StartInfo.FileName = "powershell.exe -NoExit -ExecutionPolicy Unrestricted -NoProfile"; test.StartInfo.UseShellExecute = false; test.StartInfo.Arguments = Path.Combine(Resource1.batch, "Packe_alle_Pakete.ps1"); test.StartInfo.UseShellExecute = false; test.StartInfo.RedirectStandardOutput = true; test.StartInfo.CreateNoWindow = true; test.Start(); test.WaitForExit(); StreamReader sr = test.StandardOutput; line = sr.ReadToEnd(); aenderung_ausgabe_box.Text = line;
Danke für die Hilfe
Cay
- Bearbeitet c_joksch Mittwoch, 21. November 2012 14:35
Antworten
-
Hallo,
ich habe jetzt nochmal weiter getestet:
Process test = new Process(); test.StartInfo.FileName = @"powershell.exe"; test.StartInfo.UseShellExecute = false; test.StartInfo.Arguments = "-ExecutionPolicy Unrestricted -NoProfile /c B:\\Benutzer\\Desktop\\test.ps1"; test.StartInfo.UseShellExecute = false; test.StartInfo.RedirectStandardOutput = true; test.StartInfo.CreateNoWindow = true; test.Start(); test.WaitForExit(); StreamReader sr = test.StandardOutput; string line = sr.ReadToEnd(); Console.WriteLine(line); Console.ReadKey();
Meine test.ps1 kopiert eine Datei. Eine Ausgabe habe ich nicht erhalten, weil es wahrscheinlich keine gibt, aber die Datei wurde kopiert. Was mir aber aufgefallen ist, das -NoExit bewirkt, das der Prozess im TaskManager stehen bleibt. Als ich den Process beendete ist mein Programm im Code weiter gerückt, also weg von WaitForExit. Dieses wartet wirlich solange, wie der Prozess existiert. Das ist dann auch der grund, warum es nichts in der TextBox ausgibt.
Warum allerdings Process.Start("..","..") geht, aber die ausführliche Variante nicht, kann ich dir auch nicht sagen.
Probiere mal folgendes:
Process test = new Process(); test.StartInfo.FileName = @"powershell.exe"; test.StartInfo.Arguments = "-ExecutionPolicy Unrestricted -NoProfile /c B:\\Benutzer\\Desktop\\test.ps1"; test.Start();
Das ist exakt der selbe Code wie in der Kurzform, aber "ausführlicher" geschrieben. Wenn das funktioniert, kannst nach und nach die weiteren Eigenschaftszuweisungen wieder einbauen, um zu sehen wo der Fehler liegt.
Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/
- Als Antwort markiert c_joksch Donnerstag, 22. November 2012 09:33
Alle Antworten
-
Hallo, FileName darf wirklich nur der Dateiname sein. Arguments beschreibt die Argumente:
test.StartInfo.FileName = "powershell.exe"; test.StartInfo.UseShellExecute = false; test.StartInfo.Arguments = " -NoExit -ExecutionPolicy Unrestricted -NoProfile" + Path.Combine(Resource1.batch, "Packe_alle_Pakete.ps1");
Sonst denkt die CLR das die EXE Datei so hier heißt: "powershell.exe -NoExit -ExecutionPolicy Unrestricted -NoProfile"
Und so heißt Sie bestimmt nicht ;)Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/
-
Ist in dem Pfad der PS1-Datei ein Leerzeichen enthalten? Das könnte vielleicht falsch interpretiert werden, wenn es so ist, dann mache den Pfad mal in Anführungszeichen.
was passiert denn wenn du in der CMD den Befehl eintippst:
powershell.exe -NoExit -ExecutionPolicy Unrestricted -NoProfile C:\Packe_alle_Pakete.ps1
Du musst natürlich noch den Pfad anpassen.
Wenn es dort nicht geht, also die Datei nicht ausgeführt wird, dann liegt es wahrscheinlich an einem der Argumente (Parameter).
Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/
-
Hallo,
dann wird die datei ausgeführt
//Process.Start("powershell", "-NoExit -ExecutionPolicy Unrestricted -NoProfile /c f:\\Produktion\\Bereitstellungs-TOOL\\INNO_SETUP_ERZEUGUNG\\batches\\Packe_alle_Pakete.ps1");
Wenn ich den Befehl so ausführe funktioniert er komischer weise. Allerdings wird er dann nicht in der Richtextbox ausgegeben
grüße
Cay
-
Hallo,
ich habe jetzt nochmal weiter getestet:
Process test = new Process(); test.StartInfo.FileName = @"powershell.exe"; test.StartInfo.UseShellExecute = false; test.StartInfo.Arguments = "-ExecutionPolicy Unrestricted -NoProfile /c B:\\Benutzer\\Desktop\\test.ps1"; test.StartInfo.UseShellExecute = false; test.StartInfo.RedirectStandardOutput = true; test.StartInfo.CreateNoWindow = true; test.Start(); test.WaitForExit(); StreamReader sr = test.StandardOutput; string line = sr.ReadToEnd(); Console.WriteLine(line); Console.ReadKey();
Meine test.ps1 kopiert eine Datei. Eine Ausgabe habe ich nicht erhalten, weil es wahrscheinlich keine gibt, aber die Datei wurde kopiert. Was mir aber aufgefallen ist, das -NoExit bewirkt, das der Prozess im TaskManager stehen bleibt. Als ich den Process beendete ist mein Programm im Code weiter gerückt, also weg von WaitForExit. Dieses wartet wirlich solange, wie der Prozess existiert. Das ist dann auch der grund, warum es nichts in der TextBox ausgibt.
Warum allerdings Process.Start("..","..") geht, aber die ausführliche Variante nicht, kann ich dir auch nicht sagen.
Probiere mal folgendes:
Process test = new Process(); test.StartInfo.FileName = @"powershell.exe"; test.StartInfo.Arguments = "-ExecutionPolicy Unrestricted -NoProfile /c B:\\Benutzer\\Desktop\\test.ps1"; test.Start();
Das ist exakt der selbe Code wie in der Kurzform, aber "ausführlicher" geschrieben. Wenn das funktioniert, kannst nach und nach die weiteren Eigenschaftszuweisungen wieder einbauen, um zu sehen wo der Fehler liegt.
Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/
- Als Antwort markiert c_joksch Donnerstag, 22. November 2012 09:33