Эквивалент Powershell амперсанда bash (&) для разветвления/запуска фоновых процессов
Начиная с PowerShell Core powershell 6.0 вы можете писать &
в конце powershell команды, и это будет эквивалентно powershell запуску конвейера в фоновом режиме в текущем рабочем каталоге.
Это не powershell эквивалент &
в bash, это просто windows-powershell более удобный синтаксис для powershell текущей функции PowerShell windows-powershell jobs. Он возвращает объект задания, поэтому windows-powershell вы можете использовать все windows-powershell остальные команды, которые 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>
Если powershell вы хотите выполнить несколько powershell операторов в фоновом режиме, вы powershell можете объединить &
call operator, { }
script block и этот windows-powershell новый &
background operator, как здесь:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Дополнительная windows-powershell информация со страниц документации:
из powershell What's New in PowerShell Core 6.0:
Поддержка фоновой обработки конвейеров с помощью амперсанда (&) (# 3360)
Размещение
&
в конце конвейера powershell приводит к тому, что конвейер windows-powershell запускается как задание PowerShell. Когда windows-powershell конвейер находится в фоновом windows-powershell режиме, возвращается объект windows-powershell задания. Когда конвейер запущен windows-powershell как задание, все стандартные windows-powershell командлеты*-Job
можно использовать powershell для управления заданием. Переменные powershell (без учета переменных, зависящих powershell от процесса), используемые windows-powershell в конвейере, автоматически windows-powershell копируются в задание, поэтому windows-powershellCopy-Item $foo $bar &
просто работает. Задание powershell также выполняется в текущем powershell каталоге, а не в домашнем powershell каталоге пользователя. Дополнительные powershell сведения о заданиях PowerShell powershell см. На странице about_Jobs.
из about_operators / Ampersand background operator &:
Оператор фона амперсанда &
Запускает powershell конвейер перед ним в задании powershell PowerShell. Фоновый оператор powershell амперсанда действует аналогично powershell «оператору амперсанда» UNIX, который, как windows-powershell известно, запускает команду powershell перед ним в качестве фонового windows-powershell процесса. Фоновый оператор windows-powershell амперсанда построен на основе powershell заданий PowerShell, поэтому windows-powershell он имеет много общего с
Start-Job
. Следующая windows-powershell команда описывает базовое powershell использование фонового оператора powershell амперсанда.Get-Process -Name pwsh &
Функционально powershell это эквивалентно следующему windows-powershell использованию
Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Поскольку powershell он функционально эквивалентен windows-powershell использованию
Start-Job
, оператор powershell фона амперсанда возвращает powershell объектJob
, как иStart-Job does
. Это означает, что powershell вы можете использоватьReceive-Job
и windows-powershellRemove-Job
так же, как если бы вы использовали powershellStart-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 получения дополнительной windows-powershell информации о заданиях PowerShell powershell см. about_Jobs.
powershell
Эквивалент Powershell амперсанда bash (&) для разветвления/запуска фоновых процессов
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.