AKN544501

Monitor_AKN544501 (UnitMonitor)

An updated version of storport.sys is available

Knowledge Base article:

External

http://go.microsoft.com/fwlink/?LinkId=301269

Element properties:

TargetMicrosoft.KnowledgeServices.Exchange.2010.Server
Parent MonitorSystem.Health.ConfigurationState
CategoryAlert
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.KnowledgeServices.Library.PowerShellMonitorEx
RemotableTrue
AccessibilityPublic
Alert Message
An updated version of storport.sys is available
<Details>
<Content>An updated version of storport.sys is available. The updated version provides better performance and reliability over previous versions in certain configurations. Details are provided in Microsoft Knowledge Base article 2468345.</Content>
<CollectedInformation>
<Info>
<Name>Driver Name</Name>
<Value>{0}</Value>
</Info>
<Info>
<Name>Current Version</Name>
<Value>{1}</Value>
</Info>
</CollectedInformation>
</Details>
RunAsDefault
CommentSupportTopic=TBD;VersionNumber=1.0.0.0;

Source Code:

<UnitMonitor ID="Monitor_AKN544501" Comment="SupportTopic=TBD;VersionNumber=1.0.0.0;" Accessibility="Public" Enabled="true" Target="MicrosoftKnowledgeServicesExchange2010Library!Microsoft.KnowledgeServices.Exchange.2010.Server" ParentMonitorID="Health!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="KnowledgeServicesLibrary!Microsoft.KnowledgeServices.Library.PowerShellMonitorEx" ConfirmDelivery="true">
<Category>Alert</Category>
<AlertSettings AlertMessage="MonitorMessage0fa748ecd1c34d16b5ea56859fd990f6">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='DriverName']$</AlertParameter1>
<AlertParameter2>$Data/Context/Property[@Name='CurrentVersion']$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Success" MonitorTypeStateID="Success" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ScriptName>AKN544501.ps1</ScriptName>
<Parameters>
<Parameter>
<Name>ExServerVersionMajor</Name>
<Value>$Target/Host/Property[Type="MicrosoftKnowledgeServicesExchange2010Library!Microsoft.KnowledgeServices.Exchange.2010.Installation"]/SetupProductMajor$</Value>
</Parameter>
<Parameter>
<Name>OSVersionMajor</Name>
<Value>$Target/Host/Property[Type="MicrosoftKnowledgeServicesExchange2010Library!Microsoft.KnowledgeServices.Exchange.2010.Installation"]/OSVersionMajor$</Value>
</Parameter>
<Parameter>
<Name>OSVersionMinor</Name>
<Value>$Target/Host/Property[Type="MicrosoftKnowledgeServicesExchange2010Library!Microsoft.KnowledgeServices.Exchange.2010.Installation"]/OSVersionMinor$</Value>
</Parameter>
<Parameter>
<Name>OSVersionBuild</Name>
<Value>$Target/Host/Property[Type="MicrosoftKnowledgeServicesExchange2010Library!Microsoft.KnowledgeServices.Exchange.2010.Installation"]/OSVersionBuild$</Value>
</Parameter>
</Parameters>
<ScriptBody><Script>


param($ExServerVersionMajor,$OSVersionMajor,$OSVersionMinor,$OSVersionBuild)

$ErrorActionPreference = "Stop"

# Set up the arguments
$scriptargs = new-object psobject
$scriptargs | add-member NoteProperty "ExServerVersionMajor" $ExServerVersionMajor
$scriptargs | add-member NoteProperty "OSVersionMajor" $OSVersionMajor
$scriptargs | add-member NoteProperty "OSVersionMinor" $OSVersionMinor
$scriptargs | add-member NoteProperty "OSVersionBuild" $OSVersionBuild

# Set up the output
$global:scriptoutput = new-object psobject
$scriptoutput | add-member NoteProperty "HasIssue" $false
$scriptoutput | add-member NoteProperty "DriverName" ""
$scriptoutput | add-member NoteProperty "CurrentVersion" ""
#-----------------------------------------------------
# MAIN CODE SECTION
#-----------------------------------------------------

# Environment

$scriptenv = New-Object PSObject
$scriptenv | Add-Member -MemberType NoteProperty -Name ErrorFlag $null
$scriptenv | Add-Member -MemberType NoteProperty -Name HotfixVersion $null
$scriptenv | Add-Member -MemberType NoteProperty -Name HotfixVersion7600 $null
$scriptenv | Add-Member -MemberType NoteProperty -Name HotfixVersion7601 $null
$scriptenv | Add-Member -MemberType NoteProperty -Name OSArchitecture $null
$scriptenv | Add-Member -MemberType NoteProperty -Name DriverPath $null
$scriptenv | Add-Member -MemberType NoteProperty -Name CurrentVersion $null

# Helper functions

Function AdvisorRule($scriptargs, $scriptoutput)
{
# All parameters should be populated outside of the main function.
# The main function should only include the detection logic so that it can be easily reused by the Atlanta authoring tool.

Trap [Exception] {
$scriptenv.ErrorFlag = $true
Continue
}

# Initialize parameters
$scriptoutput.HasIssue = $false

$scriptenv.ErrorFlag = $false
$scriptenv.HotfixVersion7600 = "6.1.7600.20927"
$scriptenv.HotfixVersion7601 = "6.1.7601.21686"
$scriptenv.OSArchitecture = $Env:PROCESSOR_ARCHITECTURE
$scriptenv.DriverPath = Join-Path $Env:SystemRoot "System32\drivers\storport.sys"
$scriptenv.CurrentVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($scriptenv.DriverPath).ProductVersion

# Set parameter values


# Detection Logic
# Check if Exchange 2010 is run W2k8R2 (Exchange Server 2010)
If($scriptargs.ExServerVersionMajor -eq "14"){
# Check if Exchange 2010 is run W2k8R2 (Windows Server 2008 R2 (step1))
If($scriptargs.OSVersionMajor -eq "6" -and $scriptargs.OSVersionMinor -eq "1"){
# Check if Exchange 2010 is run W2k8R2 (Windows Server 2008 R2 (step2))
If($scriptenv.OSArchitecture -ne "x86"){
If($scriptargs.OSVersionBuild -eq "7600"){
$scriptenv.HotfixVersion = $scriptenv.HotfixVersion7600
}
ElseIf($scriptargs.OSVersionBuild -eq "7601"){
$scriptenv.HotfixVersion = $scriptenv.HotfixVersion7601
}
# If the HotFix not applied
If([Version]($scriptenv.CurrentVersion) -lt [Version]($scriptenv.HotfixVersion)){
$scriptoutput.DriverName = $scriptenv.DriverPath
$scriptoutput.CurrentVersion = $scriptenv.CurrentVersion

If($scriptenv.ErrorFlag -ne $true){
#Raise Alert
$scriptoutput.HasIssue = $true
}
}
}
}
}

}
AdvisorRule $scriptargs $scriptoutput

# set the output
$mom = new-object -comobject "MOM.ScriptAPI"
$bag = $mom.CreatePropertyBag()

if ($scriptoutput.HasIssue -ne $null)
{
$bag.AddValue("HasIssue", $scriptoutput.HasIssue)
}

if ($scriptoutput.DriverName -ne $null)
{
$bag.AddValue("DriverName", $scriptoutput.DriverName)
}

if ($scriptoutput.CurrentVersion -ne $null)
{
$bag.AddValue("CurrentVersion", $scriptoutput.CurrentVersion)
}

$bag

</Script></ScriptBody>
<SnapIns>
<SnapIn>Microsoft.Exchange.Management.PowerShell.E2010</SnapIn>
</SnapIns>
<TimeoutSeconds>300</TimeoutSeconds>
<Schedule>86379</Schedule>
<ErrorExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Boolean">Property[@Name='HasIssue']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="Boolean">true</Value>
</ValueExpression>
</SimpleExpression>
</ErrorExpression>
<SuccessExpression>
<Not>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Boolean">Property[@Name='HasIssue']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="Boolean">true</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</Not>
</SuccessExpression>
</Configuration>
</UnitMonitor>