Ab PowerShell Core 6.0 können Sie &
am Ende des Befehls schreiben. Dies entspricht der Ausführung Ihrer Pipeline im Hintergrund im aktuellen Arbeitsverzeichnis .
Es ist nicht gleichbedeutend mit &
in bash, es ist nur eine schönere Syntax für die aktuelle PowerShell- Jobfunktion . Es gibt ein Jobobjekt zurück, sodass Sie alle anderen Befehle verwenden können, die Sie für Jobs verwenden würden. Zum Beispiel Receive-Job
:
C:\utils> ping google.com &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
35 Job35 BackgroundJob Running True localhost Microsoft.PowerShell.M...
C:\utils> Receive-Job 35
Pinging google.com [172.217.16.14] with 32 bytes of data:
Reply from 172.217.16.14: bytes=32 time=11ms TTL=55
Reply from 172.217.16.14: bytes=32 time=11ms TTL=55
Reply from 172.217.16.14: bytes=32 time=10ms TTL=55
Reply from 172.217.16.14: bytes=32 time=10ms TTL=55
Ping statistics for 172.217.16.14:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 11ms, Average = 10ms
C:\utils>
Wenn Sie einige Aussagen im Hintergrund ausführen möchten , können Sie kombinieren &
Call - Betreiber , { }
Script - Block und diesen neuen &
Hintergrund Operator wie hier:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Hier einige weitere Informationen von den Dokumentationsseiten:
von den Neuerungen in PowerShell Core 6.0 :
Unterstützung des Hintergrunds von Pipelines mit kaufmännischem Und (&) (# 3360)
Wenn Sie &
am Ende einer Pipeline einfügen, wird die Pipeline als PowerShell-Job ausgeführt. Wenn eine Pipeline im Hintergrund ist, wird ein Jobobjekt zurückgegeben. Sobald die Pipeline als Job ausgeführt wird, können alle Standard- *-Job
Cmdlets zum Verwalten des Jobs verwendet werden. In der Pipeline verwendete Variablen (die prozessspezifische Variablen ignorieren) werden automatisch in den Job kopiert, sodass sie Copy-Item $foo $bar &
einfach funktionieren. Der Job wird auch im aktuellen Verzeichnis anstelle des Basisverzeichnisses des Benutzers ausgeführt. Weitere Informationen zu PowerShell-Jobs finden Sie unter about_Jobs .
von about_operators / Ampersand Hintergrundoperator & :
Kaufmännisches Und-Hintergrund-Operator &
Führt die Pipeline zuvor in einem PowerShell-Job aus. Der kaufmännische Und-Hintergrundoperator verhält sich ähnlich wie der UNIX-kaufmännische Und-Operator, der den Befehl vor ihm als Hintergrundprozess ausführt. Der kaufmännische Und-Hintergrund-Operator basiert auf PowerShell-Jobs, sodass er viele Funktionen gemeinsam nutzt Start-Job
. Der folgende Befehl enthält die grundlegende Verwendung des kaufmännischen Und-Hintergrundoperators.
Get-Process -Name pwsh &
Dies entspricht funktional der folgenden Verwendung von Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Da dies funktional der Verwendung entspricht Start-Job
, gibt der kaufmännische Und-Hintergrund-Operator ein Job
Objekt wie folgt zurück Start-Job does
. Dies bedeutet, dass Sie in der Lage sind, Receive-Job
und Remove-Job
genau so, wie Sie es tun würden, wenn Sie Start-Job
den Job gestartet hätten.
$job = Get-Process -Name pwsh &
Receive-Job $job
Ausgabe
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 221.16 25.90 6988 988 pwsh
0 0.00 140.12 29.87 14845 845 pwsh
0 0.00 85.51 0.91 19639 988 pwsh
$job = Get-Process -Name pwsh &
Remove-Job $job
Weitere Informationen zu PowerShell-Jobs finden Sie unter about_Jobs .
Start-Job
, getötet wird, wenn die PS-Shell beendet wird. Im Gegensatz dazu scheint etwas, mit dem begonnen wurdeStart-Process
, nach dem Beenden der PS-Shell weiter zu laufen. Dies ist ein großer Unterschied.