2011-05-20 85 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代理中的一个错误...