No PowerShell Core 6.0, você pode gravar &
no final do comando e será equivalente à execução do pipeline em segundo plano no diretório de trabalho atual .
Não é equivalente &
no bash, é apenas uma sintaxe melhor para o recurso atual de trabalhos do PowerShell . Ele retorna um objeto de trabalho para que você possa usar todos os outros comandos que usaria para trabalhos. Por exemplo 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 você deseja executar algumas instruções em segundo plano, pode combinar &
o operador de chamada , o { }
bloco de scripts e esse novo &
operador de segundo plano, como aqui:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Aqui estão mais algumas informações das páginas de documentação:
do Novidades do PowerShell Core 6.0 :
Suporte ao background de dutos com e comercial (&) (# 3360)
Colocar &
no final de um pipeline faz com que ele seja executado como um trabalho do PowerShell. Quando um pipeline está em segundo plano, um objeto de trabalho é retornado. Depois que o pipeline estiver sendo executado como um trabalho, todos os *-Job
cmdlets padrão podem ser usados para gerenciar o trabalho. As variáveis (ignorando variáveis específicas do processo) usadas no pipeline são copiadas automaticamente para o trabalho, para que Copy-Item $foo $bar &
funcionem. O trabalho também é executado no diretório atual em vez do diretório inicial do usuário. Para obter mais informações sobre tarefas do PowerShell, consulte about_Jobs .
from about_operators / Operador em segundo plano Ampersand & :
Operador de fundo e comercial e
Executa o pipeline antes dele em um trabalho do PowerShell. O operador em segundo plano e comercial atua de maneira semelhante ao "operador e comercial" do UNIX, que famosa executa o comando antes dele como um processo em segundo plano. O operador em segundo plano e comercial é construído sobre as tarefas do PowerShell, de modo que ele compartilha muitas funcionalidades Start-Job
. O comando a seguir contém o uso básico do operador em segundo plano e comercial.
Get-Process -Name pwsh &
Isso é funcionalmente equivalente ao seguinte uso de Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Como é funcionalmente equivalente ao uso Start-Job
, o operador em segundo plano e comercial retorna um Job
objeto da mesma forma Start-Job does
. Isso significa que você é capaz de usar Receive-Job
e Remove-Job
como faria se tivesse Start-Job
iniciado o trabalho.
$job = Get-Process -Name pwsh &
Receive-Job $job
Resultado
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
Para obter mais informações sobre tarefas do PowerShell, consulte about_Jobs .
Start-Job
será morto quando o shell PS sair. Em contraste, parece que algo iniciado comStart-Process
continuará sendo executado após a saída do shell do PS. Essa é uma grande diferença.