Начиная с PowerShell Core 6.0 вы можете писать & в конце команды, и это будет эквивалентно запуску конвейера в фоновом режиме в текущем рабочем каталоге.
Это не эквивалент & в bash, это просто более удобный синтаксис для текущей оболочки PowerShell вакансии. Он возвращает объект задания, поэтому вы можете использовать все остальные команды, которые вы использовали бы для заданий. Например 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>
Если вы хотите выполнить пару операторов в фоновом режиме, вы можете объединить _ 5_ оператор вызова, _ 6_ блок сценария и этот новый _ 7_ фоновый оператор, как здесь:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Вот еще немного информации со страниц документации:
из Что нового в PowerShell Core 6.0:
Поддержка фоновой обработки конвейеров с помощью амперсанда (&) (# 3360)
Если поместить & в конец конвейера, конвейер будет запущен как задание PowerShell. Когда конвейер находится в фоновом режиме, возвращается объект задания. Когда конвейер запущен как задание, все стандартные *-Job командлеты можно использовать для управления этим заданием. Переменные (без учета переменных, зависящих от процесса), используемые в конвейере, автоматически копируются в задание, поэтому Copy-Item $foo $bar & просто работает. Задание также выполняется в текущем каталоге, а не в домашнем каталоге пользователя. Для получения дополнительной информации о заданиях PowerShell см. about_Jobs.
из about_operators / Ampersand background operator &:
Фоновый оператор амперсанда &
Запускает конвейер перед ним в задании PowerShell. Фоновый оператор амперсанда действует аналогично «оператору амперсанда» UNIX, который, как известно, запускает команду перед ним в качестве фонового процесса. Фоновый оператор амперсанда построен на основе заданий PowerShell, поэтому он имеет много общего с Start-Job. Следующая команда описывает базовое использование фонового оператора амперсанда.
Get-Process -Name pwsh &
Функционально это эквивалентно следующему использованию Start-Job.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Поскольку он функционально эквивалентен использованию Start-Job, оператор фона амперсанда возвращает объект Job точно так же, как Start-Job does. Это означает, что вы можете использовать Receive-Job и Remove-Job так же, как если бы вы использовали Start-Job для запуска задания.
$job = Get-Process -Name pwsh &
Receive-Job $job
Выход
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
Для получения дополнительной информации о заданиях PowerShell см. about_Jobs.
person
Mariusz Pawelski
schedule
22.12.2018