Необходимые исправления SCOM для Exchange MP не установлены.

ExchangeRequiredHotfixesNotInstalled (UnitMonitor)

Element properties:

TargetMicrosoft.SystemCenter.HealthService
Parent MonitorSystem.Health.AvailabilityState
CategoryCustom
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.TimedScript.TwoStateMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Не установлены критически важные исправления Operations Manager.
На этом сервере не установлены критически важные исправления, необходимые для надежной работы сервера Exchange Server 2010, и другие пакеты управления. Дополнительные сведения см. в соответствующей статье базы знаний. Используйте приведенную ссылку для загрузки необходимого исправления.
Для версии Operations Manager 2007 с пакетом обновления 1 (SP1) установите исправление в статье базы знаний № 971541 (http://go.microsoft.com/fwlink/?LinkID=167911).
Для версии Operations Manager 2007 R2 установите исправление в статье базы знаний № 974144 (http://go.microsoft.com/fwlink/?LinkID=167911)
RunAsDefault

Source Code:

<UnitMonitor ID="ExchangeRequiredHotfixesNotInstalled" Accessibility="Public" Enabled="true" Target="SC!Microsoft.SystemCenter.HealthService" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Windows!Microsoft.Windows.TimedScript.TwoStateMonitorType" ConfirmDelivery="false">
<Category>Custom</Category>
<AlertSettings AlertMessage="ExchangeRequiredHotfixesNotInstalled.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
</AlertSettings>
<OperationalStates>
<OperationalState ID="OperationalGoodState" MonitorTypeStateID="Success" HealthState="Success"/>
<OperationalState ID="OperationalProblemState" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>86400</IntervalSeconds>
<SyncTime/>
<ScriptName>HotFixValidation.vbs</ScriptName>
<Arguments/>
<ScriptBody><Script>


'====================================================================================================================
'This file checks if the required SCOM hotfixes for Exchange MP are installed on the RMS Server and the Agents.
'====================================================================================================================

Dim filesys, OpsMgrVersion, OpsMgrInstallDirectory, ScomHotFixStatus
Dim strHealthServiceDll, strDataAccessDll,healthServiceVersion, dataAccessVersion, hotfixVersion
Dim objMOMAPI, objBag, WshShell

'Set the desired hotfix version
Const SP1FileVersion = "6.0.6278.100"
Const R2FileVersion = "6.1.7221.2"
ScomHotFixStatus = "GOOD"

'=================
'Declare Constants
'=================
'OpsMgr Event-related Constants
Const EVENT_TYPE_ERROR = 1
Const EVENT_TYPE_WARNING = 2
Const EVENT_TYPE_INFORMATION = 4

'=================================
'Instantiate OpsMgr Scripting Runtime
'=================================
Set objMOMAPI = CreateObject("MOM.ScriptAPI")
Set objBag = objMOMAPI.CreateTypedPropertyBag(0)


Set filesys = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
OpsMgrVersion = WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup\CurrentVersion")
OpsMgrInstallDirectory = WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup\InstallDirectory")

strHealthServiceDll = OpsMgrInstallDirectory &amp; "\HealthService.dll"
strDataAccessDll = OpsMgrInstallDirectory &amp; "\Microsoft.EnterpriseManagement.DataWarehouse.DataAccess.dll"

If fileSys.FileExists(strHealthServiceDll) Then
healthServiceVersion = filesys.GetFileVersion(strHealthServiceDll)
Else
healthServiceVersion = -1
End If

If fileSys.FileExists(strDataAccessDll) Then
dataAccessVersion = filesys.GetFileVersion(strDataAccessDll)
Else
dataAccessVersion = -1
End If

'SP1 version of SCOM starts with 6.0 and R2 starts with 6.1
If (Left(OpsMgrVersion,3) = "6.0") Then
hotfixVersion = SP1FileVersion
kbLink = "http://go.microsoft.com/fwlink/?LinkID=167911"
ElseIf (Left(OpsMgrVersion,3) = "6.1") Then
hotfixVersion = R2FileVersion
kbLink = "http://go.microsoft.com/fwlink/?LinkID=167912"
End If

'If versioncompare function returns 2, the hotfix version is higher than the installed version
If healthServiceVersion &lt;&gt; "-1" Then
If 2 = VersionCompare(healthServiceVersion,hotfixVersion) Then
ScomHotFixStatus = "BAD"
End If
End If
if dataAccessVersion &lt;&gt; "-1" Then
If 2 = VersionCompare(dataAccessVersion,hotfixVersion) Then
ScomHotFixStatus = "BAD"
End If
End If
Call objBag.AddValue("State",ScomHotFixStatus)
Call objBag.AddValue("KB Link",kbLink)
Call objMOMAPI.Return(objBag)
wscript.quit()


'Version Compare Function
' This function returns 0 if the versions are the same,
' 1 if version1 is greater and
' 2 if version2 is greater.
Function VersionCompare(Version1, Version2)
Dim v1Count, v2Count, v1Element, v2Element
Dim v1Elements, v2Elements, smallerCount

VersionCompare = 0

v1Elements = Split(Version1, ".")
v2Elements = Split(Version2, ".")

' Determine number of version parts.
v1Count = UBound(v1Elements)
v2Count = UBound(v2Elements)

' Find which string has the fewest parts.
If (v2Count &lt; v1Count) Then
smallerCount = v2Count
Else
smallerCount = v1Count
End If

'Compare individual values of the version
For count = 0 To smallerCount
v1Element = CInt(v1Elements(count))
v2Element = CInt(v2Elements(count))
If v1Element &gt; v2Element Then
VersionCompare = 1
Exit Function
ElseIf v1Element &lt; v2Element Then
VersionCompare = 2
Exit Function
End If
Next

'Versions are same.
if(v1Count = v2Count) Then
Exit Function
Elseif (v1Count &gt; v2Count) Then
For count = v2Count To v1Count
If CInt(v1Elements(count)) &gt; 0 Then
VersionCompare = 1
Exit Function
End If
Next
Elseif (v2Count &gt; v1Count) Then
For count = v1Count To v2Count
If CInt(v2Elements(count)) &gt; 0 Then
VersionCompare = 2
Exit Function
End If
Next
End If
End Function

</Script></ScriptBody>
<TimeoutSeconds>60</TimeoutSeconds>
<ErrorExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='State']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">BAD</Value>
</ValueExpression>
</SimpleExpression>
</ErrorExpression>
<SuccessExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='State']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">GOOD</Value>
</ValueExpression>
</SimpleExpression>
</SuccessExpression>
</Configuration>
</UnitMonitor>