// Event Messages
// Download failure
var E_NO_INTERNET_CONNECTION = 1000;
var E_NO_INTERNET_CONNECTION_MSG = "Could not retrieve Management Pack Catalog file: ";
// XML Parsing failure
var E_NO_PARSE_FAILED = 1001;
var E_NO_PARSE_FAILED_MSG = "Could not parse Management Pack Catalog file: ";
// XML Parsing failure
var E_NO_GENERAL_FAILURE = 1002;
var E_NO_GENERAL_FAILURE_MSG = "General failure: ";
// Later version of MP found
var LATER_VERSION_MP_FOUND = 2000;
var EVENT_TYPE_SUCCESS = 0;
var EVENT_TYPE_ERROR = 1;
var EVENT_TYPE_WARNING = 2;
var EVENT_TYPE_INFORMATION = 4;
var adStateOpen = 1;
var oAPI = new ActiveXObject("MOM.ScriptAPI");
//Check the input arguments
var oArgs = WScript.Arguments;
if (oArgs.Length != 3)
{
WScript.Quit(-1);
}
var mpCatalogFileUrl = oArgs(0);
var opsMgrDBServerName = oArgs(1);
var opsMgrDBName = oArgs(2);
// Check if we have access to the Internet
// Log an error if we do not have access to the internet
// Download the MP Catalog file url
var mpCatalogFile = GetMPCatalogFile(oArgs(0));
var mpDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
// Load the MP Catalog file
LoadCatalogFile(mpCatalogFile)
// Connect to the database and the list and versions of the MPs
GetMPInfo(opsMgrDBServerName, opsMgrDBName);
function GetMPCatalogFile(mpCatalogFileUrl)
{
// Connect to the internet and get the MP Catalog file
var xmlHttp = new ActiveXObject("Microsoft.XmlHttp");
if (xmlHttp.Status != 200)
{
// Log an error indicating that we could not connect to the internet
CreateEvent(msgSource, E_NO_INTERNET_CONNECTION, EVENT_TYPE_ERROR, E_NO_INTERNET_CONNECTION_MSG + mpCatalogFileUrl);
WScript.Quit(-1);
}
return xmlHttp.responseText;
}
function LoadCatalogFile(fileName)
{
try
{
mpDoc.loadXML(fileName);
if (mpDoc.parseError.errorCode != 0)
{
var myErr = mpDoc.parseError;
function GetLatestSqlNativeClientDriver()
{
var objShell = new ActiveXObject("WScript.Shell");
var objExec = objShell.Exec("REG QUERY HKEY_LOCAL_MACHINE\\Software\\ODBC\\ODBCINST.INI");
var subKeysStr = objExec.StdOut.ReadAll();
var subKeys = subKeysStr.split("\n");
var strDriverName = "SQLOLEDB";
for (var i = 1; i < subKeys.length; ++i)
{
if(subKeys[i].indexOf("SQL Server Native Client") > 0)
{
var strRegistryPath = subKeys[i].substring(0,subKeys[i].length-1)+ "\\Driver";
var strRegistryValue = objShell.RegRead(strRegistryPath);
strRegistryValue = strRegistryValue.substring(strRegistryValue.lastIndexOf("\\")+1);
var indexOfDot = strRegistryValue.indexOf(".");
strDriverName = strRegistryValue.substring(0,indexOfDot);
}
}
return strDriverName;
}
function GetMPInfo(opsMgrDBServerName, opsMgrDBName)
{
// Create the ADO connection object
var cnADOConnection = new ActiveXObject("ADODB.Connection")
// Create a recordset Object
var rst = WScript.CreateObject("ADODB.Recordset");
if (latestVersion != null)
{
var latestVersionParts = latestVersion.split(".");
var currentVersionParts = currentVersion.Value.split(".");
// Now compare the versions
if (latestVersionParts.length == currentVersionParts.length)
{
// compare the respective parts
for (versionPartIndex = 0; versionPartIndex < latestVersionParts.length; versionPartIndex++)
{
var strlatestVersionPart = latestVersionParts[versionPartIndex];
var strcurrentVersionPart = currentVersionParts[versionPartIndex];
var latestVersionPart = parseInt(strlatestVersionPart);
var currentVersionPart = parseInt(strcurrentVersionPart);
if (latestVersionPart < currentVersionPart)
{
break;
}
else if (latestVersionPart > currentVersionPart)
{
// log event indicating the name of the newer MP and the version
CreateEvent(msgSource, LATER_VERSION_MP_FOUND, EVENT_TYPE_INFORMATION, mpName + " " + latestVersion);
break;
}
}
}
}
rst.MoveNext();
}
}
catch(err)
{
CreateEvent(msgSource, E_NO_GENERAL_FAILURE, EVENT_TYPE_ERROR, E_NO_GENERAL_FAILURE_MSG + err.message);
}
finally
{
if (rst.State == adStateOpen)
{
rst.Close();
rst = null;
}
if (cnADOConnection.State == adStateOpen)
{
cnADOConnection.Close();
cnADOConnection = null;
}
}
}
function GetMPVersionFromCatalogFile(mpName)
{
var latestVersion = null;
// Parse the catalog file and find the MP version corresponding to the MP name
var xPathQuery = "//ManagementPacks//MPDownload//MP//ID[.='" + mpName + "']";
var mpIdNode = mpDoc.selectSingleNode(xPathQuery);
if (mpIdNode != null)
{
var mpElementNode = mpIdNode.parentNode;
var nodeList = mpElementNode.selectNodes("./Version");
if (nodeList.length == 1)
{
latestVersion = nodeList.item(0).text;
}
}