1

Тема: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Есть ли возможность запустить JS/VBScript, введя код в консоли?
Т.е., что-то, типа:

CScript.exe <что-то_ещё> WScript.Echo('Hello, world')

2

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Крепыш, нет. Только через временный файл:

echo WScript.Echo^('Hello, world'^)>.tmp& cscript //nologo //e:javascript .tmp& del .tmp

.

3

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Крепыш, если хочется интеративности, то стоит посмотреть в сторону REPL'ов, по крайней мере для JS такой попадался как-то. У меня также была своя реализация, но ее развитие было заброшено.

4 (изменено: Rumata, 2014-10-11 22:19:06)

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Пользуясь случаем: JScript/VBScript: WSH интерпретатор

echo WScript.Echo("Hello, world!") | wscmd /q

Если предложенное очень сложно, то попробуйте простой ход:
1. создать файл repl.js с таким содержимым

eval(WScript.StdIn.ReadAll());

2. запускать его по той же схеме

echo WScript.Echo("Hello, world!") | cscript //nologo repl.js

3. можете воспользоваться решением из CMD/BAT + JavaScript: два в одном. Тогда решением будет выглядеть примерно так:

echo WScript.Echo("Hello, world!") | repl.bat
( 2 * b ) || ! ( 2 * b )

5

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Есть ли возможность запустить JS/VBScript, введя код в консоли?

Есть. Только без «WScript» — под «mshta.exe».

6

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Крепыш

1) А какие проблемы у программы с этим объектом ?
2) Есть возможность модифицировать её ?
3) Через STDOUT можно вернуть и из скрипта, на сколько я помню. Если использовать интерпретатор CScript.

В грубом варианте например так. Запускать:

CScript "C:\test.vbs"

Путь, естественно, выставляете свой.


Option Explicit

With CreateObject("WinHttp.WinHttpRequest.5.1")
    .Open "GET","http://www.google.ru", False
    .Send
    WScript.StdOut.WriteLine .ResponseText
End With

4) Есть ещё вариант с ScriptControl. Но думаю, что варианты выше могут избежать этого пути.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Странно.., а куда пропало моё предыдущее сообщение?
В общем, выше я писал о том, что надо из приложения прочитать web-страницу в интернете. Но это приложение имеет проблемы при работе с объектом WinHttp.WinHttpRequest.5.1, а именно: тупо вылетает с системной ошибкой. Модифицировать приложение нет возможности. Поэтому было принято решение использовать для этого Jscript.
Собственно сам скрипт примерно такой:

var WinHttpReq = WScript.CreateObject("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Open("GET", "http://ya.ru", false);
WinHttpReq.Send(); 
WScript.Echo( WinHttpReq.ResponseText);

Скрипт запускается командой

CScript.exe //nologo WinHttpRequest.js

после чего текст считывается из STDOUT и передаётся на обработку.
Но хотелось бы сделать это, выполнением команды в консоли без промежуточных файлов. Но если не возможно, то буду использовать этот вариант.
Я пробовал запуском через mshta.exe, но он ругается, что не знает кто такой WScript.

8

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Крепыш пишет:

Я пробовал запуском через mshta.exe, но он ругается, что не знает кто такой WScript.

alexii пишет:

Только без «WScript»

9

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

alexii пишет:

Только без «WScript»

Признаю, не внимателен. А как тогда?

10

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Крепыш пишет:

Странно.., а куда пропало моё предыдущее сообщение?

Не я .

+ открыть спойлер

Я, кстати, тоже удивился, поскольку это явный ответ на что-то.

Крепыш пишет:

В общем, выше я писал о том, что надо из приложения прочитать web-страницу в интернете.

Цель этого считывания какова? Что нужно получить в итоге?

11

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Только сейчас подумал о том, что при запуске CScript мелькает чёрное окошко. А поскольку чтение будет производиться постоянно, то это окно будет сильно раздражать. Похоже, придётся использовать AutoIt.

12

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

alexii пишет:

Цель этого считывания какова? Что нужно получить в итоге?

Цель - иметь под рукой данные с онлайн-страницы (возможно не одной), не открывая браузер. Выглядеть это будет как табличка с данными, которые должны обновляться в реальном времени.

13

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Крепыш пишет:

Только сейчас подумал о том, что при запуске CScript мелькает чёрное окошко. А поскольку чтение будет производиться постоянно, то это окно будет сильно раздражать.



new ActiveXObject('WScript.Shell').Run('cscript //nologo "WinHttpRequest.js"', 0, false);

или

new ActiveXObject('WScript.Shell').Run('cmd /c cscript //nologo "WinHttpRequest.js">"ya.ru.txt"', 0, false);

(если, например, нужно вывести текст в файл).


Кстати, эти скрипты можно запускать и с помощью «mshta.exe», только тогда может "раздражать" иногда мелькающее окно «mshta.exe»:

mshta "javascript:new ActiveXObject('WScript.Shell').Run('cscript //nologo "WinHttpRequest.js", 0, false);close();"

или

mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c cscript //nologo "WinHttpRequest.js">"ya.ru.txt"', 0, false);close();"

.

14

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Крепыш, можно побольше о проге узнать ? И как связан вызов чего-либо из консоли и она ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

15

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Xameleon, самый правильный вопрос!

16

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Yury пишет:

Кстати, эти скрипты можно запускать и с помощью «mshta.exe»

Yury, спасибо! Ваши примеры мне пригодятся.

Про программу забудем: дело в том, что я не учёл того что программа запускает на выполнение другие приложения посредством cmd (откуда и можно считать поток STDOUT), окно которого и будет мелькать при постоянных запусках.
Поэтому переписал всё на AutoIt отдельным приложением.

17

Re: JS/VBS: Есть ли возможность исполнить код, введя его в консоли?

Yury пишет:

Кстати, эти скрипты можно запускать и с помощью «mshta.exe», только тогда может "раздражать" иногда мелькающее окно «mshta.exe»…

Мелькание окна MSHTA лечится с помощью document.write() — в этом случае окно будет показано только после закрытия записи в документ с помощью document.close() (ну, или вставки в документ элемента HTA:APPLICATION).
Например, так у меня окно всегда мелькает:

mshta javascript:alert("Hello, world!");close();

а так — уже нет:

mshta javascript:alert("Hello, world!");document.write();close();

В этом случае важно не забыть в конце выражения закрыть окно, иначе оно так и останется невидимым и процесс MSHTA.EXE не завершится.