2008-10-09 49 views

回答

29

的幾個回答這個問題。

  1. 你不能輕易做它在版本1
  2. 版本2(現在在社區技術預覽版2)確實有這個功能,它被稱爲工作(原PSJob)。查找更多關於這個herehere
  3. 你實際上可以做到the hard way v1,隨時可以擁有它,但我從來沒有打擾過。
+0

這些解決方案似乎不適用於Windows 7. – Marcin 2011-05-22 10:07:43

+4

@Marcin - 這個答案來自2008年。在Windows 7中, powershell 2.0是RTM,並具有用於後臺作業的「start-job」cmdlet。 – x0n 2011-06-23 20:39:27

+0

沒有在我的Windows 7上沒有。 – Marcin 2011-06-23 21:24:46

17
ps2> start-job {start-sleep 20} 

我還沒有想出如何實時獲得標準輸出,啓動工作要求你輪詢標準輸出與GET-工作

更新:我無法啓動的工作,輕鬆地做我想要哪個基本上是bash &運營商。這裏是我最好的黑客迄今

PS> notepad $profile #edit init script -- added these lines 
function beep { write-host `a } 
function ajp { start powershell {ant java-platform|out-null;beep} } #new window, stderr only, beep when done 
function acjp { start powershell {ant clean java-platform|out-null;beep} } 
PS> . $profile #re-load profile script 
PS> ajp 
11

似乎傳遞給Start-Job腳本塊不以相同的當前目錄爲Start-Job命令執行的,所以一定要確保,如果需要指定完全合格的路徑。

例如:

Start-Job { C:\absolute\path\to\command.exe --afileparameter C:\absolute\path\to\file.txt } 
76

只要命令是可執行文件或具有相關聯的可執行文件,使用啓動過程(可從V2):

Start-Process -NoNewWindow ping google.com 

您還可以在個人資料中添加以下功能:

function bg() {Start-Process -NoNewWindow @args} 

,然後調用變爲:

bg ping google.com 

在我看來,啓動作業是在後臺運行的進程的簡單的例子矯枉過正:

  1. 啓動工作不能訪問到您現有的範圍(因爲它在一個單獨的會話中運行)。您不能執行「Start-Job {notepad $ myfile}」
  2. Start-Job不會保留當前目錄(因爲它在單獨的會話中運行)。您不能執行「Start-Job {notepad myfile.txt}」,其中myfile.txt位於當前目錄中。
  3. 輸出不會自動顯示。您需要以作業的ID作爲參數運行Receive-Job。

注意:關於您的初始示例,「bg sleep 30」不起作用,因爲睡眠是Powershell命令行開關。只有當您實際分叉進程時,啓動過程才起作用。

5

您可以使用PowerShell作業cmdlet來實現您的目標。

在PowerShell中有6個與作業相關的cmdlet可用。

  • GET-工作
    • 獲取在當前會話
  • 運行Windows PowerShell後臺作業接收在職
    • 獲取的Windows PowerShell後臺作業的結果當前會議
  • 刪除-工作
    • 刪除Windows PowerShell後臺作業
  • 啓動工作
    • 啓動Windows PowerShell後臺作業
  • 停止,工作
    • 停止Windows PowerShell後臺作業
  • 等待工作
    • 禁止顯示命令提示符,直到一個或所有會話運行的Windows PowerShell後臺作業完成

如果感興趣的話,你可以下載樣品How to create background job in PowerShell