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 *-Jobcmdlet 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 Joboggetto proprio come Start-Job does. Ciò significa che sei in grado di utilizzare Receive-Jobe Remove-Jobproprio come faresti se avessi usato Start-Jobper 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-Jobverrà ucciso quando uscirà la shell PS. Al contrario, sembra che qualcosa con cui è iniziatoStart-Processcontinuerà a funzionare anche dopo l'uscita della shell PS. Questa è una grande differenza.