Re: JS: вызов методов WMI с выходными параметрами
Да, вывод в первом посте прочитал, но всё же.
Не подскажет ли кто, как будет выглядеть на JS симпатичный VBS скрипт, определяющий PID процесса скрипта:
set test=GetObject("winmgmts:\\.\root\cimv2:win32_process.Handle='" & CreateObject("WScript.Shell").Exec("rundll32 kernel32,Sleep").ProcessId & "'")
msgbox test.ParentProcessId
test.TerminateПриношу свои извинения автору - ссылку на оригинал потерял...
Re: JS: вызов методов WMI с выходными параметрами
Serge Yolkin, как вариант:
var WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
CLine = (WScript.FullName + '" "' + WScript.ScriptFullName).replace(/\\/g, '\\\\')
Query = "SELECT Handle FROM Win32_Process WHERE CommandLine Like '%" + CLine + "%'"
for(p = new Enumerator(WMI.ExecQuery(Query)) ; !p.atEnd() ; p.moveNext())
WScript.Echo("PID WScript.exe данного скрипта: " + p.item().Handle);4 2014-04-19 21:50:58 (изменено: JSmаn, 2014-04-20 08:31:50)
Re: JS: вызов методов WMI с выходными параметрами
function GetPID() {
var WshShell = WScript.CreateObject("WScript.Shell");
var ChildProc = WshShell.Exec("rundll32 kernel32,Sleep").ProcessId;
var test = GetObject("winmgmts:\\\\.\\root\\cimv2:win32_process.Handle='" + ChildProc + "'");
var Result = test.ParentProcessId;
test.Terminate();
return Result;
}
Re: JS: вызов методов WMI с выходными параметрами
ypppu, а что обсуждать-то? Каким способом узнавать как называть параметры? Один и тот же код везде, по сути.
Re: JS: вызов методов WMI с выходными параметрами
JSman
var WshShell = WScript.CreateObject("WScript.Shell");?
Re: JS: вызов методов WMI с выходными параметрами
Flasher, добавил ![]()
Re: JS: вызов методов WMI с выходными параметрами
ypppu, а что обсуждать-то? Каким способом узнавать как называть параметры? Один и тот же код везде, по сути.
Просто товарищ Serge Yolkin начал обсуждать и задавать вопрос в Коллекции. Мне пришлось создать новую тему и перенести сюда его сообщение.
9 2014-04-22 13:52:47 (изменено: Serge Yolkin, 2014-04-22 16:31:55)
Re: JS: вызов методов WMI с выходными параметрами
Просто товарищ Serge Yolkin начал обсуждать и задавать вопрос в Коллекции. Мне пришлось создать новую тему и перенести сюда его сообщение.
Прошу прощения, на пост вышел поиском, и не обратил внимания на форум, в котором он находится.
Всем спасибо за помощь!
P.S. Пример от Flasher не заработал
без всяких ошибок, просто ничего не показал (Win7x32). Пример от JSman работает отлично.
Re: JS: вызов методов WMI с выходными параметрами
P.S. Пример от Flasher не заработал
без всяких ошибок, просто ничего не показал (Win7x32).
Странно, у меня система та же, всё показывает.
Re: JS: вызов методов WMI с выходными параметрами
на пост вышел поиском, и не обратил внимания на форум, в котором он находится.
Теперь зато ясно, как такое происходит.
Re: JS: вызов методов WMI с выходными параметрами
Serge Yolkin
Хотел бы всё-таки уточнить, ты никаких правок не делал? Только копипаст?
Re: JS: вызов методов WMI с выходными параметрами
Serge Yolkin
Хотел бы всё-таки уточнить, ты никаких правок не делал? Только копипаст?
У меня аналогично не пашет. Я думаю, что не совсем корректно код написан.
Например, что первое бросается в глаза - это
CLine = (WScript.FullName + '" "' + WScript.ScriptFullName).replace(/\\/g, '\\\\')Во-первых, нет смысла экранировать косую черту.
Во-вторых, если рабочей папкой программы установлена директория, в которой находится скрипт, то можно допустить, что вызов может быть следующим: wscript.exe test.js. При этом WScript.ScriptFullName покажет полный путь. Имя процесса может быть без расширения "exe". Пример в SCITE запустите для разнообразия. Кавычки также не всегда есть.
Далее,
CLine = (WScript.FullName + '" "' + WScript.ScriptFullName).replace(/\\/g, '\\\\')
Query = "SELECT Handle FROM Win32_Process WHERE CommandLine Like '%" + CLine + "%'"Ну явно же видно, что Вы не совсем верно кавычки расставили. Получается, LIKE '%wscript.exe" "test.js%'.
Плюс Ваш алгоритм не дает гарантию, что Вы получите идентификатор иного скриптового процесса, который аналогично был запущен с тем же хостом и скриптом в качестве аргумента.
Думаю, что дал развернутый ответ.
Re: JS: вызов методов WMI с выходными параметрами
Flasher
Никаких правок. Вставил эхо перед циклом - отрабатывает, а из цикла - тишина. С кавычками поигрался, replace убирал - тишина.
Re: JS: вызов методов WMI с выходными параметрами
Во-первых, нет смысла экранировать косую черту.
Это разве что-то нарушит?
Во-вторых, если рабочей папкой программы установлена директория, в которой находится скрипт, то можно допустить, что вызов может быть следующим: wscript.exe test.js. При этом WScript.ScriptFullName покажет полный путь. Имя процесса может быть без расширения "exe". Пример в SCITE запустите для разнообразия. Кавычки также не всегда есть.
Это всё справедливо для случая намеренного запуска из комстроки, тогда скрипт действительно не отработает. Я же писал для случая прямого вызова скрипта из папки. Как сами запускаете?
Вставил эхо перед циклом - отрабатывает, а из цикла - тишина.
Проблема может быть только в составленном запросе. Только разобраться бы, что там может не соответствовать действительности. Ты скрипт запускаешь из папки по Enter?
Re: JS: вызов методов WMI с выходными параметрами
1) лишняя операция.
2) в коде целесообразно учитывать все условия. Запускаю из папки, в том числе.
17 2014-04-23 00:21:21 (изменено: Flasher, 2014-04-23 00:45:18)
Re: JS: вызов методов WMI с выходными параметрами
2) А запуская из папки, тоже не отрабатывает? Если да, то тут какие могут быть причины?
Кстати, я попробовал не экранировать двойную косую - ругается.
Re: JS: вызов методов WMI с выходными параметрами
Flasher, все-таки пример Ваш работает, но только при запуске из папки. Недостатки я перечислил.
19 2014-04-23 13:51:28 (изменено: Serge Yolkin, 2014-04-23 14:29:12)
Re: JS: вызов методов WMI с выходными параметрами
Сначала запускал из AkelPad'а, сейчас попробовал из TC и Проводника - тот же результат: тишина... Добавил в конце
WScript.echo(Query);получил
SELECT Handle FROM Win32_Process WHERE CommandLine Like '%C:\\Windows\\System32\\WScript.exe" "G:\\Adds\\Scripting\\Expiriences\\JS'n'VBS\\получить свой PID Flasher.js%'для всех 3-х типов запуска. Кавычки в середине не по феншую... Если убрать совсем
SELECT Handle FROM Win32_Process WHERE CommandLine Like '%C:\\Windows\\System32\\WScript.exe G:\\Adds\\Scripting\\Expiriences\\JS'n'VBS\\получить свой PID Flasher.js%'результат тот же, если добавить в начале и в конце
SELECT Handle FROM Win32_Process WHERE CommandLine Like '%"C:\\Windows\\System32\\WScript.exe" "G:\\Adds\\Scripting\\Expiriences\\JS'n'VBS\\получить свой PID Flasher.js"%'ничего не меняется...
О! Победил.
var WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
var CLine = (WScript.FullName + '" "' + WScript.ScriptFullName)
.replace(/\\/g, "\\\\")
.replace(/'/g, "\\'");
var Query = "SELECT Handle FROM Win32_Process WHERE CommandLine Like '%\"" + CLine + "\"%'";
for(var p = new Enumerator(WMI.ExecQuery(Query)) ; !p.atEnd() ; p.moveNext())
WScript.Echo("PID WScript.exe данного скрипта: " + p.item().Handle);
удвоение слэшей - обязательно, иначе не работает, не любит апострофы в путях, в определении Query добавил кавычки вокруг CLine, запускается и из папки, и из Акела, и из комстроки.
20 2014-04-23 14:35:50 (изменено: Flasher, 2014-04-23 14:49:13)
Re: JS: вызов методов WMI с выходными параметрами
Flasher, все-таки пример Ваш работает, но только при запуске из папки. Недостатки я перечислил.
ОК, спасибо, что подтвердили. С недостатками согласен, даже знал про ещё один, поправлю, как разберусь с запрашиваемой стороной.
...JS'n'VBS...
Вот где собака порылась. Апострофы в пути к файлу дают ошибку в запросе. Хм. В мыслях единственное как это обойти, обрезать путь до первого апострофа, но что-то не ахти идея, с учётом того на каких отрезках этот апостроф может вылезти. Проще вообще отказаться от них в именах скриптовых подпапок.
.replace(/'/g, "\\'");Какая-то сомнительная история. Добавил в запрос косые перед апострофами - результата нет.
Re: JS: вызов методов WMI с выходными параметрами
результата нет
странно, у меня заработало...
Да, проверил оба способа в HTA - оба работают (с минимальными изменениями):
<head><hta:application id="HTApp" /></head>
<script type="text/javascript" language="JavaScript">//<![CDATA[
var i,
k=new ActiveXObject('Scripting.FileSystemObject').getSpecialFolder(1);
l=('"'+k+'\\mshta.exe" '+HTApp.commandLine).replace(/\\/g,'\\\\').replace(/'/g,'\\\''),
m=GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2'),
n='SELECT Handle FROM Win32_Process WHERE CommandLine Like \'%'+l+'%\'';
for(i=new Enumerator(m.execQuery(n));!i.atEnd();i.moveNext())alert(i.item().handle);
//]]></script><script type="text/javascript" language="JavaScript">//<![CDATA[
var
p=new ActiveXObject('WScript.Shell').Exec('rundll32 kernel32,Sleep').processId,
q=GetObject('winmgmts:\\\\.\\root\\cimv2:win32_process.Handle="'+p+'"'),
r=q.parentProcessId;
q.terminate();
alert(r);
//]]></script>
