SCOM上的PowerShell无法导入模块

时间:2011-05-20 12:41:21

标签: powershell module

我有一个问题,如果没有帮助我无法解决) 我在第一台PC上有SCOM,第二台我有SCOM代理。当我的课程在代理PC中发现时,它必须运行PowerShell脚本。该脚本包含命令:

导入模块FailoverClusters

但是此命令失败,异常:

加载扩展类型数据文件时发生以下错误: Microsoft.PowerShell,C:\ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ FailoverClusters \ FailoverClusters.Types.ps1xml:文件被跳过,因为它已经存在于“Microsoft.PowerShell”中。

我不知道该怎么做。

3 个答案:

答案 0 :(得分:3)

this blog post所述,您可以在加载模块时忽略扩展类型数据错误。它告诉你该类型已经加载,并且无法再次加载它。

答案 1 :(得分:1)

替代方法:

我发现使用SCOM 2007 R2(尚未在SCOM 2012上测试过),powershell无法导入FailoverClusters模块。我尝试了建议跳过错误。跳过第一次代理执行脚本时起作用。之后,后续执行的脚本无法使Get-Cluster cmdlet可用。每当您重新启动代理时,它都会跳过错误并且cmdlet可用,但后续执行无法加载cmdlet。 提升的权限和不受限制的脚本执行无助于解决问题。

定期重新启动代理是一个大锤。我没有接受它。

但是我确实发现,如果我使用轻量级脚本生成一个新的PowerShell实例并执行我的主代码(保存在磁盘上的文件或在磁盘上生成脚本),那么新的powershell实例加载了模块每次都成功成功并且cmdlet始终可用。

我知道有人担心从另一个实例中产生一个实例(比如vbscript spawing powershell)会出现性能问题。但在我的情况下,我能够让代理调用我的powershell包装器,动态生成500行脚本(使用streamwriter for perf),然后在包装器的新PowerShell中生成它。这一切都在大约6秒内完成,其中包括查询Get-ClusterResources。

我猜这是SCOM代理中的一个错误......

答案 2 :(得分: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 \ Modules \ 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-Let并重试。如果这对我有用,我会发帖。