VBScript, JScript, Wscript ... о мой
Мне нужно написать несколько сценариев для WinXP, чтобы поддержать некоторых аналитиков из Big Financial Corp. Пожалуйста, помогите мне решить, какой тип сценариев Windows лучше всего соответствует моим потребностям.
Мои потребности кажутся довольно простыми (для меня в любом случае)
- запустить на WinXP Pro SP2 (версия 2002)
- не требовать, чтобы мои пользователи что-либо устанавливали (так что Powershell отсутствует. Аналогично Perl, Python и другие распространенные предложения для подобных вопросов о stackru)
- написано на некомпилированном языке (чтобы у пользователей была возможность изменить их в будущем)
- достаточно полные возможности языка (особенно функции манипуляции с датой / временем. Я также хотел бы иметь современные концепции, такие как подпрограммы, рекурсия и т. д.)
- возможность запуска и управления другими программами (из командной строки)
Из моего поспешного обзора моих вариантов, похоже, мой выбор
- VBScript
- WScript
- JScript
У меня нет времени, чтобы изучить или сделать углубленный обзор этих (или чего-либо еще, что есть в стандартной установке WinXP). Мне нужно срочно взять что-то вместе и как можно быстрее взломать что-нибудь вместе.
(Текущий кризис - это необходимость запустить данное приложение, передав несколько параметров даты).
Как только текущий кризис закончится, таких запросов будет больше.
Помоги мне Оби-Ван Stackru... ты моя единственная надежда.
[edit] Мой текущий набор навыков включает в себя Perl, Javascript и Java, так что мне удобнее всего использовать что-то похожее на эти
[править] ок. Я попробую написать файл WSH на JScript. Спасибо всем... Я дам вам знать, как это происходит (и выяснить, как принять ответ), как только все немного успокоится.
[править] Все получилось в конце. Спасибо за быстрый ответ, ребята. Вот что я дал своему пользователю
<job id="main">
<script language="JScript">
// ----- Do not change anything above this line ----- //
var template = "c:\\path\\to\\program -##PARAM## --start ##date1## --end ##date2## --output F:\\path\\to\\whereever\\ouput_file_##date1##.mdb";
// Handle dates
// first, figure out what they should be
dt = new Date();
var date1 = stringFromDate(dt, 1);
var date2 = stringFromDate(dt, 2);
// then insert them into the template
template = template.replace(new RegExp("##date1##", "g"), date1);
template = template.replace(new RegExp("##date2##", "g"), date2);
// This application needs to run twice, the only difference is a single parameter
var params = ["r", "i"]; // here are the params.
// set up a shell object to run the command for us
var shellObj = new ActiveXObject("WScript.Shell");
// now run the program once for each of the above parameters
for ( var index in params )
{
var runString = template; // set up the string we'll pass to the wondows console
runString = runString.replace(new RegExp("##PARAM##", "g"), params[index]); // replace the parameter
WScript.Echo(runString);
var execObj = shellObj.Exec( runString );
while( execObj.Status == 0 )
{
WScript.Sleep(1000); //time in milliseconds
}
WScript.Echo("Finished with status: " + execObj.Status + "\n");
}
// ----- supporting functions ----- //
// Given a date, return a string of that date in the format yyyy-m-d
// If given an offset, it first adjusts the date by that number of days
function stringFromDate(dateObj, offsetDays){
if (typeof(offsetDays) == "undefined"){
offsetDays = 0;
}
dateObj.setDate( dateObj.getDate() + offsetDays );
var s = dateObj.getYear() + "-"; //Year
s += (dateObj.getMonth() + 1) + "-"; //Month (zero-based)
s += dateObj.getDate(); //Day
return(s);
}
// ----- Do not change anything below this line ----- //
</script>
</job>
Ясно, что это могло бы быть лучше... но оно выполнило свою работу и достаточно легко для моего пользователя, чтобы понять и расширить себя.
8 ответов
Все это технически одно и то же с разным синтаксисом. На самом деле WScript/CScript - это движок, VBScript и JScript - это языки.
Только мое личное мнение: моя личная рекомендация - JScript, потому что она больше напоминает мне настоящий язык программирования и заставляет меня реже бить себя по лицу, чем VBScript. И, учитывая ваше знакомство с javascript, лучшим выбором будет JScript.
Давайте немного подробнее рассмотрим разницу между WScript и CScript, как это делают другие: это ваши платформы выполнения ваших сценариев для Windows Script Host. По сути, это одно и то же, тогда как WScript больше ориентирован на GUI, а CScript - больше на консоль. Если вы запустите сценарий с помощью CScript, вы увидите окно консоли, но у вас все еще есть доступ к функциям графического интерфейса, тогда как при запуске с WScript окно консоли отсутствует, и многие из методов вывода по умолчанию отображаются как оконные объекты, а не как строка в консоли.
Если вам нравится JavaScript, вы, вероятно, будете в порядке с JScript. Это достойный язык и, безусловно, больше подходит для сложных сценариев, чем VBScript.
Однако Microsoft 1 ненавидит JavaScript, поэтому вы столкнетесь с некоторыми API, тривиальными для использования с VBScript, но болезненными для доступа с использованием JScript. Считайте себя предупрежденным...
Как отмечает Сникер, WScript - это движок, который управляет обоими.
1 Антропоморфизация используется, чтобы отметить общую поддержку отсутствия блеска; не должно быть истолковано как свидетельство какой-либо официальной политики.
Чтобы немного расширить ответы других, WScript и CScript - это программы, используемые для запуска сценариев, написанных на VBScript (синтаксис, подобный Visual Basic) или JScript (синтаксис, подобный JavaScript). CScript запускает сценарии из окна консоли, поэтому команда Echo выполняет запись в консоль, а WScript выполняет их без окна, а команда Echo выполняет запись во всплывающее окно с сообщением.
Вы можете написать сценарии WSH (Windows Scripting Host) и WSC (Windows Scripting Component), которые используют как VBScript, так и JScript, комбинируя их в оболочке на основе XML, если вам нужно объединить существующий код на двух языках.
Вы также можете написать сценарии HTA, что означает "Приложение HyperText". Это код сценария в файле HTML с расширением HTA, который запускается в Internet Explorer, что позволяет вам предоставлять интерфейс с использованием элементов управления HTML, но также иметь полный доступ к вашей системе, поскольку он запускается локально.
Все они основаны на технологиях Windows Scripting Host и Active Scripting, которые были включены во все компьютеры Windows начиная с Windows 98. Наряду с довольно мощными базовыми языками они также предоставляют вам доступ к WMI для обширной информации о системе и сети и управления, а также Возможность COM для автоматизации Word, Excel и т. Д. Также вы можете использовать ADO и ADOX для создания и работы с файлами Access MDB, даже если Access не установлен.
Хотя JScript является гораздо менее ужасным языком, чем VB Script, проблема в том, что VB Script имеет более полную библиотеку полезных функций, встроенных в него для таких вещей, как форматирование даты и чисел. Так что выбор не так прост, как кажется на первый взгляд, если только вы не можете написать и установить собственную библиотеку вспомогательных объектов для использования с JScript.
Не забудьте CScript. И будьте осторожны, потому что хостинг сценариев Windows часто отключается групповой политикой в крупных компаниях. Если это так, единственным вариантом, который соответствует всем вашим критериям, является (дрожь) партии.
Если ни один из этих способов не сработает, то, вероятно, лучшим вариантом является скомпилированная программа, в которой вы распространяете исходный код вместе с программой.
Мой выбор будет WSH с использованием JScript. Вы можете использовать VBScript, но почему, когда JScript доступен.
Вот ссылка на Windows Script Host.
Используйте JScript. Ключевое отличие между использованием JScript с движком WScript/cscript и написанием JavaScript в браузере заключается в том, что у вас нет ограничений безопасности браузера. У вас также есть доступ к объектам ActiveX/COM для управления приложениями, реестром и т. Д. Фактически, вы, вероятно, потратите гораздо больше времени на чтение этих пользовательских объектов и интерфейсов, чем на заботу о языковых функциях. Конечно, вы получаете все преимущества дат JavaScript, регулярных выражений и т. Д.
Пример приложения JScript из MSDN может помочь вам начать работу.
К сожалению, большинство примеров сценариев Microsoft, как правило, являются VBScript, но синтаксис довольно прост, особенно если вы просто пытаетесь определить детали интерфейса COM.
По состоянию на октябрь 2023 года VBScript незаметно устарел, поэтому вам следует избегать его использования для новых сценариев, с которыми вы хотите работать в течение очень долгого времени. Согласно https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features :
VBScript устарел. В будущих выпусках Windows VBScript будет доступен как функция по требованию до его удаления из операционной системы.
и https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features-resources#vbscript :
VBScript будет доступен как функция по требованию, а затем будет удален в будущих выпусках Windows. Первоначально функция VBScript по запросу будет предустановлена, чтобы обеспечить ее бесперебойное использование, пока вы готовитесь к прекращению использования VBScript.
Если вы используете VBScript в более старых версиях Windows или используете его в текущей Windows 11, но только для одноразового сценария, вам не о чем беспокоиться, поскольку он все еще доступен на данный момент, но если вы при написании сценариев на будущее рассмотрите возможность использования более современного языка сценариев, такого как PowerShell или Python (хотя мне будет не хватать простой интеграции с COM в VBScript, в отличие от многословия той же задачи в PowerShell).