Veeam.Virt.Extensions.VMware.Monitoring.VMDiskFreePct.ScriptProbe (ProbeActionModuleType)

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
InputTypeSystem.BaseData
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
DiskFreeScriptProbe ProbeAction Microsoft.Windows.ScriptPropertyBagProbe Default

Source Code:

<ProbeActionModuleType ID="Veeam.Virt.Extensions.VMware.Monitoring.VMDiskFreePct.ScriptProbe" Accessibility="Internal" Batching="false" PassThrough="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="vmName" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="excludeDisks" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="freePctThreshold" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="diskNames" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="freePctValues" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="freeMBValues" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="DiskFreeScriptProbe" TypeID="Windows!Microsoft.Windows.ScriptPropertyBagProbe">
<ScriptName>DiskFree.js</ScriptName>
<Arguments>"$Config/vmName$" "$Config/excludeDisks$" $Config/freePctThreshold$ "$Config/diskNames$" "$Config/freePctValues$" "$Config/freeMBValues$"</Arguments>
<ScriptBody><Script>//vDiskFreePct.js
var ARGUMENT_COUNT = 6;

if (WScript.Arguments.length != ARGUMENT_COUNT) {
WScript.Quit(0);
}

var vmName = WScript.Arguments(0);
var excludeDisks = WScript.Arguments(1);
var freePctThreshold = convertArg(WScript.Arguments(2));
var diskNames = WScript.Arguments(3);
var freePctValues = WScript.Arguments(4);
var freeMBValues = WScript.Arguments(5);

var momApi = new ActiveXObject("MOM.ScriptAPI");
var bag = momApi.CreatePropertyBag();
var dict = new ActiveXObject("Scripting.Dictionary");
var extDict = new ActiveXObject("Scripting.Dictionary");
var keys = new Array();

var diskArray = diskNames.split(",");
var pctArray = freePctValues.split(",");
var mbArray = freeMBValues.split(",");

if ((diskArray.length != pctArray.length) || (diskArray.length != mbArray.length)) {
WScript.echo("Problem matching disk names and disk usage values");
WScript.Quit(0);
}

var z = diskArray.length - 1;
var i = 0;
for (i = 0; i &lt; z; i++) {
dict.Add(diskArray[i], pctArray[i]);
extDict.Add(diskArray[i], mbArray[i]);
keys.push(diskArray[i]);
}

keys.sort(function (a, b) {
var avalue = parseFloat(dict.Item(a));
var bvalue = parseFloat(dict.Item(b));
return avalue &lt; bvalue ? -1 : avalue &gt; bvalue ? 1 : 0;
});

var msgTxt = "The virtual machine " + vmName + " has a disk space issue. One or more disk partitions has breached the threshold for free % remaining.\r\n\r\n";
msgTxt += "The disk partitions breaching threshold are:\r\n";
msgTxt += "Drive Name - Free space %\r\n";

for (i = 0; i &lt; keys.length; i++) {
if ((dict.Item(keys[i]) &lt; freePctThreshold) &amp;&amp; !(excludeDisks.indexOf(keys[i]) &gt;= 0)) {
msgTxt += keys[i] + " - " + dict.Item(keys[i]) + "%\r\n";
}
}

bag.AddValue("AlertDescription", msgTxt);
momApi.Return(bag);


function isNumber(n) {
return !isNaN(parseFloat(n)) &amp;&amp; isFinite(n);
}

function isInt(n) {
return n % 1 === 0;
}

function convertArg(a) {
var replaced = false;
if (a.indexOf(',') &gt; 0) {
var b = a.replace(',', '.');
replaced = true;
} else {
b = a;
}

if (isNumber(b)) {
if (!isInt(b)) {
b = Math.round(b * 100) / 100;
} else {
b = parseInt(b);
}
}

if (replaced) {
b = (b + "").replace('.', ',');
}

return b;
}</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="DiskFreeScriptProbe"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>