
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-Job
Cmdlet, 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-Job
Cmdlets. 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.
Die Ausgabe
Start-Job
ist 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-WMIObject
Cmdlets zum Erstellen von HintergrundaufträgenVerwenden des
Invoke-Command
Cmdlets zum Erstellen von HintergrundaufträgenVerwalten 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: