Пока команда является исполняемым или файл, который имеет соответствующий исполняемый файл, используйте Start-Process (доступный от v2):
Start-Process -NoNewWindow ping google.com
Вы также можете добавить это как функцию в свой профиль:
function bg() {Start-Process -NoNewWindow @args}
, а затем вызов становится:
bg ping google.com
На мой взгляд, Start-Job является излишеством для простого использования при запуске процесса в фоновом режиме:
- Start-Job не имеет доступа к существующему объему (поскольку он выполняется в отдельном сеансе). Вы не можете выполнить «Start-Job {notepad $ myfile}»
- Start-Job не сохраняет текущий каталог (поскольку он запускается в отдельном сеансе). Вы не можете выполнить «Start-Job {notepad myfile.txt}», где myfile.txt находится в текущем каталоге.
- Выход не отображается автоматически.Вам необходимо запустить Receive-Job с идентификатором задания в качестве параметра.
ПРИМЕЧАНИЕ. Что касается вашего первоначального примера, «bg sleep 30» не будет работать, потому что сон - это командный файл Powershell. Start-Process работает только тогда, когда вы фактически выполняете процесс.
Эти решения, похоже, не работают с Windows 7. – Marcin 2011-05-22 10:07:43
@Marcin - этот ответ был с 2008 года. В Windows 7, powershell 2.0 является RTM и имеет командлет «start-job» для фоновых заданий. – x0n 2011-06-23 20:39:27
Не на моей Windows 7 это не так. – Marcin 2011-06-23 21:24:46