2011-03-24 115 views
6

在腳本中使用Invoke-WmiMethod遇到問題,該腳本在針對某些計算機運行時會掛起。我想要做的就是執行這個命令,如果它沒有在規定的時間內返回(比如說60到120秒),那麼繼續前進(將救援日誌記錄到一個文件中。)我現在知道的唯一方法嘗試這樣做是使用-AsJob參數;但是,當我嘗試時,生成的作業立即失敗(即使對於Invoke-WmiMethod語句在沒有添加-AsJob參數的情況下工作的計算機)。其他與WMI相關的cmdlet確實可以針對這些問題機器工作,所以我認爲它不是一個驗證或DCOM問題。執行語句超時?

不管怎麼說,有沒有其他方法可以在腳本中設置語句的超時時間,我可以試試?

回答

3

嗯,不知道爲什麼Invoke-WmiMethod失敗,但也許Invoke-Command將工作(值得一快試試我猜),例如:

$job = Invoke-Command -cn $computers { Invoke-WmiMethod ... } -AsJob 
Wait-Job $job -Timeout 60 

這並假定你已經啓用了遠程處理上的所有遠程計算機,他們正在運行PowerShell 2.0。如果在Vista/Windows 7上,或者在XP上以管理員身份運行,請確保您從提升的提示符運行。

+0

最後在掛起'Invoke-WmiMethod'語句時出錯 - 'Invoke-WmiMethod:遠程過程調用失敗。 (從HRESULT異常:0x800706BE)' - 所以將不得不看看。我在所有目標PC上都沒有PS/WinRM 2.0,所以對我來說這不是一個真正的選擇。 – 2011-03-24 21:11:37