启动powershell作业以运行在后台保持打开的进程

时间:2015-02-04 17:50:35

标签: powershell

请注意,虽然这篇文章询问了coffeescript.cmd,但我不认为答案与它有任何关系,但更多的是误解了powershell的工作系统。


所以编译和观看coffeescript我可以打电话

> coffee.cmd -cw ./scripts

将启动coffeescript流程。由于w监视标志,进程将保持打开状态并重新编译任何更改,直到我 Ctrl + c

我想要的是开始这个​​过程,但让它在后台运行,以便我可以继续使用我的控制台(是的,我知道我可以有多个控制台)。理想情况下,该作业的任何输出都会在发生时推送到我的控制台。

所以我认为我可以做到这一点

> start-job { coffee.cmd -cw .\scripts }
Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
3      Job3            BackgroundJob   Running       True            localhost             coffee.cmd -cw .\scripts

不幸的是,似乎a)吞下所有输出,更重要的是b)立即完成并且不留下看我的目录

宽:\浪涌\鬼>得到-工作

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
3      Job3            BackgroundJob   Completed     False           localhost             coffee.cmd -cw .\scripts

请注意,我知道this post,但正如我所证明的那样,即使我Recieve-Job,我似乎也无法保持开放。

发生了什么事?工作不是正确的工具吗?启动在后台等待的进程的正确方法是什么?如何将输出重定向到我的控制台。

1 个答案:

答案 0 :(得分:1)

由于@MickyBalladelli的评论,我设法弄清了部分内容。就是这个

start-job { Get-Location } | Receive-Job -Wait

返回〜/ Documents。啊哈!所以相对路径不起作用。当我做的时候

Start-Job { coffee.cmd -cw w:\absoltue\path\to\scripts }

作业 仍在运行,并将在后台编译内容。当然结果(compliation成功和错误)不会流式传输到我的控制台。为此,我需要明确调用Get-Job | Receive-Job

这很令人讨厌,但距离我真正想要的东西又近了一步。