Percent Memory Used Module Type

Microsoft.Windows.Server.10.0.OperatingSystem.PercentMemoryUsed.ModuleType (DataSourceModuleType)

Data Source module type for collecting amount of used physical memory.

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
OutputTypeSystem.Performance.Data

Member Modules:

ID Module Type TypeId RunAs 
PerfDS DataSource System.Performance.OptimizedDataProvider Default
ScriptDS ProbeAction Microsoft.Windows.Server.10.0.PowerShellPropertyBagProbe Default
IsNullCD ConditionDetection System.ExpressionFilter Default
PerfMapper ConditionDetection System.Performance.DataGenericMapper Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
Toleranceint$Config/Tolerance$ToleranceTolerance
Frequencyint$Config/Frequency$Interval secondsHow frequently (in seconds) the value should be sampled.
NumOfSamplesint$Config/MaximumSampleSeparation$Number of SamplesNumber of Samples

Source Code:

<DataSourceModuleType ID="Microsoft.Windows.Server.10.0.OperatingSystem.PercentMemoryUsed.ModuleType" Accessibility="Public" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="PhysicalMemory" type="xsd:double"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Tolerance" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Frequency" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="MaximumSampleSeparation" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="Tolerance" Selector="$Config/Tolerance$" ParameterType="int"/>
<OverrideableParameter ID="Frequency" Selector="$Config/Frequency$" ParameterType="int"/>
<OverrideableParameter ID="NumOfSamples" Selector="$Config/MaximumSampleSeparation$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="PerfDS" TypeID="SystemPerf!System.Performance.OptimizedDataProvider">
<CounterName>Available MBytes</CounterName>
<ObjectName>Memory</ObjectName>
<InstanceName/>
<AllInstances>false</AllInstances>
<Frequency>$Config/Frequency$</Frequency>
<Tolerance>$Config/Tolerance$</Tolerance>
<ToleranceType>Absolute</ToleranceType>
<MaximumSampleSeparation>$Config/MaximumSampleSeparation$</MaximumSampleSeparation>
</DataSource>
<ProbeAction ID="ScriptDS" TypeID="Microsoft.Windows.Server.10.0.PowerShellPropertyBagProbe">
<ScriptName>Microsoft.Windows.Server.OperatingSystem.PercentMemoryUsed.ps1</ScriptName>
<PSparam>param ($nAvailableMBytes, $nPhysicalMemoryKBytes)</PSparam>
<ScriptBody><Script>
#Copyright (c) Microsoft Corporation. All rights reserved.

#*************************************************************************
# $ScriptName: "Microsoft.Windows.Server.OperatingSystem.PercentMemoryUsed"$
#
#
# $File: Microsoft.Windows.Server.OperatingSystem.PercentMemoryUsed.ps1$
#*************************************************************************

# Parameters that should be passed to this script
# 0 Available Physical memory MBytes.
# 1 Total amount of Physical Memory in KBytes.

$sCounterName = "PercentMemoryUsed"
$sObjectName = "Memory"

Function Main()
{
$sErrorDescription = "Invalid arguments are detected: " + $nAvailableMBytes + " " + $nPhysicalMemoryKBytes
$dblAvailableMBytes = $nAvailableMBytes -as [double]
$dblPhysicalMemoryKBytes = $nPhysicalMemoryKBytes -as [double]

if (($dblAvailableMBytes -eq $null) -or ($dblPhysicalMemoryKBytes -eq $null))
{
ThrowScriptError $sErrorDescription $null
}

$dblPhysicalMemoryMBytes = $dblPhysicalMemoryKBytes / 1024

if ($dblAvailableMBytes -gt 0)
{
if ($dblAvailableMBytes -ge $dblPhysicalMemoryMBytes)
{
ThrowScriptError $sErrorDescription $null
}

$oBag = $momAPI.CreateTypedPropertyBag(2)

$nResult = [double](100 - ($dblAvailableMBytes/$dblPhysicalMemoryMBytes)*100)

$oBag.AddValue("PerfCounter", $sCounterName)
$oBag.AddValue("PerfValue", $nResult)

$oBag
}
}

Main
</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>nAvailableMBytes</Name>
<Value>$Data/Value$</Value>
</Parameter>
<Parameter>
<Name>nPhysicalMemoryKBytes</Name>
<Value>$Config/PhysicalMemory$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
<ConditionDetection ID="PerfMapper" TypeID="SystemPerf!System.Performance.DataGenericMapper">
<ObjectName>Memory</ObjectName>
<CounterName>$Data/Property[@Name='PerfCounter']$</CounterName>
<InstanceName/>
<Value>$Data/Property[@Name='PerfValue']$</Value>
</ConditionDetection>
<ConditionDetection ID="IsNullCD" TypeID="System!System.ExpressionFilter">
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">/DataItem/IsNull</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">false</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</ConditionDetection>
</MemberModules>
<Composition>
<Node ID="PerfMapper">
<Node ID="ScriptDS">
<Node ID="IsNullCD">
<Node ID="PerfDS"/>
</Node>
</Node>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>SystemPerf!System.Performance.Data</OutputType>
</DataSourceModuleType>