// Configure the process to break away from the job
var objStartup = objWMIService.Get("Win32_ProcessStartup");
var objConfig = objStartup.SpawnInstance_();
objConfig.ShowWindow = SW_HIDE;
objConfig.CreateFlags = CREATE_BREAKAWAY_FROM_JOB;
// Create the process
var objProcess = objWMIService.Get("Win32_Process");
var intProcessID;
var intReturn = objProcess.Create(strCommand, null, objConfig, intProcessID);
function GetPath()
{
var path = WScript.ScriptFullName;
path = path.substr(0, path.lastIndexOf("\\") + 1);
return path;
}
var oShell = new ActiveXObject("WScript.Shell");
var oAPI = new ActiveXObject("MOM.ScriptAPI");
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
var oArgs = WScript.Arguments;
var RestartAttempts = oArgs(0);
var TimeOut = parseInt(oArgs(1)) * 1000;
var SCRIPT_NAME = "RestartHealthService.js";
var ENU_MESSAGE_BASE = "Restarting Health Service. ";
var EVENTLOG_SUCCESS = 0x0000; // Information event
var EVENTLOG_ERROR_TYPE = 0x0001; // Error event
var EVENTLOG_WARNING_TYPE = 0x0002; // Warning event
var eventIdWarning = 6060;
var eventIdError = 6061;
var eventIdSuccess = 6062;
var ServiceScript = "SELECT ProcessId, State FROM Win32_Service WHERE name = 'HealthService'";
var successul = false;
for (var i=0; i<RestartAttempts; i++)
{
try
{
// Stop Service
oShell.Run("net stop HealthService");
if (GetServiceState() != "Stopped")
{
WScript.Sleep(TimeOut);
if (GetServiceState() != "Stopped")
{
// Terminate in case service failed to stop
var serviceItems = new Enumerator(objWMIService.ExecQuery(ServiceScript));
var procItems = new Enumerator(objWMIService.ExecQuery("SELECT ProcessId FROM Win32_Process WHERE ProcessId = " + serviceItems.item().ProcessId));
var terminated = false;
while (!procItems.atEnd())
{
var successful = 1;
var counter = 0;
while (successful != 0 && counter < RestartAttempts)
{
successful = procItems.item().Terminate();
if (successful == 0)
{
terminated = true;
break;
}
counter++;
}
procItems.moveNext()
}
if (!terminated)
{
throw "Failed to Terminate Health Service";
}
}
}
for (var j=0; j<3; j++)
{
// Start Service
oShell.Run("net start HealthService");
WScript.Sleep(TimeOut);
if (GetServiceState() == "Running")
{
successful = true;
break;
}
}
if (successful) break;
}
catch(e)
{
if (e != 0)
{
var errorMessage = ENU_MESSAGE_BASE + "Error: " + e;
oAPI.LogScriptEvent(SCRIPT_NAME, eventIdWarning, EVENTLOG_WARNING_TYPE, errorMessage);
}
}
}
if (successful)
{
var message = ENU_MESSAGE_BASE + "Service successfully restarted.";
oAPI.LogScriptEvent(SCRIPT_NAME, eventIdSuccess, EVENTLOG_SUCCESS, message);
}
else
{
var errorMessage = ENU_MESSAGE_BASE + "Failed to restart service.";
oAPI.LogScriptEvent(SCRIPT_NAME, eventIdError, EVENTLOG_ERROR_TYPE, errorMessage);
}
function GetServiceState()
{
var serviceItems = new Enumerator(objWMIService.ExecQuery(ServiceScript));
if (null == serviceItems || null == serviceItems.item())
{
throw "HealthService does not exist!";
}
return serviceItems.item().State;
}