此时我非常渴望得到帮助。由于某些配置问题(我不会详细介绍这个...我与它无关,我只是处理问题之后不得不使用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
}
答案 0 :(得分:0)
想出来!
PowerShell编辑器似乎有一个奇怪的缓存,使它变得非常时髦......
上面的脚本实际上正在运行:)