2011-05-20 136 views
4

我有一個問題,我不能解決沒有幫助) 我有SCOM在第一臺PC,我有第二個SCOM代理。當我的課程在代理PC中發現時,它必須運行PowerShell腳本。此腳本包含命令:SCOM上的PowerShell無法導入模塊

導入模塊FailoverClusters

但此命令失敗,出現異常:

在加載擴展類型數據文件時出現以下錯誤: Microsoft.PowerShell,C:\ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ FailoverClusters \ FailoverClusters.Types.ps1xml:文件已跳過,因爲它已從「Microsoft.PowerShell」中出現。

我不知道該怎麼辦。

回答

3

由於this blog post指出,您可以忽略加載模塊時的擴展類型數據錯誤。它告訴你該類型已經加載,並且不能再次加載它。

+0

我在try-catch塊時如何忽略它? *也許*我可以使用Get-Modules或其他東西來編碼,但是-Force已經阻止了這種錯誤? – 2011-12-15 16:48:07

+1

您是否嘗試過:「-ErrorAction:SilentlyContinue」? – Winfred 2011-12-17 00:13:55

0

Powershell的腳本(GPO_Discovery.ps1)稱爲WriteErrorLine方法,以輸出如下的數據:

Import-Module : The following error occurred while loading the extended type data file: 

Microsoft.PowerShell,C:\ Windows \ System32下\ WindowsPowerShell \ V1.0 \模塊\ ActiveDirectory的\ ActiveDirectory.Types.ps1xml:文件已跳過,因爲它已經從「Microsoft.PowerShell」中出現。

如可以看出,我有嘗試運行同樣的問題:

Import-Module ActiveDirectory 
Import-Module GroupPolicy 

所以,我想:

Import-Module -Name ActiveDirectory -OutVariable $outAD -ErrorAction SilentlyContinue 
Import-Module -Name GroupPolicy -OutVariable $outGP -ErrorAction SilentlyContinue 

這些都不都有幫助。我即將嘗試刪除導入CMD-完全讓我們再試一次。如果這對我有效,我會發布。

1

解決方法:

我發現,與SCOM 2007 R2(尚未在SCOM 2012測試這一點),PowerShell的無法導入FailoverClusters模塊。我嘗試了這個建議來跳過這個錯誤。代理程序首次執行腳本時跳過。之後,腳本的後續執行將無法使用Get-Cluster cmdlet。無論何時重新啓動代理,它都會跳過該錯誤,並且該cmdlet可用,但隨後的執行無法加載該cmdlet。 提升的權限和無限制的腳本執行無助於解決問題。

定期重新啓動代理就是這樣一個大錘。我沒有娛樂它。

但是我確實發現,如果我使用輕量級腳本生成新的powershell實例並執行我的主代碼(文件保存在磁盤上或在磁盤上動態生成腳本),新鮮的powershell實例加載模塊每次都成功並且該cmdlet始終可用。

我知道有擔心,從另一個產生一個實例(如vbscript spawing powershell)有性能問題。但在我的情況下,我可以讓代理調用我的powershell包裝器,即時生成一個500行腳本(使用streamwriter進行perf),然後在新的PowerShell中生成包裝器。它全部在大約6秒內執行,其中包括查詢Get-ClusterResources。

我猜這是SCOM代理中的一個錯誤...