我可以在ScheduledJob中使用Start-Job嗎?無法重複接收作業中的輸出
下面是故事:我使用的是從,Remoting和Runspaces的.Net類在我的應用程序內部使用PowerShell Remoting。 我運行了一個腳本,在遠程主機上創建了一個ScheduledJob,它使用Hyper-V做了一些基本的工作,比如Restart-Vm
。該操作本身按預期執行,就像我已經在此遠程主機上的控制檯中運行一樣。
雖然有一個區別 - 如果我把它放到控制檯,我會立即得到操作結果。例如,如果虛擬機處於禁用狀態,則會收到'虛擬機處於當前狀態時無法執行操作'。在SJ的情況下,當某些SJ觸發器被激活並且SJ運行時,我無法在收到它之後立即得到我的Restart-Vm
命令的結果。相反,我必須檢查在SJ被觸發時創建的相應BackgroundJob,並檢查其狀態並接收其結果。這是不正常的,因爲我的應用程序必須將這種事件寫入遠程機器上的EventLog。即使Restart-Vm
操作不成功,也不會引發異常,並且我無法在預定作業的正文中寫入EventLog。
我認爲解決方案可能是這樣的:在預定作業內部創建一個新作業,使這個作業執行目標動作,並將一個處理程序綁定到該作業的狀態更改事件,該作業將寫入EventLog。
然而,當我實現這個
Start-Job -ScriptBlock { params($guid) Get-Vm $guid | Restart-Vm -Force; } -ArgumentList $id;
失敗。以下是它發生的情況:SJ被解僱,相應的Job被創建,我檢查它的狀態 - 它是Completed,它是HasMoreData
。當我做Receive-Job
我得到這個錯誤
Receive-Job : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:8
+ $res | receive-job
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (System.Manageme...n.PSRemotingJob:PSObject) [Receive-Job], ParameterBindingEx
ception
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.ReceiveJobCommand
我試着-AsJob
開關運行Restart-Vm
行動,傳遞憑據,但沒有任何工程。
UPDATE 2015年6月5日
其實,這個問題從我的需要,以便捕獲Restart-Vm
拋出的異常出現。我直到最近才意識到的事實是,當調用Restart-Vm
時,我必須指定-ErrorAction Stop
或-ErrorVariable
參數,以便我可以控制其執行。因此,再也不需要像嵌套工作那樣的黑客了。
你如何獲得'$ res'? –
$ res是從我的預定作業發起的作業中收到的數據,也是一份工作。它的狀態是'跑步'。我檢索它:$ res = Get-Job |接收-工作。而且我確保只有一份由Get-Job返回的工作 - 剛剛開始的工作。 –
我不認爲你可以'Receive-Job'兩次 –