Da PowerShell Core 6.0 sei in grado di scrivere &
alla fine del comando e sarà equivalente a far girare la pipeline in background nella directory di lavoro corrente .
Non è equivalente a &
in bash, è solo una sintassi migliore per le attuali funzioni dei lavori di PowerShell . Restituisce un oggetto lavoro in modo da poter usare tutti gli altri comandi da utilizzare per i lavori. Per esempio 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>
Se vuoi eseguire un paio di istruzioni in background puoi combinare l' &
operatore di chiamata , il { }
blocco di script e questo nuovo &
operatore in background come qui:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Ecco alcune altre informazioni dalle pagine della documentazione:
da Novità di PowerShell Core 6.0 :
Supporta lo sfondo di condutture con e commerciale (&) (# 3360)
La messa &
alla fine di una pipeline comporta l'esecuzione della pipeline come processo PowerShell. Quando una pipeline è in background, viene restituito un oggetto lavoro. Una volta che la pipeline è in esecuzione come lavoro, tutti i *-Job
cmdlet standard possono essere utilizzati per gestire il lavoro. Le variabili (ignorando le variabili specifiche del processo) utilizzate nella pipeline vengono automaticamente copiate nel lavoro, quindi Copy-Item $foo $bar &
funziona. Il lavoro viene anche eseguito nella directory corrente anziché nella home directory dell'utente. Per ulteriori informazioni sui lavori PowerShell, vedere about_Jobs .
da about_operators / Ampersand background operator & :
Operatore di sfondo e commerciale &
Esegue la pipeline prima di essa in un processo PowerShell. L'operatore di e commerciale in background agisce in modo simile all'operatore di e commerciale di UNIX che esegue notoriamente il comando prima di esso come processo in background. L'operatore in background e commerciale è basato sui lavori di PowerShell, quindi condivide molte funzionalità Start-Job
. Il seguente comando contiene l'utilizzo di base dell'operatore e commerciale in background.
Get-Process -Name pwsh &
Questo è funzionalmente equivalente al seguente utilizzo di Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Poiché è funzionalmente equivalente all'uso Start-Job
, l'operatore di sfondo e commerciale restituisce un Job
oggetto proprio come Start-Job does
. Ciò significa che sei in grado di utilizzare Receive-Job
e Remove-Job
proprio come faresti se avessi usato Start-Job
per iniziare il lavoro.
$job = Get-Process -Name pwsh &
Receive-Job $job
Produzione
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
Per ulteriori informazioni sui lavori PowerShell, vedere about_Jobs .
Start-Job
verrà ucciso quando uscirà la shell PS. Al contrario, sembra che qualcosa con cui è iniziatoStart-Process
continuerà a funzionare anche dopo l'uscita della shell PS. Questa è una grande differenza.