Z PowerShell Core 6.0 możesz pisać &
na końcu polecenia i będzie to równoważne z uruchomieniem potoku w tle w bieżącym katalogu roboczym .
Nie jest to odpowiednik &
w bash, to po prostu ładniejsza składnia dla bieżącej funkcji zadań PowerShell . Zwraca obiekt zadania, więc możesz użyć wszystkich innych poleceń, których używałbyś do zadań. Na przykład 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>
Jeśli chcesz wykonać kilka instrukcji w tle, możesz połączyć &
operator wywołania , { }
blok skryptu i ten nowy &
operator w tle, jak tutaj:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Oto więcej informacji ze stron dokumentacji:
z Co nowego w programie PowerShell Core 6.0 :
Obsługa tła potoków za pomocą znaku ampersand (&) (# 3360)
Umieszczenie &
na końcu potoku powoduje uruchomienie potoku jako zadania programu PowerShell. Gdy potok działa w tle, zwracany jest obiekt zadania. Gdy potok działa jako zadanie, *-Job
do zarządzania nim można używać wszystkich standardowych poleceń cmdlet. Zmienne (ignorujące zmienne specyficzne dla procesu) używane w potoku są automatycznie kopiowane do zadania, więc Copy-Item $foo $bar &
po prostu działają. Zadanie jest również uruchamiane w bieżącym katalogu zamiast w katalogu osobistym użytkownika. Aby uzyskać więcej informacji na temat zadań programu PowerShell, zobacz about_Jobs .
from about_operators / Ampersand operator w tle & :
Operator tła Ampersand &
Uruchamia potok przed nim w zadaniu programu PowerShell. Operator tła „ampersand” działa podobnie do „operatora ampersand” systemu UNIX, który słynie z uruchamiania polecenia przed nim jako procesu w tle. Operator tła ampersand jest zbudowany na podstawie zadań programu PowerShell, dzięki czemu udostępnia wiele funkcji Start-Job
. Następujące polecenie zawiera podstawowe użycie operatora tła ampersand.
Get-Process -Name pwsh &
Jest to funkcjonalnie równoważne następującemu użyciu Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Ponieważ jest to funkcjonalnie równoważne użyciu Start-Job
, operator tła ampersand zwraca Job
obiekt, tak jak Start-Job does
. Oznacza to, że możesz używać Receive-Job
i Remove-Job
tak samo, jak gdybyś Start-Job
zaczynał pracę.
$job = Get-Process -Name pwsh &
Receive-Job $job
Wynik
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
Aby uzyskać więcej informacji na temat zadań programu PowerShell, zobacz about_Jobs .
Start-Job
zostanie zabite, gdy powłoka PS zakończy działanie. Z drugiej strony wydaje się, że coś, co zaczęło się od,Start-Process
będzie nadal działać po zamknięciu powłoki PS. To jest duża różnica.