HOWTO · PowerShell

Wie man ein PowerShell-Skript ausführt, ohne ein Fenster anzuzeigen

Führen Sie PowerShell-Skripte mit einem ausgeblendeten Fenster oder dem Aufgabenplaner aus und verstehen Sie die Grenzen des Startkontexts, Batchdateien und Dienst-Alternativen.

Auf dieser Seite

Starten Sie unter Windows ein Skript mit powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1" und ersetzen Sie den in Anführungszeichen gesetzten Pfad durch den absoluten Pfad Ihres Skripts. Der Parameter -WindowStyle Hidden steuert das Erscheinungsbild des PowerShell-Fensters; er garantiert nicht, dass jeder Starter oder jede untergeordnete Anwendung unsichtbar bleibt.

PowerShell mit -WindowStyle Hidden ausführen

Verwenden Sie den obigen Befehl in einem Windows-Starter wie dem Dialog „Ausführen“. -File identifiziert das Skript; Anführungszeichen schützen Pfade, die Leerzeichen enthalten. -NoProfile überspringt Profil-Startskripte, sodass Ihre Aufgabe ihre eigenen Abhängigkeiten laden muss.

Die Sichtbarkeit des Fensters hängt vom Host und vom Startkontext ab: Eine Konsole kann beim Start kurz erscheinen. Verlassen Sie sich nicht darauf, dass dieser Befehl ein bereits geöffnetes Terminal verbirgt. Vom Skript gestartete Anwendungen können ihre eigenen Fenster anzeigen. Ein ausgeblendetes Fenster verbirgt den Prozess auch nicht vor dem Task-Manager.

Die Windows-Startanweisungen in diesem Artikel sind nicht ausgeführte Illustrationen; es werden kein beobachtetes Fensterverhalten und keine Befehlsausgaben bereitgestellt.

Das Skript aus einer Batchdatei starten

Speichern Sie zwei Zeilen in run_script.bat: zuerst @echo off, dann powershell.exe -NoProfile -WindowStyle Hidden -File "C:\Scripts\Task.ps1". Ersetzen Sie den Pfad, bevor Sie die Datei ausführen.

@echo off unterdrückt die Befehlsanzeige in der Batch-Konsole. Es verbirgt weder diese Konsole noch unterdrückt es die Ausgabe des Skripts oder verhindert ein kurzes Aufblitzen beim Start. Eine Batchdatei ist für wiederholte Starts bequem, aber der Aufgabenplaner eignet sich besser für unbeaufsichtigte Arbeit ohne interaktive Konsole.

Das Skript mit dem Aufgabenplaner ausführen

  1. Öffnen Sie die Aufgabenplanung, wählen Sie Aufgabe erstellen und geben Sie der Aufgabe einen aussagekräftigen Namen.
  2. Wählen Sie unter Allgemein ein Konto mit Zugriff auf das Skript und seine Ressourcen. Wählen Sie für unbeaufsichtigte Arbeit Ausführen, ob Benutzer angemeldet ist oder nicht, und geben Sie bei Aufforderung die Anmeldeinformationen an. Dies verwendet einen nicht interaktiven Kontext; Skripte, die eine Desktop-Interaktion erfordern, können fehlschlagen. Aktivieren Sie Mit höchsten Privilegien ausführen nur, wenn die Aufgabe eine Erhöhung erfordert und das Konto dafür berechtigt ist. Die Erhöhung steuert nicht die Sichtbarkeit.
  3. Fügen Sie unter Trigger den Zeitplan oder das Ereignis hinzu, das Sie benötigen.
  4. Wählen Sie unter Aktionen Neu und Programm starten. Wählen Sie die installierte ausführbare Datei powershell.exe. Geben Sie unter Argumente hinzufügen -NoProfile -NonInteractive -WindowStyle Hidden -File "C:\Scripts\Task.ps1" ein. Setzen Sie Starten in auf C:\Scripts ohne Anführungszeichen und passen Sie beide Pfade an. -NonInteractive verhindert, dass Eingabeaufforderungen auf einen Benutzer warten; es verbirgt keine Fenster.
  5. Speichern Sie die Aufgabe, klicken Sie mit der rechten Maustaste darauf und wählen Sie Ausführen für einen manuellen Test. Dies startet sie sofort, ohne auf ihren Trigger zu warten. Überprüfen Sie ihren Verlauf, das Letzte Ergebnis und die Protokolle des Skripts.

PSExec oder NSSM nur für geeignete Aufgaben verwenden

PSExec von Microsoft Sysinternals eignet sich für die Remoteverwaltung oder die Ausführung unter einem anderen Konto. Seine Option -d bedeutet „nicht warten“, und -s wählt das SYSTEM-Konto; keines von beiden ist ein Schalter zum Ausblenden von Fenstern. SYSTEM hat einen anderen Ressourcenzugriff als Ihr Benutzerkonto. Diese Optionen sind für gewöhnliche ausgeblendete Starts unnötig.

NSSM (Non-Sucking Service Manager) verpackt Anwendungen als Windows-Dienste. Beziehen Sie es von seiner offiziellen Download-Seite, https://nssm.cc/download. Die Installation eines Dienstes erfordert Administratorrechte. Konfigurieren Sie die ausführbare PowerShell-Datei, die Skriptargumente, das Arbeitsverzeichnis, das Dienstkonto, die Protokollierung und das Neustartverhalten bewusst. Verwenden Sie es für dienstartige Workloads, die keinen interaktiven Desktop benötigen; ein kurzes geplantes Skript benötigt in der Regel nur den Aufgabenplaner. Das Umgehen der Ausführungsrichtlinie ändert den Umgang mit der Skriptrichtlinie, nicht die Sichtbarkeit von Fenstern, und ist zum Ausblenden eines Fensters nicht erforderlich.

Das Skript testen und die richtige Methode wählen

Führen Sie Ihr Skript zuerst sichtbar unter dem vorgesehenen Konto aus. Überprüfen Sie Dateiberechtigungen, Abhängigkeiten, absolute Pfade und Meldungen zur Ausführungsrichtlinie. Geplanten Konten können Ihre zugeordneten Laufwerke oder Profileinstellungen fehlen. Speichern Sie Ausgabe und Fehler an einem Ort, an den dieses Konto schreiben kann; ein verschwindendes Fenster ist kein Beweis für Erfolg.

Das folgende eigenständige PowerShell-Protokollierungsbeispiel wird nicht ausgeführt. Es schreibt eine Abschlussmeldung in eine temporäre Datei, liest sie und entfernt die Datei anschließend:

$logPath = [System.IO.Path]::GetTempFileName()
try {
    'Task completed' | Set-Content -LiteralPath $logPath
    Get-Content -LiteralPath $logPath
}
finally {
    Remove-Item -LiteralPath $logPath
}

Behalten Sie für Ihr tatsächliches Skript eine stabile Protokolldatei und zeichnen Sie Fehler ebenso auf wie die Fertigstellung. Wählen Sie den direkten Start für gelegentliche Verwendung, eine Batchdatei für Bequemlichkeit, den Aufgabenplaner für unbeaufsichtigte Trigger oder NSSM für eine Dienst-Workload. Überprüfen Sie desktopabhängiges Verhalten auf dem Ziel-Windows-Computer, bevor Sie sich auf einen ausgeblendeten Start verlassen.