Windows Powershell hängt sich auf

Windows Powershell hängt sich auf

Wie verhindere ich, dass Windows Powershell einfriert, wenn ich einen Befehl darauf ausführe? Ich weiß, dass man unter Linux am Ende eines Befehls ein & hinzufügen kann, sodass man das Terminal weiter verwenden kann, ohne den Prozess zu schließen. Gibt es etwas Ähnliches für Windows Powershell?

Antwort1

Wie verhindere ich, dass Windows Powershell beim Ausführen eines Befehls blockiert?

Verwenden Sie das Start-JobCmdlet, um Jobs im Hintergrund zu starten.

Dies ist das Powershell-Äquivalent zur Verwendung &am Ende eines Befehls in Unix/Linux.


PowerShell-Hintergrundjobs

Die einfachste Möglichkeit, einen PowerShell-Hintergrundjob zu erstellen, ist die Verwendung des Start-JobCmdlets. Mit dem Cmdlet können Sie einen Skriptblock angeben. Der folgende Befehl führt beispielsweise einen einfachen Skriptblock aus, der als Hintergrundjob die Zahlen zwischen 1 und 50 abruft:

Start-Job {1..50}

Sie können mit diesem einzeiligen Befehl Argumente an einen Skriptblock übergeben:

Start-Job {Param($log,$newest) Get-EventLog $log Newest $newest} -ArgumentList "system",25

Oder Sie können Skripte ausführen:

Start-Job -FilePath C:\scripts\Send-UptimeMail.ps1 -ArgumentList (Get-Credential [email protected])

Unten sehen Sie die Ergebnisse dieser drei Befehle. Ich habe diese Befehle in PowerShell 3.0 ausgeführt. Sie funktionieren jedoch auch in PowerShell 2.0, obwohl die Spalte PSJobTypeName nicht angezeigt wird.

Abbildung 1: Ausführen von Skriptblöcken und Skripten im Hintergrund

Die Ausgabe Start-Jobist ein Auftragswarteschlangenobjekt. Sie verwenden die -Job Cmdlets, um Aufträge und deren Ergebnisse zu verwalten. Sie können auf Aufträge anhand einer ID verweisen. Beachten Sie im obigen Bild, wie die Auftrags-IDs von 1 über 3 auf 5 springen.

QuellePowerShell-Hintergrundjobs

Der obige Link enthält viele weitere Details zu den folgenden Themen:

  • Verwenden des Get-WMIObjectCmdlets zum Erstellen von Hintergrundaufträgen

  • Verwenden des Invoke-CommandCmdlets zum Erstellen von Hintergrundaufträgen

  • Verwalten von Hintergrundjobs

  • Abrufen von Auftragsergebnissen

  • Anhalten und auf Aufträge warten


Weiterführende Literatur

Antwort2

Als Alternative zu Jobs können SieLaufräume: Sie bieten eine höhere Leistung und weniger Overhead beim Ausführen von Befehlen im Hintergrund.

Implementierungen:

verwandte Informationen