var gbl_nEventId = 17001;
CTRegistry = function(sHostname) {
var m_ErrorCode = 0;
var m_ErrorDescription = "";
var M_HKEY_CLASSES_ROOT = 0x80000000;
var M_HKEY_CURRENT_USER = 0x80000001;
var M_HKEY_LOCAL_MACHINE = 0x80000002;
var M_HKEY_USERS = 0x80000003;
var M_HKEY_CURRENT_CONFIG = 0x80000005;
var M_HKEY_DYN_DATA = 0x80000006; // Windows 95 / 98 only;
var M_REG_SZ = 1;
var M_REG_EXPAND_SZ = 2;
var M_REG_BINARY = 3;
var M_REG_DWORD = 4;
var M_REG_DWORD_BIG_ENDIAN = 5;
var M_REG_LINK = 6;
var M_REG_MULTI_SZ = 7;
var M_REG_RESOURCE_LIST = 8;
var M_REG_FULL_RESOURCE_DESCRIPTOR = 9;
var M_REG_RESOURCE_REQUIREMENTS_LIST = 10;
var M_REG_QWORD = 11;
var M_REG_KEY_QUERY_VALUE = 0x0001;
var M_REG_KEY_SET_VALUE = 0x0002;
var M_REG_KEY_CREATE_SUB_KEY = 0x0004;
var M_REG_KEY_DELETE = 0x00010000;
var m_RegProviderName ='StdRegProv';
var m_Hostname = sHostname;
var m_ObjWmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + m_Hostname + "\\root\\default");
var m_ObjRegistry = m_ObjWmiService.Get(m_RegProviderName);
var ResetErrors = function() {
m_ErrorCode = 0;
m_ErrorDescription = "";
};
CTCluster = function (pHostname) {
var objWMIService = null;
var bInitialized = false;
var getClusterResourceGroup = function (resourceName) {
try {
if (bInitialized) {
var objWbemObjectSet = objWMIService.AssociatorsOf('MSCluster_Resource.Name="' + resourceName + '"', null, "MSCluster_ResourceGroup");
var obj = new Enumerator(objWbemObjectSet);
if (obj != null && obj.item() != null) {
return obj.item().Name;
}
}
} catch (ex) { }
return "";
};
var isClusterResourceGroupContainsService = function (resourceGroup, serviceName) {
try {
if (bInitialized) {
var colItems, objItem;
colItems = objWMIService.AssociatorsOf('MSCluster_ResourceGroup.Name="' + resourceGroup + '"', null, "MSCluster_Resource");
objItem = new Enumerator(colItems);
for (; !objItem.atEnd(); objItem.moveNext()) {
if (objItem.item() != null && caseInsensitiveMatches(objItem.item().Type, "generic service")) {
if (objItem.item().PrivateProperties != null && caseInsensitiveMatches(objItem.item().PrivateProperties.ServiceName, serviceName)) {
return true;
}
}
}
}
} catch (ex) { }
return false;
};
this.destroy = function () {
objWMIService = null;
};
this.isServiceClustered = function(serviceName) {
if (bInitialized) {
var sQuery = 'Select Name from MSCluster_Resource where Type="Generic Service" and PrivateProperties.ServiceName="' + serviceName + '"';
var oServices = objWMIService.ExecQuery(sQuery);
return oServices.Count == 1;
}
return false;
};
this.clusterNameMatchesHostname = function(sHostname, sNetbiosHostname) {
if (bInitialized) {
var sQuery = 'Select Name from MSCluster_Cluster where Name="' + sHostname + '" or Name="' + sNetbiosHostname + '"';
var oClusters = objWMIService.ExecQuery(sQuery);
return oClusters.Count == 1;
}
return false;
};
var caseInsensitiveMatches = function(str1,str2) {
if (str1 == null && str2 == null) {
return true;
}
if (str1 == null) {
return false;
}
if (str2 == null) {
return false;
}
var re = new RegExp("^" + str2 + "$", "i");
return re.test(str1);
};
this.getNetworkResourceName = function(serviceName) {
if (bInitialized) {
var sQuery = 'Select Name,PrivateProperties from MSCluster_Resource where Type="Network Name"';
var oNetworks = objWMIService.ExecQuery(sQuery);
var oNetwork = new Enumerator(oNetworks);
for (; !oNetwork.atEnd(); oNetwork.moveNext()) {
if (oNetwork.item() != null) {
var networkItemName =oNetwork.item().Name;
var cresgrp = trim(getClusterResourceGroup(networkItemName));
if (cresgrp.length > 0) {
if (isClusterResourceGroupContainsService(cresgrp, serviceName)) {
var networkItemPrivatePropertyName = null;
if (oNetwork.item().PrivateProperties != null) {
networkItemPrivatePropertyName = oNetwork.item().PrivateProperties.Name;
}
return [networkItemName, networkItemPrivatePropertyName];
}
}
}
}
}
return null;
};
this.isServiceHosted = function(sHostname, sNetbiosHostname, serviceName) {
var networkResourceName =this.getNetworkResourceName(serviceName);
if (networkResourceName != null) {
if (caseInsensitiveMatches(networkResourceName[0], sHostname) || caseInsensitiveMatches(networkResourceName[0], sNetbiosHostname)) {
return true;
}
if (caseInsensitiveMatches(networkResourceName[1], sHostname) || caseInsensitiveMatches(networkResourceName[1], sNetbiosHostname)) {
return true;
}
return false;
}
if (this.isServiceClustered(serviceName)) {
return this.clusterNameMatchesHostname(sHostname, sNetbiosHostname);
}
return false;
};
var trim = function (src) {
if (src == null) {
return "";
}
return src.replace(/^\s+|\s+$/g, '');
};
this.doDiscoveryForService = function (sHostname, sNetbiosHostname, sService, bVirtualNode) {
var svcClustered = this.isServiceClustered(sService);
if (bVirtualNode == false) {
return !svcClustered;
}
var bHosted = svcClustered;
if (bHosted) {
bHosted = this.isServiceHosted(sHostname, sNetbiosHostname, sService);
}
return (bHosted == bVirtualNode);
};
try {
objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\\\" + pHostname + "\\root\\MSCluster");
if (objWMIService != null) {
var objWMISer = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + pHostname + "\\root\\CIMV2");
var sQ = 'select Name from Win32_Service where name="ClusSvc"';
var osvcs = objWMISer.ExecQuery(sQ);
var osvc = new Enumerator(osvcs);
bInitialized = (!osvc.atEnd() && osvc.item() && /ClusSvc/i.test(osvc.item().Name));
osvc = null;
osvcs = null;
objWMISer = null;
} else {
bInitialized = false;
}
} catch (ex) {
objWMIService = null;
bInitialized = false;
}
};
function getAgentStatus(sHostname, sAgentSvc, sFile, sRegpath, sRegkey, bDiscovery) {
var iPid = 0;
var bFileExists = false;
var bRegistryFound = false;
var bAgentFound = false;
var sError = "";
var iError = 0;
var sFilename = sFile;
var sPath = "";
var sFullPath = sFile;
try {
var oReg = new CTRegistry(sHostname);
var mValue = new Array();
if ((oReg.GetStringValue(oReg.HKEY_LOCAL_MACHINE(), sRegpath, sRegkey, mValue))) {
bRegistryFound = true;
sPath = mValue[0];
sFullPath = sPath + "\\" + sFile;
} else {
sRegpath = sRegpath.replace(/software\\/i, "software\\Wow6432Node\\");
if (oReg.GetStringValue(oReg.HKEY_LOCAL_MACHINE(), sRegpath, sRegkey, mValue)) {
bRegistryFound = true;
sPath = mValue[0];
sFullPath = sPath + "\\" + sFile;
}
}
oReg.destroy();
oReg = null;
mValue = null;
if (bRegistryFound == true) {
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + sHostname + "\\root\\CIMV2");
var colItems = objWMIService.ExecQuery('SELECT ProcessId FROM Win32_Service Where Name="' + sAgentSvc + '"');
var enumItems = new Enumerator(colItems);
if (enumItems.atEnd() == false) {
if (enumItems.item() != null) {
iPid = enumItems.item().ProcessId;
bAgentFound = true;
}
}
enumItems = null;
colItems = null;
colItems = objWMIService.ExecQuery('Select Name From CIM_DataFile where Name="' + sFullPath.replace(/\//g,"\\").replace(/\\\\/g,"\\").replace(/\\/g, "\\\\") + '"');
enumItems = new Enumerator(colItems);
bFileExists = (enumItems.atEnd() == false) && (enumItems.item() != null);
enumItems = null;
colItems = null;
objWMIService = null;
}
} catch (er) {
sError = er.description;
iError = er.number;
}
var bContinue = bAgentFound && bFileExists && (bDiscovery || (iPid > 0));
function DoDiscovery(TargetComputer, oDiscoveryData, NetBIOSName, bIsVirtualNode, oLog) {
var oWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + TargetComputer + "\\root\\cimv2");
// find all services with 'dmdocbroker.exe' in service PathName
// query all Documentum broker services
var oDmBrokerService, oDmBrokers;
oLog.WriteInfo("Get Broker service instances.", gbl_nEventId);
oDmBrokers = oWMIService.ExecQuery('select Name,StartMode,PathName,Caption from Win32_Service where PathName like "%dmdocbroker.exe%"');
oDmBrokerService = new Enumerator(oDmBrokers);
var clusClass = new CTCluster(TargetComputer);
var atLeastOneAdded = false;
for (; !oDmBrokerService.atEnd(); oDmBrokerService.moveNext()) {
if ((oDmBrokerService != null) && (oDmBrokerService.item() != null)) {
var doDisc = clusClass.doDiscoveryForService(TargetComputer, NetBIOSName, oDmBrokerService.item().Name, bIsVirtualNode);
oLog.WriteInfo("Check if broker:" + oDmBrokerService.item().Name + " needs discovery:" + doDisc, gbl_nEventId);
if (doDisc == true) {
if (!(/disabled/i.test(oDmBrokerService.item().StartMode))) {
var oBroker = new ClsBroker(TargetComputer);
oLog.WriteInfo("Discover broker class properties", gbl_nEventId);
var ret = oBroker.DoDiscovery(oDmBrokerService.item().PathName);
if (ret == true) {
//create new object and discover all properties
var oInstSrvr = oDiscoveryData.CreateClassInstance("$MPElement[Name='ComTrade.EMC.Documentum.Windows.Broker']$");
oInstSrvr.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer);
oInstSrvr.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", oDmBrokerService.item().Name);
oInstSrvr.AddProperty("$MPElement[Name='ComTrade.EMC.Documentum.Windows.Broker']/ServiceName$", oDmBrokerService.item().Name);
oInstSrvr.AddProperty("$MPElement[Name='ComTrade.EMC.Documentum.Windows.Broker']/ServiceDescription$", oDmBrokerService.item().Caption);
oInstSrvr.AddProperty("$MPElement[Name='CTDmLib!ComTrade.EMC.Documentum.Broker']/Port$", oBroker.GetPort());
oInstSrvr.AddProperty("$MPElement[Name='CTDmLib!ComTrade.EMC.Documentum.Broker']/Logfile$", oBroker.GetLogfile());
oInstSrvr.AddProperty("$MPElement[Name='CTDmLib!ComTrade.EMC.Documentum.Broker']/LogfilePath$", oBroker.GetLogfilePath());
oInstSrvr.AddProperty("$MPElement[Name='CTDmLib!ComTrade.EMC.Documentum.Broker']/Initfile$", oBroker.GetIniFile());
oInstSrvr.AddProperty("$MPElement[Name='CTDmLib!ComTrade.EMC.Documentum.Broker']/Host$", oBroker.GetHost());
oDiscoveryData.AddInstance(oInstSrvr);
atLeastOneAdded = true;
oInstSrvr = null;
oLog.WriteInfo("Added discovered broker.", gbl_nEventId);
}
oBroker = null;
}
}
}
}
oDmBrokers = null;
oDmBrokerService = null;
clusClass.destroy();
clusClass = null;
return atLeastOneAdded;
};
function Main() {
var c_strRegPath = "SOFTWARE\\ComTrade\\MP for EMC Documentum";
var c_strRegKey = "InstallDir";
var c_strFileName = "dmmon-data-new.xml";
var svc_name="dmmp_svc";
var bDebug = false;
var oArgs = WScript.Arguments;
var oAPI, oDiscoveryData;
oAPI = WScript.CreateObject("MOM.ScriptAPI");
// Create logger
var oLog = new CTLogger(oAPI);
if (oArgs.Count() < 5)
{
oLog.WriteError("All needed arguments not specified.", gbl_nEventId);
WScript.Quit(-1);
}
var guidSourceID, guidManagedEntityId;
var sTargetComputer = "", sTargetNetbiosComputer = "";
var bIsVirtualNode = false;