2013-07-17 77 views
2

我有一個powershell 2.0腳本,它應該在多個服務器上運行命令並處理輸出。 我想運行後臺作業中的每個服務器的命令和處理。在後臺作業中調用命令

的COMAND工作沒有任何問題,並在終止半秒或更少:

Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff } 

但是,當我在後臺作業運行此,作業不會終止:

Start-Job { Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff } } 

有人知道問題可能是什麼?

回答

4

看起來你應該做它的其他方式:

http://technet.microsoft.com/en-us/library/hh849698.aspx

要運行遠程計算機上的後臺作業,使用AsJob參數 上可用的許多cmdlet或使用Invoke-Command cmdlet至 在遠程計算機上運行Start-Job命令。欲瞭解更多信息,請登錄about_Remote_Jobs,查詢 。

+0

但這運行在遠程計算機上工作。我想在執行的計算機上運行作業,並在此作業中處理來自invoke-command的輸出。 – bones

+1

@bones我認爲效果是一樣的。 'Invoke-Command'應該啓動遠程機器上的作業並立即返回。你可以使用'Receive-Job -ComputerName'來獲得結果。 –

1

我更喜歡使用Start-Job運行invoke-command,以便我可以使用Get-Job在中央計算機上觀看和處理作業。

當我遍歷「遠程計算機列表」時,我使用「當前計算機名稱」作爲開始作業中的-Name參數,以便我可以單獨或作爲一組觀察每個作業。

只是我的經驗兩美分。

編輯示例:

$job = 
{ 
    $remoteJob = { ##Do Stuff Here } 
    Invoke-Command -ComputerName $args[0] -ScriptBlock $remoteJob 
} 
Start-Job -Name <jobName> -ScriptBlock $job -ArgumentList <remoteComputer> 

您關於爲什麼工作「無法完成」我根本就沒有其他的輸入,請確保您正在遠程運行代碼沒有真正結束的問題。

希望這有助於

0

這也將工作,至少在PowerShell中5

invoke-command -asjob -computer $PC -scriptblock { ## do stuff }