var SCRIPT_NAME = "Citrix Session In Down State";
CITRIX_WMI_CONNECT = "WINMGMTS:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}\\\\.\\root\\Citrix";
// event constants
var EVENT_TYPE_SUCCESS = 0;
var EVENT_TYPE_ERROR = 1;
var EVENT_TYPE_WARNING = 2;
var EVENT_TYPE_INFORMATION = 4;
//Logs an error event to the event log
function logError(message, error)
{
var str = SCRIPT_NAME + ":\n" + message;
if (error)
{
var num = (error.number < 0) ? (error.number + 0x100000000) : error.number;
var estr = error.description;
if (num == 0x80010105)
estr += " [RPC_E_SERVERFAULT: The server threw an exception.]";
else if (num == 0x80041001)
estr += " [WBEM_E_FAILED]";
else if (num == 0x80010108)
estr += " [RPC_E_DISCONNECTED]";
else if (num == 0x8007007e)
estr += " [ERROR_MOD_NOT_FOUND: The specified module could not be found.]";
else if (num == 0x80041010)
estr += " [WBEM_E_INVALID_CLASS]";
else if (num == 0x8004100e)
estr += " [WBEM_E_INVALID_NAMESPACE]";
if (estr == "")
estr = "<error description not given>";
try
{
var down = new Array();
var e = new Enumerator( oSessions );
for (; !e.atEnd(); e.moveNext())
{
var session = e.item();
if (session.SessionState == SESSION_DOWN)
down[down.length] = session.SessionID;
}
}
catch (ex)
{
logError("WMI error retrieving Citrix session information", ex);
}
if (down.length == 0) {
return;
}
var isDown = new Array();
for (var i = 0; i < down.length; i++)
{
isDown[ down[i] ] = true;
}
// wait for given number of seconds before rechecking to avoid
// alert for spurious 'down' sessions while resetting
try
{
WScript.Sleep(1000 * SecondsDown);
}
catch (ex)
{
logError("Failed to sleep for " + SecondsDown + " seconds", ex);
return;
}
try
{
var oAPI = new ActiveXObject("MOM.ScriptAPI");
var oBag = oAPI.CreatePropertyBag();
}
catch (ex)
{
logError("Could not create property bag", ex);
return;
}
// Do a second pass over sessions array to make find sessions that are still in a down state
try
{
var strSessions = "";
var e = new Enumerator( oSessions );
for (; !e.atEnd(); e.moveNext())
{
var session = e.item();
if (isDown[session.SessionID] &&
session.SessionState == SESSION_DOWN)
{
strSessions += session.SessionName + " (" + session.SessionID + ") ";
}
}
}
catch (ex)
{
logError("WMI error retrieving Citrix session information", ex);
}