Get data from XML file which are related to MP agent license status as property bag
ComTrade.EMC.Documentum.Windows.PA.Xml.MPAgent.Provider (ProbeActionModuleType)
Gets data from XML file which are related to MP agent license status as property bag.
Element properties:
Member Modules:
Source Code:
<ProbeActionModuleType ID="ComTrade.EMC.Documentum.Windows.PA.Xml.MPAgent.Provider" Accessibility="Public" Batching="false" PassThrough="false">
<Configuration>
<xsd:element minOccurs="0" name="RegPath" type="xsd:string"/>
<xsd:element minOccurs="0" name="RegKey" type="xsd:string"/>
<xsd:element minOccurs="0" name="XmlFilename" type="xsd:string"/>
<xsd:element minOccurs="1" name="TargetComputer" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="PassThrough" TypeID="System!System.PassThroughProbe"/>
<ProbeAction ID="getData" TypeID="Windows!Microsoft.Windows.ScriptPropertyBagProbe">
<ScriptName>CTDmMPMPAgentLicenseHealthStatusDataProv.js</ScriptName>
<Arguments>"$Config/RegPath$" "$Config/RegKey$" "$Config/XmlFilename$" "$Config/TargetComputer$"</Arguments>
<ScriptBody><Script>
// common
var oAPI = new ActiveXObject("MOM.ScriptAPI");
var xslText = '<?xml version="1.0" encoding="UTF-8"?>\n'
+ '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\n'
+ ' <xsl:output method="xml" indent="yes" encoding="UTF-8"/>\n'
+ ' <xsl:strip-space elements="*"/>\n'
+ ' <xsl:template name="getLicense">\n'
+ ' <xsl:param name="lnode" />\n'
+ ' <xsl:for-each select="$lnode">\n'
+ ' <DataItem>\n'
+ ' <Property Name="LicenseValid"><xsl:value-of select="@license_valid"/></Property>\n'
+ ' <Property Name="LicenseDescription"><xsl:value-of select="@description"/></Property>\n'
+ ' <Property Name="LicenseExpireDate"><xsl:value-of select="@expire_date"/></Property>\n'
+ ' <Property Name="LicenseExpireForDays"><xsl:value-of select="@remain"/></Property>\n'
+ ' <Property Name="LicenseCheckTime"><xsl:value-of select="@time"/></Property>\n'
+ ' </DataItem>\n'
+ ' </xsl:for-each>\n'
+ ' </xsl:template>\n'
+ ' <xsl:template name="matchLicense">\n'
+ ' <xsl:for-each select="license">\n'
+ ' <xsl:call-template name="getLicense">\n'
+ ' <xsl:with-param name="lnode" select="." />\n'
+ ' </xsl:call-template>\n'
+ ' </xsl:for-each>\n'
+ ' </xsl:template>\n'
+ ' <xsl:template match="*">\n'
+ ' <Collection>\n'
+ ' <xsl:call-template name="matchLicense" />\n'
+ ' </Collection>\n'
+ ' </xsl:template>\n'
+ '</xsl:stylesheet>\n';
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 < 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 < 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 < 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 < 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.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 < 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;
};
};
CTXmlDiff = function () {
var piErrorCode = 0;
var psErrorDescription = "";
var poMasterXml = new ActiveXObject("Microsoft.XMLDOM");
var poReferenceXml = new ActiveXObject("Microsoft.XMLDOM");
poMasterXml.setProperty("SelectionLanguage", "XPath");
poReferenceXml.setProperty("SelectionLanguage", "XPath");
var poFileSystem = new ActiveXObject("Scripting.FileSystemObject");
var poKeys = [];
var psReferenceFilename = "";
var psMasterFilename = "";
var psFilepath = "";
var psXslContent = "";
this.createDifference = function () {
if ((psMasterFilename.length > 0) && (psReferenceFilename.length > 0) && (psFilepath.length > 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sReferenceFile = psFilepath + "/" + psReferenceFilename;
var sMasterFileLock = sMasterFile + ".lck";
var sReferenceFileLock = sReferenceFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length > 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
if (this.load(sReferenceFile, sReferenceFileLock, poReferenceXml, 100)) {
var diffNodes = "<Collection>\n";
var oMasterNodes = poMasterXml.selectNodes("//DataItem");
var oReferenceNodes = poReferenceXml.selectNodes("//DataItem");
var k, n, m;
for (k = 0; k < oMasterNodes.length; k++) {
var isFound = false;
for (n = 0; n < oReferenceNodes.length; n++) {
var isMathced = 0;
for (m = 0; m < poKeys.length; m++) {
var pMnds = oMasterNodes(k).selectSingleNode("Property[@Name='" + poKeys[m] + "']");
if (pMnds) {
var pRnds = oReferenceNodes[n].selectSingleNode("Property[@Name='" + poKeys[m] + "']");
if (pRnds) {
if (pMnds.text == pRnds.text) {
isMathced++;
}
}
}
}
if (isMathced == poKeys.length) {
isFound = true;
}
if (isFound) {
break;
}
}
if (isFound == false) {
diffNodes += oMasterNodes(k).xml + "\n";
}
}
diffNodes += "</Collection>";
var oNewXml = new ActiveXObject("Microsoft.XMLDOM");
oNewXml.setProperty("SelectionLanguage", "XPath");
if (oNewXml.loadXML(diffNodes)) {
if (oNewXml.documentElement.hasChildNodes()) {
poMasterXml.save(sReferenceFile);
}
if (arguments.length > 0) {
var oApi = arguments[0];
var nds = oNewXml.selectNodes("//DataItem");
if (nds && (nds.length > 0)) {
var nCount;
for (nCount = 0; nCount < nds.length; nCount++) {
var oBag = oApi.CreatePropertyBag();
if (nds[nCount] && nds[nCount].hasChildNodes()) {
var nChilds;
for (nChilds = 0; nChilds < nds[nCount].childNodes.length; nChilds++) {
oBag.AddValue(nds[nCount].childNodes[nChilds].attributes[0].value, nds[nCount].childNodes[nChilds].text);
}
}
oApi.AddItem(oBag);
oBag = null;
}
} else {
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
} else {
piErrorCode = 1;
psErrorDescription = oNewXml.parseError.reason;
if (arguments.length > 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
oNewXml = null;
return diffNodes;
} else {
if (arguments.length > 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
poMasterXml.save(sReferenceFile);
}
}
}
}
if (arguments.length > 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
if (arguments.length > 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
}
return null;
};
this.createMasterPropertyBag = function () {
if ((psMasterFilename.length > 0) && (psFilepath.length > 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length > 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
if (arguments.length > 0) {
var oApi = arguments[0];
var nds = poMasterXml.selectNodes("//DataItem");
if (nds && (nds.length > 0)) {
var nCount;
for (nCount = 0; nCount < nds.length; nCount++) {
var oBag = oApi.CreatePropertyBag();
if (nds[nCount] && nds[nCount].hasChildNodes()) {
var nChilds;
for (nChilds = 0; nChilds < nds[nCount].childNodes.length; nChilds++) {
oBag.AddValue(nds[nCount].childNodes[nChilds].attributes[0].value, nds[nCount].childNodes[nChilds].text);
}
}
oApi.AddItem(oBag);
oBag = null;
}
} else {
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
return poMasterXml.xml;
}
} else {
if (arguments.length > 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
} else {
if (arguments.length > 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
}
}
return null;
};
this.setXslContent = function (sXslContent) {
psXslContent = sXslContent;
};
this.setReferenceFilename = function (sFilename) {
psReferenceFilename = sFilename;
};
this.setMasterFilename = function (sFilename) {
psMasterFilename = sFilename;
};
this.setFilepath = function (sFilepath) {
psFilepath = sFilepath;
};
this.load = function (sXmlFile, sLockFile, oXml, iRepeatCount) {
try {
if (!poFileSystem.FileExists(sXmlFile)) {
throw new Error(4, "File '" + sXmlFile + "' not found.");
}
oXml.async = false;
var fileLock = null;
do {
try {
fileLock = poFileSystem.OpenTextFile(sLockFile, 8, true);
break;
} catch (e) {
iRepeatCount--;
WScript.Sleep(100);
}
} while (iRepeatCount > 0);
if (iRepeatCount < 1) {
throw new Error(5, "Could not acquire lock for reading file '" + sLockFile + "'.");
}
var flc = "<xmlfile />";
var fl = poFileSystem.OpenTextFile(sXmlFile, 1);
if (fl) {
if (!fl.AtEndOfStream) {
flc = fl.ReadAll();
}
fl.Close();
} else {
throw new Error(5, "Error loading data file '"+ sXmlFile + "'. ");
}
if (fileLock) {
WScript.Sleep(300);
fileLock.Close();
}
if (!oXml.loadXML(flc)) {
throw new Error(6, "Error loading data file '" + sXmlFile + "'. Error code: " + oXml.parseError.reason);
}
return true;
} catch (exc) {
piErrorCode = exc.number;
psErrorDescription = exc.description;
}
return false;
};
this.loadXml = function (sXmlContent, oXml) {
try {
if (oXml.loadXML(sXmlContent)) {
return true;
} else {
throw new Error(6, "Error loading XML content Error code: " + oXml.parseError.reason);
}
} catch (e) {
piErrorCode = e.number;
psErrorDescription = e.description;
return false;
}
};
this.destroy = function () {
poMasterXml = null;
poReferenceXml = null;
poFileSystem = null;
poKeys.length = 0;
poKeys = null;
};
var resetErrors = function () {
piErrorCode = 0;
psErrorDescription = "";
};
this.applyXslTransformation = function (sXslText, oXml) {
var rtVal = this.xslTransformation(sXslText, oXml);
if (rtVal) {
return this.loadXml(rtVal, oXml);
}
return false;
};
this.xslTransformation = function (sXslText, oXml) {
try {
resetErrors();
var oXsl = new ActiveXObject("Microsoft.XMLDOM");
oXsl.setProperty("SelectionLanguage", "XPath");
oXsl.async = false;
if (oXsl.loadXML(sXslText)) {
var rtVal = oXml.transformNode(oXsl);
return rtVal;
} else {
throw new Error(1, oXsl.parseError.reason);
}
} catch (e) {
piErrorCode = e.number;
psErrorDescription = e.description;
}
return null;
};
this.applyPropertyBagXslThenCreatePropertyBag = function (sXslText, oXml, oApi) {
try {
resetErrors();
var sTransXml = this.xslTransformation(sXslText, oXml);
if (sTransXml) {
var oTempXml = new ActiveXObject("Microsoft.XMLDOM");
oTempXml.setProperty("SelectionLanguage", "XPath");
oTempXml.async = false;
if (oTempXml.loadXML(sTransXml)) {
var nds = oTempXml.selectNodes("//DataItem");
if (nds && (nds.length > 0)) {
var k;
for (k = 0; k < nds.length; k++) {
var oBag = oApi.CreatePropertyBag();
if (nds[k] && nds[k].hasChildNodes()) {
var n;
for (n = 0; n < nds[k].childNodes.length; n++) {
oBag.AddValue(nds[k].childNodes[n].attributes[0].value, nds[k].childNodes[n].text);
}
}
oApi.AddItem(oBag);
oBag = null;
}
} else {
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
} else {
var sReason = oTempXml.parseError.reason;
throw new Error(2, sReason);
}
return true;
}
} catch (e) {
piErrorCode = e.number;
psErrorDescription = e.description;
}
return false;
};
this.addKey = function (sKey) {
poKeys[poKeys.length] = sKey;
};
this.clearKeys = function () {
poKeys.length = 0;
};
this.errorCode = function () {
return piErrorCode;
};
this.errorDescription = function () {
return psErrorDescription;
};
this.makeTextTable = function (oXml, sValueProperty, sPropertyValue) {
var xstText = '<xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\n' +
' <xsl:output method="text"/>\n' +
' <xsl:strip-space elements="*"/>\n' +
' <xsl:variable name="newline" select="' + "'&#10;'" + '"/>\n' +
' <xsl:template match="DataItem[1]">\n' +
' <xsl:for-each select="Property">\n' +
' <xsl:variable name="maxWidthA">\n' +
' <xsl:call-template name="calcWidth">\n' +
' <xsl:with-param name="name" select="@Name"/>\n' +
' </xsl:call-template>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="paddingA">\n' +
' <xsl:value-of select="$maxWidthA - string-length(@Name)"/>\n' +
' </xsl:variable>\n' +
' <xsl:value-of select="@Name"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$paddingA"/>\n' +
' </xsl:call-template>\n' +
' <xsl:text>&#32;</xsl:text>\n' +
' </xsl:for-each>\n' +
' <xsl:value-of select="$newline"/>\n' +
' <xsl:call-template name="matchDataItems">\n' +
' <xsl:with-param name="pnode" select="."/>\n' +
' </xsl:call-template>\n' +
' </xsl:template>\n' +
' <xsl:template match="DataItem">\n' +
' <xsl:call-template name="matchDataItems">\n' +
' <xsl:with-param name="pnode" select="."/>\n' +
' </xsl:call-template>\n' +
' </xsl:template>\n' +
' <xsl:template name="matchDataItems">\n' +
' <xsl:param name="pnode"/>\n' +
' <xsl:for-each select="$pnode/Property[@Name=' + "'" + sValueProperty + "'" + ']">\n' +
' <xsl:if test="child::node() = '+ "'"+ sPropertyValue +"'" + '">\n' +
' <xsl:call-template name="getData">\n' +
' <xsl:with-param name="cnode" select=".." />\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n' +
' </xsl:template>\n' +
' <xsl:template name="getData">\n' +
' <xsl:param name="cnode"/>\n' +
' <xsl:for-each select="$cnode/Property">\n' +
' <xsl:variable name="maxWidth">\n' +
' <xsl:call-template name="calcWidth">\n' +
' <xsl:with-param name="name" select="@Name"/>\n' +
' </xsl:call-template>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="string">\n' +
' <xsl:for-each select="child::node()">\n' +
' <xsl:value-of select="translate(., '+ "'&#x20;&#x9;&#xD;&#xA;', ' '" + ')"/>\n' +
' </xsl:for-each>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="padding">\n' +
' <xsl:value-of select="$maxWidth - string-length($string)"/>\n' +
' </xsl:variable>\n' +
' <xsl:value-of select="$string"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$padding"/>\n' +
' </xsl:call-template>\n' +
' <xsl:text>&#32;</xsl:text>\n' +
' </xsl:for-each>\n' +
' <xsl:value-of select="$newline"/>\n' +
' </xsl:template>\n' +
' <xsl:template name="calcWidth">\n' +
' <xsl:param name="name" />\n' +
' <xsl:for-each select="//Property[@Name = $name]">\n' +
' <xsl:sort select="string-length(child::node())" order="descending" data-type="number"/>\n' +
' <xsl:if test="position() = 1">\n' +
' <xsl:variable name="var1">\n' +
' <xsl:value-of select="string-length(child::node())"/>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="var2">\n' +
' <xsl:value-of select="string-length($name)"/>\n' +
' </xsl:variable>\n' +
' <xsl:choose>\n' +
' <xsl:when test="$var1 &gt; $var2">\n' +
' <xsl:value-of select="$var1"/>\n' +
' </xsl:when>\n' +
' <xsl:otherwise>\n' +
' <xsl:value-of select="$var2"/>\n' +
' </xsl:otherwise>\n' +
' </xsl:choose>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n' +
' </xsl:template>\n' +
' <xsl:template name="append-pad">\n' +
' <xsl:param name="length" select="0"/>\n' +
' <xsl:if test="$length != 0">\n' +
' <xsl:value-of select="' + "'&#32;'" + '"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$length - 1"/>\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:template>\n' +
'</xsl:stylesheet>\n';
return this.xslTransformation(xstText, oXml);
};
this.makeTextTablePropertyBag = function (oApi, oXml, sValueProperty, sPropertyValue) {
var trTextTable = this.makeTextTable(oXml, sValueProperty, sPropertyValue);
var oBag = oApi.CreatePropertyBag();
oBag.AddValue(sValueProperty, sPropertyValue);
if (trTextTable) {
oBag.AddValue("Result", "\n\r" + trTextTable);
} else {
oBag.AddValue("Result", " ");
}
oApi.AddItem(oBag);
oBag = null;
};
this.makeTextTableEx = function (oXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
var xstText = '<xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\n' +
' <xsl:output method="text"/>\n' +
' <xsl:strip-space elements="*"/>\n' +
' <xsl:variable name="newline" select="' + "'&#10;'" + '"/>\n' +
' <xsl:template match="DataItem[1]">\n' +
' <xsl:for-each select="Property">\n' +
' <xsl:variable name="maxWidthA">\n' +
' <xsl:call-template name="calcWidth">\n' +
' <xsl:with-param name="name" select="@Name"/>\n' +
' </xsl:call-template>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="paddingA">\n' +
' <xsl:value-of select="$maxWidthA - string-length(@Name)"/>\n' +
' </xsl:variable>\n' +
' <xsl:value-of select="@Name"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$paddingA"/>\n' +
' </xsl:call-template>\n' +
' <xsl:text>&#32;</xsl:text>\n' +
' </xsl:for-each>\n' +
' <xsl:value-of select="$newline"/>\n' +
' <xsl:call-template name="matchDataItems">\n' +
' <xsl:with-param name="pnode" select="."/>\n' +
' </xsl:call-template>\n' +
' </xsl:template>\n' +
' <xsl:template match="DataItem">\n' +
' <xsl:call-template name="matchDataItems">\n' +
' <xsl:with-param name="pnode" select="."/>\n' +
' </xsl:call-template>\n' +
' </xsl:template>\n' +
' <xsl:template name="matchDataItems">\n' +
' <xsl:param name="pnode"/>\n' +
' <xsl:for-each select="$pnode/Property[@Name=' + "'" + sValueProperty1 + "'" + ']">\n' +
' <xsl:if test="child::node() = '+ "'"+ sPropertyValue1 +"'" + '">\n' +
' <xsl:call-template name="matchNextDataItems">\n' +
' <xsl:with-param name="npnode" select=".." />\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n' +
' </xsl:template>\n' +
' <xsl:template name="matchNextDataItems">\n' +
' <xsl:param name="npnode"/>\n' +
' <xsl:for-each select="$npnode/Property[@Name=' + "'" + sValueProperty2 + "'" + ']">\n' +
' <xsl:if test="child::node() = '+ "'"+ sPropertyValue2 +"'" + '">\n' +
' <xsl:call-template name="getData">\n' +
' <xsl:with-param name="cnode" select=".." />\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n' +
' </xsl:template>\n' +
' <xsl:template name="getData">\n' +
' <xsl:param name="cnode"/>\n' +
' <xsl:for-each select="$cnode/Property">\n' +
' <xsl:variable name="maxWidth">\n' +
' <xsl:call-template name="calcWidth">\n' +
' <xsl:with-param name="name" select="@Name"/>\n' +
' </xsl:call-template>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="string">\n' +
' <xsl:for-each select="child::node()">\n' +
' <xsl:value-of select="translate(., '+ "'&#x20;&#x9;&#xD;&#xA;', ' '" + ')"/>\n' +
' </xsl:for-each>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="padding">\n' +
' <xsl:value-of select="$maxWidth - string-length($string)"/>\n' +
' </xsl:variable>\n' +
' <xsl:value-of select="$string"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$padding"/>\n' +
' </xsl:call-template>\n' +
' <xsl:text>&#32;</xsl:text>\n' +
' </xsl:for-each>\n' +
' <xsl:value-of select="$newline"/>\n' +
' </xsl:template>\n' +
' <xsl:template name="calcWidth">\n' +
' <xsl:param name="name" />\n' +
' <xsl:for-each select="//Property[@Name = $name]">\n' +
' <xsl:sort select="string-length(child::node())" order="descending" data-type="number"/>\n' +
' <xsl:if test="position() = 1">\n' +
' <xsl:variable name="var1">\n' +
' <xsl:value-of select="string-length(child::node())"/>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="var2">\n' +
' <xsl:value-of select="string-length($name)"/>\n' +
' </xsl:variable>\n' +
' <xsl:choose>\n' +
' <xsl:when test="$var1 &gt; $var2">\n' +
' <xsl:value-of select="$var1"/>\n' +
' </xsl:when>\n' +
' <xsl:otherwise>\n' +
' <xsl:value-of select="$var2"/>\n' +
' </xsl:otherwise>\n' +
' </xsl:choose>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n' +
' </xsl:template>\n' +
' <xsl:template name="append-pad">\n' +
' <xsl:param name="length" select="0"/>\n' +
' <xsl:if test="$length != 0">\n' +
' <xsl:value-of select="' + "'&#32;'" + '"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$length - 1"/>\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:template>\n' +
'</xsl:stylesheet>\n';
return this.xslTransformation(xstText, oXml);
};
var createTableXsl = function(arrNames, arrValues) {
if (arrNames && arrValues && (arrNames.length != arrValues.length)) {
return null;
}
var xslValue = '<xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\n' +
' <xsl:output method="text"/>\n' +
' <xsl:strip-space elements="*"/>\n' +
' <xsl:variable name="newline" select="' + "'&#10;'" + '"/>\n' +
' <xsl:template match="DataItem[1]">\n' +
' <xsl:for-each select="Property">\n' +
' <xsl:variable name="maxWidthA">\n' +
' <xsl:call-template name="calcWidth">\n' +
' <xsl:with-param name="name" select="@Name"/>\n' +
' </xsl:call-template>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="paddingA">\n' +
' <xsl:value-of select="$maxWidthA - string-length(@Name)"/>\n' +
' </xsl:variable>\n' +
' <xsl:value-of select="@Name"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$paddingA"/>\n' +
' </xsl:call-template>\n' +
' <xsl:text>&#32;</xsl:text>\n' +
' </xsl:for-each>\n' +
' <xsl:value-of select="$newline"/>\n' +
' <xsl:call-template name="matchDataItems0">\n' +
' <xsl:with-param name="pnode0" select="."/>\n' +
' </xsl:call-template>\n' +
' </xsl:template>\n' +
' <xsl:template match="DataItem">\n' +
' <xsl:call-template name="matchDataItems0">\n' +
' <xsl:with-param name="pnode0" select="."/>\n' +
' </xsl:call-template>\n' +
' </xsl:template>\n';
for (var k = 0; k < arrNames.length - 1; k++) {
xslValue += ' <xsl:template name="matchDataItems' + k + '">\n' +
' <xsl:param name="pnode'+ k + '"/>\n' +
' <xsl:for-each select="$pnode'+ k + '/Property[@Name=' + "'" + arrNames[k] + "'" + ']">\n';
if (arrValues[k].length > 0) {
xslValue += ' <xsl:if test="child::node() = '+ "'"+ arrValues[k] +"'" + '">\n';
} else {
xslValue += ' <xsl:if test="not(child::node())">\n';
}
xslValue += ' <xsl:call-template name="matchDataItems'+ (k + 1) +'">\n' +
' <xsl:with-param name="pnode'+(k+1)+'" select=".." />\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n' +
' </xsl:template>\n';
}
k = arrNames.length - 1;
xslValue += ' <xsl:template name="matchDataItems' + k +'">\n' +
' <xsl:param name="pnode'+ k + '"/>\n';
if (k == 0 && arrNames[0] == '') {
xslValue += ' <xsl:call-template name="getData">\n' +
' <xsl:with-param name="cnode" select="." />\n' +
' </xsl:call-template>\n';
} else {
xslValue += ' <xsl:for-each select="$pnode' + k + '/Property[@Name=' + "'" + arrNames[k] + "'" + ']">\n' +
' <xsl:if test="child::node() = '+ "'"+ arrValues[k] +"'" + '">\n' +
' <xsl:call-template name="getData">\n' +
' <xsl:with-param name="cnode" select=".." />\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n';
}
xslValue += ' </xsl:template>\n' +
' <xsl:template name="getData">\n' +
' <xsl:param name="cnode"/>\n' +
' <xsl:for-each select="$cnode/Property">\n' +
' <xsl:variable name="maxWidth">\n' +
' <xsl:call-template name="calcWidth">\n' +
' <xsl:with-param name="name" select="@Name"/>\n' +
' </xsl:call-template>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="string">\n' +
' <xsl:for-each select="child::node()">\n' +
' <xsl:value-of select="translate(., '+ "'&#x20;&#x9;&#xD;&#xA;', ' '" + ')"/>\n' +
' </xsl:for-each>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="padding">\n' +
' <xsl:value-of select="$maxWidth - string-length($string)"/>\n' +
' </xsl:variable>\n' +
' <xsl:value-of select="$string"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$padding"/>\n' +
' </xsl:call-template>\n' +
' <xsl:text>&#32;</xsl:text>\n' +
' </xsl:for-each>\n' +
' <xsl:value-of select="$newline"/>\n' +
' </xsl:template>\n' +
' <xsl:template name="calcWidth">\n' +
' <xsl:param name="name" />\n' +
' <xsl:for-each select="//Property[@Name = $name]">\n' +
' <xsl:sort select="string-length(child::node())" order="descending" data-type="number"/>\n' +
' <xsl:if test="position() = 1">\n' +
' <xsl:variable name="var1">\n' +
' <xsl:value-of select="string-length(child::node())"/>\n' +
' </xsl:variable>\n' +
' <xsl:variable name="var2">\n' +
' <xsl:value-of select="string-length($name)"/>\n' +
' </xsl:variable>\n' +
' <xsl:choose>\n' +
' <xsl:when test="$var1 &gt; $var2">\n' +
' <xsl:value-of select="$var1"/>\n' +
' </xsl:when>\n' +
' <xsl:otherwise>\n' +
' <xsl:value-of select="$var2"/>\n' +
' </xsl:otherwise>\n' +
' </xsl:choose>\n' +
' </xsl:if>\n' +
' </xsl:for-each>\n' +
' </xsl:template>\n' +
' <xsl:template name="append-pad">\n' +
' <xsl:param name="length" select="0"/>\n' +
' <xsl:if test="$length != 0">\n' +
' <xsl:value-of select="' + "'&#32;'" + '"/>\n' +
' <xsl:call-template name="append-pad">\n' +
' <xsl:with-param name="length" select="$length - 1"/>\n' +
' </xsl:call-template>\n' +
' </xsl:if>\n' +
' </xsl:template>\n' +
'</xsl:stylesheet>\n';
return xslValue;
};
this.makeTextTableArr = function (oXml, arrValuesProperty, arrValuesPropertyValues) {
var xslText = createTableXsl(arrValuesProperty, arrValuesPropertyValues);
if (xslText) {
return this.xslTransformation(xslText, oXml);
}
return null;
};
this.makeTextTablePropertyBagArr = function (oApi, oXml,arrValuesProperty, arrValuesPropertyValues) {
var trTextTable = this.makeTextTableArr(oXml, arrValuesProperty, arrValuesPropertyValues);
var oBag = oApi.CreatePropertyBag();
if (trTextTable) {
for(var j = 0; j < arrValuesProperty.length; j++) {
oBag.AddValue(arrValuesProperty[j], arrValuesPropertyValues[j]);
}
oBag.AddValue("Result", "\n\r" + trTextTable);
}
oApi.AddItem(oBag);
oBag = null;
};
this.makeTextTablePropertyBagEx = function (oApi, oXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
var trTextTable = this.makeTextTableEx(oXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
var oBag = oApi.CreatePropertyBag();
oBag.AddValue(sValueProperty1, sPropertyValue1);
oBag.AddValue(sValueProperty2, sPropertyValue2);
if (trTextTable) {
oBag.AddValue("Result", "\n\r" + trTextTable);
} else {
oBag.AddValue("Result", " ");
}
oApi.AddItem(oBag);
oBag = null;
};
this.getMasterXmlObject = function () {
return poMasterXml;
};
this.getReferenceXmlObject = function () {
return poReferenceXml;
};
this.makeMasterTextTablePropertyBag = function (oApi, sValueProperty, sPropertyValue) {
if ((psMasterFilename.length > 0) && (psFilepath.length > 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length > 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
this.makeTextTablePropertyBag(oApi, poMasterXml, sValueProperty, sPropertyValue);
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
}
}
};
this.makeMasterTextTable = function (sValueProperty, sPropertyValue) {
if ((psMasterFilename.length > 0) && (psFilepath.length > 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length > 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
var rtVal = this.makeTextTable(poMasterXml, sValueProperty, sPropertyValue);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
}
}
};
this.makeMasterTextTablePropertyBagEx = function (oApi, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
if ((psMasterFilename.length > 0) && (psFilepath.length > 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length > 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
this.makeTextTablePropertyBagEx(oApi, poMasterXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
}
}
};
this.makeMasterTextTableEx = function (sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
if ((psMasterFilename.length > 0) && (psFilepath.length > 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length > 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
var rtVal = this.makeTextTableEx(poMasterXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
}
}
};
this.makeMasterTextTableArr = function (arrNames, arrValues) {
if ((psMasterFilename.length > 0) && (psFilepath.length > 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length > 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
var rtVal = this.makeTextTableArr(poMasterXml, arrNames, arrValues);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
}
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
}
}
};
};
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) && 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 > 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);
};
};
var trim = function (str) {
return str.replace(/^\s+|\s+$/g,"");
};
var oLog = new CTLogger(oAPI);
var cEventNo = 16401;
var aRegPath = "SOFTWARE\\ComTrade\\MP for EMC Documentum";
var aRegKey = "InstallDir";
var aFileName = "dmmon-data-new.xml";
var tvar = trim(WScript.Arguments(0));
if (tvar.length > 0) {
aRegPath = tvar;
}
tvar = trim(WScript.Arguments(1));
if (tvar.length > 0) {
aRegKey = tvar;
}
tvar = trim(WScript.Arguments(2));
if (tvar.length > 0) {
aFileName = tvar;
}
var targetComputer = ".";
tvar = trim(WScript.Arguments(3));
if (tvar.length > 0) {
targetComputer = tvar;
}
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));
return {
'Continue' : bContinue,
'PID' : iPid,
'AgentExists' : bAgentFound,
'FileExists' : bFileExists,
'RegistryExists' : bRegistryFound,
'File' : sFilename,
'FullPath' : sFullPath,
'Path' : sPath,
'ErrorDescription' : sError,
'ErrorNumber' : iError
};
};
var svc_name="dmmp_svc";
var agentStatus = getAgentStatus(targetComputer, svc_name, aFileName, aRegPath, aRegKey, false);
if (agentStatus.Continue == false) {
agentStatus = null;
var oBagObj = oAPI.CreatePropertyBag();
oAPI.Return(oBagObj);
oBagObj = null;
oAPI = null;
WScript.Quit(0);
}
var oXmlDiff = new CTXmlDiff();
oXmlDiff.setFilepath(agentStatus.Path);
oXmlDiff.setMasterFilename(aFileName);
oXmlDiff.setXslContent(xslText);
var res = oXmlDiff.createMasterPropertyBag(oAPI);
if (res == null && oXmlDiff.errorCode() != 0) {
oLog.WriteError("Error: "+ oXmlDiff.errorCode() + " - " + oXmlDiff.errorDescription(), cEventNo);
}
oAPI.ReturnItems();
oLog = null;
oAPI = null;
agentStatus = null;
oXmlDiff.destroy();
oXmlDiff = null;
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="getData">
<Node ID="PassThrough"/>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<TriggerOnly>true</TriggerOnly>
</ProbeActionModuleType>