Veeam vSphere VM Snapshot Metadata Discovery Rule

Veeam.Virt.Extensions.VMware.Report.DataSet.VMSnapshotDiscoveryRule (Rule)

This rule collects extended metadata about Virtual Machine snapshot configuration into the corresponding Veeam Dataset

Knowledge Base article:

Summary

This rule collects snapshot metadata. If you disable the rule, the 'Virtual Machines Snapshot Summary' report will not work.

External

See the Help Center for more information including reference lists of all Rules and Monitors and full set of User Guides for the Veeam MP for VMware.

See the VMware Online Documentation for more information on VMware vSphere, in particular:

Element properties:

TargetVeeam.Virt.Extensions.VMware.Collector
CategoryEventCollection
EnabledTrue
Alert GenerateFalse
RemotableTrue

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Veeam.Virt.Extensions.VMware.ScriptDatasource.Dataset.PropertyBag Default
WriteAction WriteAction Veeam.Virt.Extensions.VMware.DW.WA.XmlBulkInsertModule Default

Source Code:

<Rule ID="Veeam.Virt.Extensions.VMware.Report.DataSet.VMSnapshotDiscoveryRule" Target="VVEVB!Veeam.Virt.Extensions.VMware.Collector" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="Veeam.Virt.Extensions.VMware.ScriptDatasource.Dataset.PropertyBag">
<IntervalSeconds>86400</IntervalSeconds>
<SyncTime>07:00</SyncTime>
<ScriptName>MPVMSnapshotDiscovery.js</ScriptName>
<Arguments>"U" "$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$"</Arguments>
<ScriptBody><Script>var _argumentsCount = 2;

var _eventId = 3203;
var _momApi = new ActiveXObject("MOM.ScriptAPI");

var _stage = null;
var _collector = null;

Main();

function Main() {
try {
var associativeArray = {};
SetGlobalVarsFromArguments();
var pBag = _momApi.CreatePropertyBag();
_momApi.LogScriptEvent("MPVMSnapshotDiscovery.Main", _eventId, 0, "MPVMSnapshotDiscovery begin");
var query = "SELECT " + " createTime," +
" description," +
" entityId," +
" size," +
" vmName," +
" vmSnapshotId," +
" vmSnapshotName, " +
" vmId " +
" FROM VMSnapshotStats" +
" WHERE size &lt;&gt; 0";
var result = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\nworks").ExecQuery(query);
var backupSize = 0;
var className = "Veeam.Virt.Extensions.VMware.VMSnapshot";
var classDisplayName = "VMware vSphere VMSnapshot";
var Myshell = new ActiveXObject("WScript.Shell");
var count = 0;
associativeArray["collector"] = "p0";
var pBagMap = _momApi.CreatePropertyBag();
var pBagDefMap = _momApi.CreatePropertyBag();
var pdict = "";
pdict = pdict + "&lt;pn key=\"" + associativeArray["collector"] + "\"" + " value=\"collector\"/&gt;";
var pr = 1;
if (result.count == 0) {
var checkquery = "SELECT * FROM VMSnapshotStats WHERE size = 0";
var checkresult = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\nworks").ExecQuery(checkquery);
if (checkresult.count == 0) {
var propertyDN = "";
var property = "";
var pBag = _momApi.CreatePropertyBag();
pBag.AddValue("TSName", className);
pBag.AddValue("TDName", classDisplayName);
pBag.AddValue("SName", "fakeVm");
pBag.AddValue("DName", "fakeVm");
pBag.AddValue("SD", _stage);
pdict = pdict + "&lt;pn key=\"" + associativeArray["collector"] + "\"" + " value=\"collector\"/&gt;";
propertyDN = propertyDN + "&lt;pndn key=\"p0\"" + " value=\"collector\"/&gt;";
property = property + "&lt;p k=\"p0\" &gt;" + _collector + "&lt;/p&gt;";
pBag.AddValue("property", property);
_momApi.AddItem(pBag);
}
else {
var propertyDN = "";
var property = "";
var pBag = _momApi.CreatePropertyBag();
pBag.AddValue("TSName", className);
pBag.AddValue("TDName", classDisplayName);
pBag.AddValue("SName", "fakeVm");
pBag.AddValue("DName", "fakeVm");
pBag.AddValue("SD", "DeleteSnapshotsByVM");
pdict = pdict + "&lt;pn key=\"" + associativeArray["collector"] + "\"" + " value=\"collector\"/&gt;";
propertyDN = propertyDN + "&lt;pndn key=\"p0\"" + " value=\"collector\"/&gt;";
property = property + "&lt;p k=\"p0\" &gt;" + _collector + "&lt;/p&gt;";
pBag.AddValue("property", property);
_momApi.AddItem(pBag);
}
}
else {
for (var Repository = new Enumerator(result); !Repository.atEnd(); Repository.moveNext()) {
var objectSystemName = GetCollectrionItem(Repository, "entityId");
var objectDisplayName = GetCollectrionItem(Repository, "entityId");
var vpower = Repository.item();
var vPowerProps = new Enumerator(vpower.Properties_);

var pBag = _momApi.CreatePropertyBag();
pBag.AddValue("TSName", className);
pBag.AddValue("TDName", classDisplayName);
pBag.AddValue("SName", objectSystemName);
pBag.AddValue("DName", objectDisplayName);
pBag.AddValue("SD", _stage);
var property = "";
var propertyDN = "";
for (; !vPowerProps.atEnd(); vPowerProps.moveNext()) {
var p = vPowerProps.item();
if (count == 0) {
if (p.Name != "") {
associativeArray[p.Name] = "p" + pr;
pdict = pdict + "&lt;pn key=\"" + associativeArray[p.Name] + "\"" + " value=\"" + p.Name + "\"/&gt;";
propertyDN = propertyDN + "&lt;pndn key=\"" + p.Name + "\"" + " value=\"" + p.Name + "\"/&gt;";
pr++;
}
}
property = property + "&lt;pr&gt;&lt;p k=\"" + associativeArray[p.Name] + "\" &gt;&lt;" + "![CDATA[" + p.Value + "]]" + "&gt;&lt;/p&gt;&lt;/pr&gt;"; //cdata have this "style" in script, because script will covered by cdata when mp build
}
property = property + "&lt;pr&gt;&lt;p k=\"" + "p0" + "\" &gt;&lt;" + "![CDATA[" + _collector + "]]" + "&gt;&lt;/p&gt;&lt;/pr&gt;";
count = count + 1;
pBag.AddValue("property", property);
_momApi.AddItem(pBag);

}
}
pBagMap.AddValue("PnDictionary", pdict);
pBagDefMap.AddValue("PDnDictionar", propertyDN);
_momApi.AddItem(pBagMap);
_momApi.AddItem(pBagDefMap);

_momApi.LogScriptEvent("MPVMSnapshotDiscovery.Main", _eventId, 0, "MPVMSnapshotDiscovery end");
_momApi.ReturnItems();


} catch (e) {
var propertyDN = "";
var property = "";
var pBag = _momApi.CreatePropertyBag();
pBag.AddValue("TSName", className);
pBag.AddValue("TDName", classDisplayName);
pBag.AddValue("SName", "fakeVm");
pBag.AddValue("DName", "fakeVm");
pBag.AddValue("SD", _stage);
pdict = pdict + "&lt;pn key=\"" + associativeArray["collector"] + "\"" + " value=\"collector\"/&gt;";
propertyDN = propertyDN + "&lt;pndn key=\"p0\"" + " value=\"collector\"/&gt;";
property = property + "&lt;p k=\"p0\" &gt;" + _collector + "&lt;/p&gt;";
pBag.AddValue("property", property);
_momApi.AddItem(pBag);
_momApi.LogScriptEvent("MPVMSnapshotDiscovery.Main", _eventId, 2, e.message);
_momApi.ReturnItems();
}
}

function GetCollectrionItem(collection_in, plropery_in) {
var vpower = collection_in.item();
var vPowerProps = new Enumerator(vpower.Properties_);
for (; !vPowerProps.atEnd(); vPowerProps.moveNext()) {
var p = vPowerProps.item();
if (p.Name == plropery_in) {
return p.Value;
}
}
return null;
}

function SetGlobalVarsFromArguments() {
if (WScript.Arguments.length != _argumentsCount) {
_momApi.LogScriptEvent("MPVMSnapshotDiscovery", _eventId, 2, 'MPVMSnapshotDiscovery.SetGlobalVarsFromArguments error');
}
_stage = WScript.Arguments(0);
_collector = WScript.Arguments(1);
}</Script></ScriptBody>
<SecureInput/>
<TimeoutSeconds>3600</TimeoutSeconds>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WriteAction" Target="MSDL!Microsoft.SystemCenter.DataWarehouseConnectorServer" TypeID="Veeam.Virt.Extensions.VMware.DW.WA.XmlBulkInsertModule">
<spname>VeeamMP.FullDiscovery</spname>
</WriteAction>
</WriteActions>
</Rule>