SCOM通过PowerShell创建ClassInstance覆盖

时间:2018-06-13 18:17:06

标签: powershell scom system-center

此时我非常渴望得到帮助。由于某些配置问题(我不会详细介绍这个...我与它无关,我只是处理问题之后不得不使用SCOM ...)我迫切需要在SCOM中编写脚本覆盖,并且我已经碰壁了。

非常简短:我需要在磁盘(或单个对象实例)上设置覆盖。

在最终确定有一个ContextInstance参数之后,我需要指定对象实例引用,我觉得事情会变得更容易..但现在我不断收到错误:

  

使用“0”参数调用“AcceptChanges”的异常:“对象引用不是>设置为对象的实例。”

当我在ContextInstance中指定GUID时,不应该设置对象引用吗?我已经粘贴了下面的代码,因此您可以更好地了解我正在做什么/尝试做什么。我为看起来很糟糕的代码道歉,但我很着急,我只是在测试。

关于如何使这项工作的任何意见都非常高度(非常高!)赞赏!

break
$mps = Get-SCOMManagementPack | Out-GridView -PassThru
$overrideMp = Get-SCOMManagementPack | Out-GridView -PassThru

$monitor = $mps|Get-SCOMMonitor | Out-GridView -PassThru -Title "Get Monitor         
from $($mps.DisplayName)"

$overridableParameters = $monitor.GetOverrideableParameters()

$overridePropertyName = 'IntervalSeconds'
$overridePropertyValue = "500"

$class = Get-SCOMClass -Id $monitor.Target.Id
$disk = Get-SCOMClassInstance -Id "083e63d0-5937-6da7-e052-0dac0e712be4" |         
Select * 

$diskInstance = New-Object         
Microsoft.EnterpriseManagement.Configuration.ManagementPack

if($monitor.$overridePropertyName -ne $overridePropertyValue) {
    $overridname = $Monitor.name+".Override"

    $override = New-Object Microsoft.EnterpriseManagement.Configuration.ManagementPackMonitorConfigurationOverride($overrideMp,$overridname)
    $override.Monitor = $Monitor
    $override.Parameter = $overridePropertyName
    $override.Value = $overridePropertyValue
    $override.Context = Get-SCOMClass $disk.MonitoringClassIds
    $override.ContextInstance = $disk.Id
    $override.DisplayName = $overridname
    $override.Description = "Test OVR"
} Else {
    Write-Output "Override contains same value as current Monitor" 
}


Try {
    $overrideMP.AcceptChanges()
} Catch {
    "Catch"
    Write-Output $_.Exception.Message
}

1 个答案:

答案 0 :(得分:0)

想出来!

PowerShell编辑器似乎有一个奇怪的缓存,使它变得非常时髦......

上面的脚本实际上正在运行:)