var SW_HIDE = 0;
var CREATE_BREAKAWAY_FROM_JOB = 0x1000000;
var SERVICE_NAME = "HealthService";
//var SERVICE_NAME = "Spooler";
var SEVERITY_ERROR = 1;
var SEVERITY_WARNING = 2;
var SEVERITY_INFO = 4;
var HKLM = 0x80000002;
var regPath = "SYSTEM\\CurrentControlSet\\Services\\HealthService\\Parameters";
var regPathMG = "SYSTEM\\CurrentControlSet\\Services\\HealthService\\Parameters\\Management Groups";
var scriptMode = WScript.Arguments(0);
var stopAttempts = -1;
var startAttempts = -1;
var stopTimeout = -1;
var startTimeout = -1;
var targetMGName = "";
var pVerStorMax = 0;
var pCacheMax = 0;
var pCheckDepMax = 0;
var stQItems = 0;
var queueSize = 0;
var persistenceVersionStoreMax = 0;
var persistenceCacheMax = 0;
var persistenceCheckpointDepthMax = 0;
var stateQueueItems = 0;
var maxQueueSizeKb = 0;
var momApi = new ActiveXObject("MOM.ScriptAPI");
var scriptShell = new ActiveXObject("WScript.Shell");
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function isInt(n) {
return n % 1 === 0;
}
function convertArg(a) {
var replaced = false;
if (a.indexOf(',') > 0) {
var b = a.replace(',', '.');
replaced = true;
} else {
b = a;
}
if (isNumber(b)) {
if (!isInt(b)) {
b = Math.round(b * 100) / 100;
} else {
b = parseInt(b);
}
}
if (replaced) {
b = (b + "").replace('.', ',');
}
return b;
}
function QueryForService(svcName) {
var item = null;
var wql = "SELECT * FROM Win32_Service WHERE name = '" + svcName + "'";
var items = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2").ExecQuery(wql);
if (items != null) {
var enumItems = new Enumerator(items);
item = enumItems.item();
}
return item;
}
function GetServiceState() {
var procState = "N/A";
var hsSvc = QueryForService(SERVICE_NAME);
if (hsSvc != null)
procState = hsSvc.State;
return procState;
}
function GetProcessId() {
var procID = -1;
var hsSvc = QueryForService(SERVICE_NAME);
if (hsSvc != null)
procID = hsSvc.ProcessId;
return procID;
}
function StartService() {
var cmdTxt = "net start " + SERVICE_NAME;
scriptShell.Run(cmdTxt);
}
function StopService() {
var cmdTxt = "net stop " + SERVICE_NAME;
scriptShell.Run(cmdTxt);
}
function TerminateProcess(pid) {
var query = "SELECT * FROM Win32_Process WHERE ProcessId = " + pid;
var item = null;
var res = -1;
var items = GetObject("winmgmts:{(Debug)}!\\\\.\\root\\cimv2").ExecQuery(query);
if (items != null) {
var enumItems = new Enumerator(items);
item = enumItems.item();
if (item != null)
res = item.Terminate();
}
return res;
}
function getCurrentSettings() {
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
try {
var svc = locator.ConnectServer(null, "root\\default");
var reg = svc.Get("StdRegProv");
var method = reg.Methods_.Item("GetDWORDValue");
var inParam = method.InParameters.SpawnInstance_();
inParam.hDefKey = HKLM;
inParam.sSubKeyName = regPath;
inParam.sValueName = "Persistence Version Store Maximum";
var outParam = reg.ExecMethod_(method.Name, inParam);
if (outParam.uValue != null)
persistenceVersionStoreMax = outParam.uValue;
var enumKeyMethod = reg.Methods_.Item("EnumKey");
var enumKeyInParam = enumKeyMethod.InParameters.SpawnInstance_();
enumKeyInParam.hDefKey = HKLM;
enumKeyInParam.sSubKeyName = regPathMG;
outParam = reg.ExecMethod_(enumKeyMethod.Name, enumKeyInParam);
if (outParam.sNames != null) {
var enumValuesMethod = reg.Methods_.Item("EnumValues");
var enumValuesInParam = enumValuesMethod.InParameters.SpawnInstance_();
enumValuesInParam.hDefKey = HKLM;
var vbArr = new VBArray(outParam.sNames);
var mgArray = vbArr.toArray();
for (var i = 0; i < mgArray.length; i++) {
var mgName = mgArray[i];
if (mgName.toLowerCase() == targetMGName.toLowerCase()) {
enumValuesInParam.sSubKeyName = regPathMG + "\\" + mgName;
outParam = reg.ExecMethod_(enumValuesMethod.Name, enumValuesInParam);
if (outParam.sNames != null) {
vbArr = new VBArray(outParam.sNames);
var queueSizeArray = vbArr.toArray();
for (var j = 0; j < queueSizeArray.length; j++) {
if (queueSizeArray[j].toString().toLowerCase() == "maximumqueuesizekb") {
inParam.sSubKeyName = regPathMG + "\\" + mgName;
inParam.sValueName = "maximumQueueSizeKb";
outParam = reg.ExecMethod_(method.Name, inParam);
if (outParam.uValue != null)
maxQueueSizeKb = outParam.uValue;
}
}
}
}
}
}
} catch (e) {
momApi.LogScriptEvent(SCRIPT_NAME, EVENT_ID, SEVERITY_ERROR, e.Message);
}
}
function setRegValue(n, v) {
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var retVal = -1;
try {
var svc = locator.ConnectServer(null, "root\\default");
var reg = svc.Get("StdRegProv");
var method = reg.Methods_.Item("SetDWORDValue");
var inParam = method.InParameters.SpawnInstance_();
inParam.hDefKey = HKLM;
inParam.sSubKeyName = regPath;
inParam.sValueName = n;
inParam.uValue = v;
function setQueueSize(qSize) {
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var retVal = -1;
try {
var svc = locator.ConnectServer(null, "root\\default");
var reg = svc.Get("StdRegProv");
var enumKeyMethod = reg.Methods_.Item("EnumKey");
var enumKeyInParam = enumKeyMethod.InParameters.SpawnInstance_();
enumKeyInParam.hDefKey = HKLM;
enumKeyInParam.sSubKeyName = regPathMG;
outParam = reg.ExecMethod_(enumKeyMethod.Name, enumKeyInParam);
if (outParam.sNames != null) {
var enumValuesMethod = reg.Methods_.Item("EnumValues");
var enumValuesInParam = enumValuesMethod.InParameters.SpawnInstance_();
enumValuesInParam.hDefKey = HKLM;
var vbArr = new VBArray(outParam.sNames);
var mgArray = vbArr.toArray();
for (var i = 0; i < mgArray.length; i++) {
var mgName = mgArray[i];
if (mgName.toLowerCase() == targetMGName.toLowerCase()) {
enumValuesInParam.sSubKeyName = regPathMG + "\\" + mgName;
outParam = reg.ExecMethod_(enumValuesMethod.Name, enumValuesInParam);
if (outParam.sNames != null) {
vbArr = new VBArray(outParam.sNames);
var queueSizeArray = vbArr.toArray();
for (var j = 0; j < queueSizeArray.length; j++) {
if (queueSizeArray[j].toString().toLowerCase() == "maximumqueuesizekb") {
var method = reg.Methods_.Item("SetDWORDValue");
var inParam = method.InParameters.SpawnInstance_();
inParam.hDefKey = HKLM;
inParam.sSubKeyName = regPathMG + "\\" + mgName;
inParam.sValueName = "maximumQueueSizeKb";
inParam.uValue = qSize;
var res = reg.ExecMethod_(method.Name, inParam);
retVal = res.ReturnValue;
}
}
}
}
}
}