Documentum Connection Broker Discovery Provider

ComTrade.EMC.Documentum.Windows.DS.Broker.DiscoveryProvider (DataSourceModuleType)

Data source for Documentum Connection Broker discovery.

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Update Interval in SecondsThe update interval in seconds.
SyncTimestring$Config/SyncTime$Synchronization TimeThe synchronization time.
Debugbool$Config/Debug$DebugDebugging flag. If set to true provides more outputs in the Operations Manager event log.

Source Code:

<DataSourceModuleType ID="ComTrade.EMC.Documentum.Windows.DS.Broker.DiscoveryProvider" Accessibility="Internal" Batching="false">
<Configuration>
<xsd:element minOccurs="1" name="IntervalSeconds" type="xsd:integer"/>
<xsd:element minOccurs="1" name="SyncTime" type="xsd:string"/>
<xsd:element minOccurs="1" name="Debug" type="xsd:boolean"/>
<xsd:element minOccurs="1" name="MPElement" type="xsd:string"/>
<xsd:element minOccurs="1" name="TargetId" type="xsd:string"/>
<xsd:element minOccurs="1" name="TargetComputer" type="xsd:string"/>
<xsd:element minOccurs="1" name="TargetComputerNetbios" type="xsd:string"/>
<xsd:element minOccurs="1" name="IsVirtualNode" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
<OverrideableParameter ID="Debug" Selector="$Config/Debug$" ParameterType="bool"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ScriptName>CTDmMPDocumentumBrokerDiscovery.js</ScriptName>
<Arguments>"$Config/MPElement$" "$Config/TargetId$" "$Config/TargetComputer$" "$Config/TargetComputerNetbios$" "$Config/IsVirtualNode$" "$Config/Debug$"</Arguments>
<ScriptBody><Script>
/* ======================================================================

NAME: CTDmMPDocumentumBrokerDiscovery.js

AUTHOR: AMS Team , Comtrade d.o.o.
DATE : 12/28/2011

COMMENT:

========================================================================= */

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 = "";
};

this.HKEY_CLASSES_ROOT = function() {
return M_HKEY_CLASSES_ROOT;
};

this.HKEY_CURRENT_USER = function() {
return M_HKEY_CURRENT_USER;
};

this.HKEY_LOCAL_MACHINE = function() {
return M_HKEY_LOCAL_MACHINE;
};

this.HKEY_USERS = function() {
return M_HKEY_USERS;
};

this.HKEY_CURRENT_CONFIG = function() {
return M_HKEY_CURRENT_CONFIG;
};

this.HKEY_DYN_DATA = function() {
return M_HKEY_DYN_DATA;
};

this.REG_SZ = function() {
return M_REG_SZ;
};

this.REG_EXPAND_SZ = function() {
return M_REG_EXPAND_SZ;
};

this.REG_BINARY = function() {
return M_REG_BINARY;
};

this.REG_DWORD = function() {
return M_REG_DWORD;
};

this.REG_DWORD_BIG_ENDIAN = function() {
return M_REG_DWORD_BIG_ENDIAN;
};

this.REG_LINK = function() {
return M_REG_LINK;
};

this.REG_MULTI_SZ = function() {
return M_REG_MULTI_SZ;
};

this.REG_RESOURCE_LIST = function() {
return M_REG_RESOURCE_LIST;
};

this.REG_FULL_RESOURCE_DESCRIPTOR = function() {
return M_REG_FULL_RESOURCE_DESCRIPTOR;
};

this.REG_RESOURCE_REQUIREMENTS_LIST = function() {
return M_REG_RESOURCE_REQUIREMENTS_LIST;
};

this.REG_QWORD = function() {
return M_REG_QWORD;
};

this.REG_KEY_QUERY_VALUE = function() {
return M_REG_KEY_QUERY_VALUE;
};

this.REG_KEY_SET_VALUE = function() {
return M_REG_KEY_SET_VALUE;
};

this.REG_KEY_CREATE_SUB_KEY = function() {
return M_REG_KEY_CREATE_SUB_KEY;
};

this.REG_KEY_DELETE = function() {
return M_REG_KEY_DELETE;
};

this.GetStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.sValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.GetExpandedStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetExpandedStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.sValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

var trim = function (str) {
return str.replace(/^\s+|\s+$/g,"");
};

this.GetBinaryValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetBinaryValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = "";
for (var k = 0; k &lt; out_params.uValue.toArray().length; ++k) {
var tVal = out_params.uValue(k).toString(16);
if (tVal.length == 1) {
tVal = "0" + tVal;
}
oValue[0] += tVal + " ";
}
oValue[0] = trim(oValue[0]);
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.GetDwordValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetDWORDValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.uValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.GetQwordValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetQWORDValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.uValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.GetMultiStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetMultiStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sValue.toArray().length; ++k) {
oValue[k] = out_params.sValue(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.CheckPermission = function ( sHive, sRegKey, oPermission, oGranted) {
try {
ResetErrors();
oGranted.length = 0;
var func_name = 'CheckAccess';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.uRequired = oPermission;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oGranted[0] = out_params.bGranted;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.EnumerateValues = function ( sHive, sRegKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
oValue[k] = out_params.sNames(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.EnumerateSubKeys = function ( sHive, sRegKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumKey';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
oValue[k] = out_params.sNames(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

var contains = function (sArray, sValue) {
try {
for ( var k = 0; k &lt; sArray.length; k++) {
if (sArray[k] == sValue) {
return true;
}
}
}
catch (ex) {
return false;
}
return false;
};

this.FindKey = function (sHive, sRegKey, sFindKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumKey';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
if (out_params.sNames != null) {
if (contains(out_params.sNames.toArray(), sFindKey)) {
oValue[0] = sRegKey + "\\" + sFindKey;
return true;
}
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
var rtVl = [];
if (this.FindKey(sHive, sRegKey + "\\" + out_params.sNames(k), sFindKey, rtVl)) {
oValue[0] = rtVl[0];
return true;
}
}
}
return false;
} else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.FindValue = function (sHive, sRegKey, sFindKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumKey';
var func_name1 = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name1).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name1, in_params);
if (out_params.ReturnValue == 0) {
if (out_params.sNames != null) {
if (contains(out_params.sNames.toArray(), sFindKey)) {
oValue[0] = sRegKey;
return true;
}
}
in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.sNames != null) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
var rtVl = [];
if (this.FindValue(sHive, sRegKey + "\\" + out_params.sNames(k), sFindKey, rtVl)) {
oValue[0] = rtVl[0];
return true;
}
}
}
return false;
} else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.RegKeyExists = function ( sHive, sRegKey) {
try {
ResetErrors();
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};

this.RegValueExists = function ( sHive, sRegKey, sRegValue) {
try {
ResetErrors();
var tmpA = sRegValue.toLowerCase();
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
if (out_params.sNames(k).toLowerCase() == tmpA) {
return true;
}
}
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
return false;
};


this.ErrorCode = function() {
return m_ErrorCode;
};

this.ErrorDescription = function() {
return m_ErrorDescription;
};


this.destroy = function() {
m_ObjRegistry = null;
m_ObjWmiService = null;
};

};

CTLogger = function (oApi) {
var M_LOGLEVELINFO = 0;
var M_LOGLEVELWARNING = 2;
var M_LOGLEVELERROR = 1;

var m_oMomApi = oApi;
var m_nLogLevel = M_LOGLEVELERROR;

this.LoggingLevel = function(lValue) {
m_nLogLevel = lValue;
};

this.MomAPI = function(lValue) {
m_oMomApi = lValue;
};

this.LOGLEVELINFO = function() {
return M_LOGLEVELINFO;
};

this.LOGLEVELWARNING = function(){
return M_LOGLEVELWARNING;
};

this.LOGLEVELERROR = function() {
return M_LOGLEVELERROR;
};

var WriteStdErr = function (sMessage, nEventId, nSeverity) {
try {
var sMsg = "";
switch (nSeverity)
{
case 0 :
sMsg = "[" + WScript.ScriptName + " - Info]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 1 :
sMsg = "[" + WScript.ScriptName + " - Error]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 2 :
sMsg = "[" + WScript.ScriptName + " - Warning]: EventId: " + nEventId + " Message: " + sMessage;
break;
}
WScript.StdErr.WriteLine(sMsg);
}
catch (e){
}
};

var WriteStdOut = function (sMessage, nEventId, nSeverity) {
try {
var sMsg = "";
switch (nSeverity) {
case 0 :
sMsg = "[" + WScript.ScriptName + " - Info]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 1 :
sMsg = "[" + WScript.ScriptName + " - Error]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 2 :
sMsg = "[" + WScript.ScriptName + " - Warning]: EventId: " + nEventId + " Message: " + sMessage;
break;
}
WScript.StdOut.WriteLine(sMsg);
}
catch (e) {
}
};

var WriteEventLog = function (sMessage, nEventId, nSeverity) {
m_oMomApi.LogScriptEvent(WScript.ScriptName, nEventId, nSeverity, sMessage);
};

var IsNumeric = function (dt) {
var RE = /^-{0,1}\d*\.{0,1}\d+$/;
return (RE.test(dt));
};

var WriteLog = function (sMessage, nEventId, nSeverity) {
try {
if (IsNumeric(nSeverity) &amp;&amp; IsNumeric(nEventId)) {
if ( ! m_oMomApi) {
switch (m_nLogLevel) {
case 0 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
else {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
case 1 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
case 2 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
else if ( nSeverity == 2) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
}
}
else {
switch (m_nLogLevel) {
case 0 :
WriteEventLog(sMessage, nEventId, nSeverity);
break;
case 1 :
if (nSeverity == 1) {
WriteEventLog(sMessage, nEventId, nSeverity);
}
break;
case 2 :
if (nSeverity &gt; 0) {
WriteEventLog(sMessage, nEventId, nSeverity);
}
break;
}
}
}
}
catch (e) {
}
};

this.WriteError = function (sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELERROR);
};

this.WriteWarning = function (sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELWARNING);
};

this.WriteInfo = function(sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELINFO);
};
};

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 &amp;&amp; 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 &amp;&amp; caseInsensitiveMatches(objItem.item().Type, "generic service")) {
if (objItem.item().PrivateProperties != null &amp;&amp; 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 &amp;&amp; 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 &gt; 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() &amp;&amp; osvc.item() &amp;&amp; /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) &amp;&amp; (enumItems.item() != null);
enumItems = null;
colItems = null;
objWMIService = null;
}
} catch (er) {
sError = er.description;
iError = er.number;
}
var bContinue = bAgentFound &amp;&amp; bFileExists &amp;&amp; (bDiscovery || (iPid &gt; 0));

return {
'Continue' : bContinue,
'PID' : iPid,
'AgentExists' : bAgentFound,
'FileExists' : bFileExists,
'RegistryExists' : bRegistryFound,
'File' : sFilename,
'FullPath' : sFullPath,
'Path' : sPath,
'ErrorDescription' : sError,
'ErrorNumber' : iError
};
};

ClsBroker = function(sHost) {
// Properties
var m_Port = 1489;
var m_IniFile = "";
var m_Logfile = "";
var m_LogFilePath = "";
var m_Host = sHost;

this.DoDiscovery = function(ServicePath) {
return GetParameters(ServicePath)
};

var GetParameters = function (ServicePath) {
try {
//Prepare a regular expression object
var oRgx = /-init_file\s+\"?(.*\.ini)\"?\s?/gi;
// get ini file
var myMatches = oRgx.exec(ServicePath);
if ((myMatches == null) || (myMatches.length == 0)) {
oLog.WriteWarning("Cannot parse connection broker init_file service argument.", cEventNo);
} else {
m_IniFile = myMatches[1];
}
oRgx = null;
myMatches = null;
// get log file - bellow regex works fine only if filename has extension
oRgx = /-logfile\s+\"?(.*)[\/\\]([^\/\\]+\.log)\"?/gi;
myMatches = oRgx.exec(ServicePath);
if ((myMatches == null) || (myMatches.length == 0)) {
oLog.WriteWarning("Cannot parse connection broker logfile service argument.", cEventNo);
} else {
m_LogFilePath = myMatches[1];
m_LogFile = myMatches[2];
}
oRgx = null;
myMatches = null;
// get port
oRgx = /-port\s+([0-9]*)\s?/gi;
myMatches = oRgx.exec(ServicePath);
if ((myMatches == null) || (myMatches.length ==0 )) {
oLog.WriteWarning("Cannot parse connection broker port service argument.", cEventNo);
} else {
m_Port = myMatches[1];
}
oRgx = null;
myMatches = null;
// get port
oRgx = /-host\s+([.\w]+)\s?/gi;
myMatches = oRgx.exec(ServicePath);
if ((myMatches != null) &amp;&amp; (myMatches.length !=0 )) {
m_Host = myMatches[1];
}
oRgx = null;
myMatches = null;
return true;
} catch (ex) {
return false;
}
};

this.GetPort = function() {
return m_Port;
};

this.GetIniFile = function() {
return m_IniFile;
};

this.GetLogfile = function() {
return m_LogFile;
};

this.GetLogfilePath = function() {
return m_LogFilePath;
};
this.GetHost = function () {
return m_Host;
};

};

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) &amp;&amp; (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() &lt; 5)
{
oLog.WriteError("All needed arguments not specified.", gbl_nEventId);
WScript.Quit(-1);
}

var guidSourceID, guidManagedEntityId;
var sTargetComputer = "", sTargetNetbiosComputer = "";
var bIsVirtualNode = false;

guidSourceID = oArgs(0);
guidManagedEntityId = oArgs(1);
sTargetComputer = oArgs(2);
sTargetNetbiosComputer = oArgs(3);
if (oArgs.Count() &gt; 4) {
try {
bIsVirtualNode = /^true$/i.test(oArgs(4));
} catch (ex) {
bIsVirtualNode = false;
}
}
if (oArgs.Count() &gt; 5) {
try {
bDebug = /^true$/i.test(oArgs(5));
} catch (ex) {
bDebug = false;
}
}
if (bDebug == true) {
oLog.LoggingLevel(oLog.LOGLEVELINFO());
}
oDiscoveryData = oAPI.CreateDiscoveryData(0, guidSourceID, guidManagedEntityId);
var agentStatus = getAgentStatus(sTargetComputer, svc_name, c_strFileName, c_strRegPath, c_strRegKey, true);
if (agentStatus.Continue == false) {
agentStatus = null;
oLog.WriteWarning("Documentum MP Agent not installed and still not provide necessary files.", gbl_nEventId);
oAPI.Return(oDiscoveryData);
oAPI = null;
WScript.Quit(0);
}
oLog.WriteInfo("Starting Discovery. target host:" + sTargetComputer + " virtual node:" + bIsVirtualNode, gbl_nEventId);
DoDiscovery(sTargetComputer, oDiscoveryData, sTargetNetbiosComputer, bIsVirtualNode, oLog);
oAPI.Return(oDiscoveryData);
oLog.WriteInfo("Discovery Finished.", gbl_nEventId);
oLog = null;
oDiscoveryData = null;
oAPI = null;
agentStatus = null;
};

Main();
WScript.Quit(0);
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>