1

Тема: JScript: вызов методов WMI с выходными параметрами

Иногда в сценариях с использованием WMI требуется вызов методов WMI с выходными параметрами. Например, создать процесс и получить его pID. На VBScript это получается вполне естественно:

Set objProcess = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
errReturn = objProcess.Create("cmd", null, null, pID)
WScript.Echo pID

На JScript при таком подходе в переменную pID ничего не попадёт (в примере ниже эта переменная так и останется нулём):

objProcess = GetObject("winmgmts:\\\\.\\root\\cimv2:Win32_Process");
pID = 0;
errReturn = objProcess.Create("cmd", null, null, pID);
WScript.Echo(pID);

Решение проблемы на JScript выглядит довольно громоздко:

objProcess = GetObject("winmgmts:\\\\.\\root\\cimv2:Win32_Process");
objInParams = objProcess.Methods_("Create").InParameters.SpawnInstance_();
objInParams.CommandLine = "cmd";
objOutParams = objProcess.ExecMethod_("Create", objInParams);
WScript.Echo(objOutParams.ProcessId);

Вывод: сценарии с использованием WMI часто удобнее писать на VBScript .

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: JScript: вызов методов WMI с выходными параметрами

Ещё один пример. На этот раз вызывается метод "EnumKey" WMI-класса StdRegProv, который принимает выходной параметр в виде массива, который будет необходимо потом перебирать в коде довольно громоздким способом:

var objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv");
var objInParams = objReg.Methods_("EnumKey").InParameters.SpawnInstance_();
objInParams.hDefKey = 0x80000001;
objInParams.sSubKeyName = 'Software\\Microsoft';
var objOutParams = objReg.ExecMethod_("EnumKey", objInParams);
var sNames = objOutParams.sNames.toArray();
for (var i=0; i<=sNames.length-1; i++) {
    WScript.Echo(sNames[i]);
}

Пример читает и выводит на экран названия разделов реестра внутри ветки HKEY_CURRENT_USER\Software\Microsoft.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.