Veeam Backup Enterprise Manager Server Properties Discovery

Veeam.Backup.EnterpriseManagerProperties.Discovery (Discovery)

This discovery rule set the properties of Veeam Backup Enterprise Manager Server object.

Knowledge Base article:

Summary

This rule is used to discover (create) instances of MP for Veeam Backup & Replication objects in Operations Manager.

These discovery rules will insert objects such as Veeam Backup Enterprise Manager, Veeam backup servers, backup proxies, backup repositories, WAN accelerators.

This discovery will create objects in Operations Manager which may be essential for MP for Veeam Backup & Replication functionality and should not be disabled or modified unless advised by Veeam support.

External

Refer to the Microsoft System Center Online Documentation for more information on Operations Manager features such as discoveries. Refer to the MP for Veeam Backup & Replication Documentation for more details on advanced MP functionality.

Element properties:

TargetVeeam.Backup.EnterpriseManager
EnabledTrue
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS1 DataSource Veeam.Backup.ScriptDatasource.Discovery Default

Source Code:

<Discovery ID="Veeam.Backup.EnterpriseManagerProperties.Discovery" Enabled="true" Target="Veeam.Backup.EnterpriseManager" ConfirmDelivery="false" Remotable="false" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Veeam.Backup.EnterpriseManager">
<Property TypeID="Veeam.Backup.EnterpriseManager" PropertyID="Version"/>
<Property TypeID="Veeam.Backup.EnterpriseManager" PropertyID="URL"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS1" TypeID="Veeam.Backup.ScriptDatasource.Discovery">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>EMProps.js</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Arguments>
<ScriptBody><Script>var SCRIPT_NAME = "EMProps.js";
var ARGUMENT_COUNT = 3;
var momApi = new ActiveXObject("MOM.ScriptAPI");
var sourceId = null;
var managedEntityId = null;
var targetComputer = null;
var EVENT_ID = 3502;

Main();

function Main() {
SetGlobalVarsFromArguments();
var discoveryData = momApi.CreateDiscoveryData(0, sourceId, managedEntityId);

try {
var wbLoc = new ActiveXObject("WbemScripting.SWbemLocator");
var wmi = wbLoc.ConnectServer(".", "root\\VeeamEM");

var discoveryData = momApi.CreateDiscoveryData(0, sourceId, managedEntityId);
var ver = "";
var query1 = "SELECT * FROM EnterpriseManagerServer";
var results = wmi.ExecQuery(query1);
if (results.Count == 1) {
var item = results.ItemIndex(0);
var verProp = item.Properties_.Item("Version");
if (verProp != null) {
ver = verProp.Value;
}
}

if (ver == null || ver == "" || !ver.match(/^([7-9]|[1-9]\d{1,})\..*$/)) {
if (ver != null &amp;&amp; ver != "") {
momApi.LogScriptEvent(SCRIPT_NAME, EVENT_ID, 4, "Veeam Backup Version " + ver + " is not supported, skipping discovery.");
} else {
momApi.LogScriptEvent(SCRIPT_NAME, EVENT_ID, 4, "Veeam Backup Version is not defined, skipping discovery.");
}

discoveryData.isSnapshot = false;
momApi.Return(discoveryData);
WScript.Quit(0);
}

var source = null;
source = discoveryData.CreateClassInstance("$MPElement[Name='Veeam.Backup.EnterpriseManager']$");
source.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetComputer);
source.AddProperty("$MPElement[Name='Veeam.Backup.EnterpriseManager']/Version$", ver);

var url = "";
var emPort = "";
var emName = "";
var HKLM = 0x80000002;
var sRegPath = "SOFTWARE\\Veeam\\Veeam Backup Reporting";
var oLoc = new ActiveXObject("WbemScripting.SWbemLocator");
var oSvc = oLoc.ConnectServer(null, "root\\default");
var oReg = oSvc.Get("StdRegProv");
var oMethod = oReg.Methods_.Item("GetStringValue");
var oInParam = oMethod.InParameters.SpawnInstance_();
oInParam.hDefKey = HKLM;
oInParam.sSubKeyName = sRegPath;
oInParam.sValueName = "WebSSLPort";

var oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
emPort = oOutParam.sValue;

oInParam.sValueName = "EnterpriseServerName";
oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
emName = oOutParam.sValue;

oInParam.sValueName = "XMLURL";
oOutParam = oReg.ExecMethod_(oMethod.Name, oInParam);
var xmlUrl = oOutParam.sValue;

//TODO: detect https vs http
var sp = xmlUrl.split("//");
var rp = sp[1];
var sp2 = rp.split(":");
var srvFQDN = sp2[0];
url = "https://" + srvFQDN + ":" + emPort;

source.AddProperty("$MPElement[Name='Veeam.Backup.EnterpriseManager']/URL$", url);

discoveryData.AddInstance(source);
} catch (e) {
momApi.LogScriptEvent(SCRIPT_NAME, EVENT_ID, 2, e.message);
discoveryData.isSnapshot = false;
} finally {
momApi.Return(discoveryData);
}
}


function SetGlobalVarsFromArguments() {
if (WScript.Arguments.length != ARGUMENT_COUNT) {
momApi.LogScriptEvent(SCRIPT_NAME, EVENT_ID, 2, "Invalid argument count: expected " + ARGUMENT_COUNT + ", received " + WScript.Arguments.length);
WScript.Quit(0);
}
sourceId = WScript.Arguments(0);
managedEntityId = WScript.Arguments(1);
targetComputer = WScript.Arguments(2);
}</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>