Надеюсь, вы находитесь на версии 2 Powershell. Если это так, то вот как фоновая обработка работы:
Start-Job {Get-Process}
Это запустит работу в фоновом режиме. Если вы хотите взаимодействовать с заданием, просто назначьте его переменной:
$foo = Start-Job {Get-Process}
Теперь, конечно, хитрость приходит с знанием, когда работа сделана. Я понимаю, что это цель звонка, который вы положили в свой оригинальный пример. К сожалению, Powershell держит трубку до тех пор, пока вы не попросите результаты работы. Чтобы получить результаты работы, используйте командлет Receive-Job:
Receive-Job $foo
Меня интересует способ оповещения о завершении фоновой работы, поэтому я буду продолжать искать решение этой проблемы.
Ох, и для получения дополнительной информации:
Get-Help about_jobs
Итак, вот как получить звуковой сигнал по завершении. Во-первых, прочитайте это Получить уведомление, когда фоновое задание выполнено (кстати, это отличный ресурсный сайт). Я взял информацию там и добавил эту функцию в свой профиль:
function Register-JobWait{
param(
$Job
)
Register-ObjectEvent $job StateChanged -Action {
[Console]::Beep(1000,500)
$eventSubscriber | Unregister-Event
$eventSubscriber.Action | Remove-Job
} | Out-Null
}
Я также добавил псевдоним в свой профиль:
set-alias rjw Register-JobWait
так что теперь, если я хочу что-то сделать в фоновом режиме, я делаю это:
$foo = Start-Job {1..10 | Get-Process}
rjw $foo
Я жду звукового сигнала тогда:
Receive-Job $foo