Desde PowerShell Core 6.0 puede escribir &
al final del comando y será equivalente a ejecutar su canalización en segundo plano en el directorio de trabajo actual .
No es equivalente a &
en bash, es solo una sintaxis más agradable para la función actual de trabajos de PowerShell . Devuelve un objeto de trabajo para que pueda usar todos los demás comandos que usaría para los trabajos. Por ejemplo 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>
Si desea ejecutar un par de declaraciones en segundo plano, puede combinar el &
operador de llamada , el { }
bloque de script y este nuevo &
operador de fondo como aquí:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Aquí hay más información de las páginas de documentación:
de Novedades de PowerShell Core 6.0 :
Admite el fondo de las tuberías con ampersand (&) (# 3360)
Poner &
al final de una tubería hace que la tubería se ejecute como un trabajo de PowerShell. Cuando una tubería está en segundo plano, se devuelve un objeto de trabajo. Una vez que la canalización se ejecuta como un trabajo, todos los *-Job
cmdlets estándar se pueden usar para administrar el trabajo. Las variables (que ignoran las variables específicas del proceso) utilizadas en la tubería se copian automáticamente en el trabajo, por lo que Copy-Item $foo $bar &
simplemente funciona. El trabajo también se ejecuta en el directorio actual en lugar del directorio de inicio del usuario. Para obtener más información sobre los trabajos de PowerShell, consulte about_Jobs .
de about_operators / Ampersand background operator & :
Ampersand operador de fondo y
Ejecuta la canalización antes que en un trabajo de PowerShell. El operador de ampersand en segundo plano actúa de manera similar al "operador de ampersand" de UNIX que ejecuta el comando antes que él como un proceso en segundo plano. El operador en segundo plano está construido sobre los trabajos de PowerShell, por lo que comparte mucha funcionalidad Start-Job
. El siguiente comando contiene el uso básico del operador ampersand background.
Get-Process -Name pwsh &
Esto es funcionalmente equivalente al siguiente uso de Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Como es funcionalmente equivalente al uso Start-Job
, el operador de fondo y comercial devuelve un Job
objeto igual que Start-Job does
. Esto significa que puede usarlo Receive-Job
y Remove-Job
lo haría como si lo hubiera hecho Start-Job
para comenzar el trabajo.
$job = Get-Process -Name pwsh &
Receive-Job $job
Salida
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 obtener más información sobre los trabajos de PowerShell, consulte about_Jobs .
Start-Job
lo que comenzó se eliminará cuando se cierre el shell PS. Por el contrario, parece que algo conStart-Process
lo que comenzó continuará ejecutándose después de que se cierre el shell PS. Esta es una gran diferencia.