Wie kann man eine Anwendung mit PowerShell im Hintergrund ausführen?
- Einleitung
- Grundprinzip des Hintergrundlaufens in PowerShell
- Verwendung von Start-Process zum unsichtbaren Start
- Hintergrundjobs in PowerShell
- Alternative: Nutzung von .NET-Klassen
- Fazit
Einleitung
Beim Arbeiten mit PowerShell stellt sich oft die Frage, wie man eine Anwendung oder ein Skript so starten kann, dass es im Hintergrund weiterläuft,
ohne dass ein sichtbares Fenster geöffnet wird oder die aktuelle PowerShell-Sitzung blockiert wird. Das Ausführen von Programmen im Hintergrund kann
hilfreich sein, wenn lange laufende Prozesse automatisiert werden sollen, ohne dass der Nutzer direkt darauf aufmerksam gemacht wird.
Grundprinzip des Hintergrundlaufens in PowerShell
PowerShell bietet verschiedene Möglichkeiten, Prozesse zu starten und dabei zu steuern, wie und wo sie laufen. Im einfachsten Fall startet man ein
Programm mit Start-Process, das standardmäßig ein Fenster öffnet und unabhängig von der PowerShell-Sitzung läuft. Für ein wirklich
unsichtbares Ausführen im Hintergrund muss man aber zusätzliche Parameter nutzen. Dabei geht es vor allem darum, ob das Fenster der Anwendung sichtbar
ist und ob die PowerShell auf das Ende des Prozesses wartet oder sofort wieder eine Eingabe ermöglicht.
Verwendung von Start-Process zum unsichtbaren Start
Mit dem Cmdlet Start-Process kann man den Parameter -WindowStyle verwenden, um das Fenster zu steuern. So kann man beispielsweise
Start-Process -FilePath "Anwendung.exe" -WindowStyle Hidden nutzen, damit das Fenster nicht angezeigt wird. Allerdings ist das nur bei Programmen
wirksam, die ein Fenster öffnen. Konsolenanwendungen oder Skripte können sich anders verhalten. Zusätzlich kann der Parameter -NoNewWindow
Hintergrundjobs in PowerShell
PowerShell unterstützt mit Start-Job das Erstellen von Hintergrundjobs, die unabhängig von der aktuellen Eingabeaufforderung laufen.
Dabei wird ein Cmdlet oder Skriptblock asynchron ausgeführt. Allerdings eignen sich diese Hintergrundjobs meist nur für PowerShell-Skripte und nicht
Alternative: Nutzung von .NET-Klassen
Für komplexere Anforderungen kann man die .NET-Klasse System.Diagnostics.Process nutzen. Dort lässt sich ein Prozess mit angepassten Startinformationen
erzeugen, zum Beispiel unsichtbar im Hintergrund. Durch das Setzen von ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden und
ProcessStartInfo.CreateNoWindow = true lässt sich der Prozess quasi unsichtbar ausführen.
Fazit
Um eine Anwendung in PowerShell im Hintergrund auszuführen, gibt es also mehrere Ansätze: Für einfache Fälle reicht Start-Process mit
dem Parameter -WindowStyle Hidden. Für PowerShell-eigene Skripte sind Hintergrundjobs eine Möglichkeit. Bei Bedarf an vollständigem
unsichtbarem Start ohne Fenster öffnet sich die Option, .NET-Klassen zu nutzen, was mehr Kontrolle gibt. Welcher Weg ideal ist, hängt vom konkreten
