如何在 Powershell 中执行后台任务?
$ ant >/dev/null & #cygwin
我在 Powershell 中能最接近实现的是
ps2> start-job {ant |out-null; `a} #powershell
但这样一来,我既得不到实时输出,也听不到蜂鸣声。我必须使用接收作业进行轮询,并在轮询 stdout 时听到蜂鸣声。
答案1
希望您使用的是 Powershell 版本 2。如果是,那么这是后台处理作业的方法:
Start-Job {Get-Process}
这将在后台运行该作业。如果你想与该作业交互,只需将其分配给一个变量:
$foo = Start-Job {Get-Process}
现在,当然,棘手之处在于知道工作何时完成。我意识到这就是您在原始示例中放置的铃铛的目的。不幸的是,Powershell 会保留管道,直到您请求作业的结果。要获取作业的结果,请使用 Receive-Job cmdlet:
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