Powershell 后台任务

Powershell 后台任务

如何在 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

相关内容