VBScript, JScript, Wscript ... о мой - PullRequest
       86

VBScript, JScript, Wscript ... о мой

5 голосов
/ 02 октября 2009

Мне нужно написать несколько сценариев для WinXP для поддержки некоторых аналитиков из Big Financial Corp. Пожалуйста, помогите мне решить, какой тип сценариев Windows лучше всего подходит для моих нужд.

Мои потребности кажутся довольно простыми (во всяком случае, мне)

  1. работает на WinXP Pro SP2 (версия 2002)
  2. не требует, чтобы мои пользователи что-либо устанавливали (так что Powershell отсутствует. Аналогично Perl, Python и другие распространенные предложения по этим типам вопросов по stackoverflow)
  3. написано на некомпилированном языке (чтобы у пользователей была возможность изменить их в будущем)
  4. достаточно полные возможности языка (особенно функции манипуляции с датой / временем. Я также хотел бы иметь современные концепции, такие как подпрограммы, рекурсия и т. Д.)
  5. возможность запуска и управления другими программами (из командной строки)

Из моего поспешного просмотра моих вариантов, похоже, мой выбор

  1. 1020 * VBScript *
  2. WScript
  3. JScript

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

(Текущий кризис - это необходимость запустить данное приложение, передавая несколько параметров даты).

Как только текущий кризис закончится, таких запросов будет больше.

Помоги мне Оби Ван Переполнение стека ... ты моя единственная надежда.

[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>

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

Ответы [ 7 ]

27 голосов
/ 02 октября 2009

Технически это одно и то же с разным синтаксисом. На самом деле WScript / CScript - это движок, VBScript и JScript - это языки.

Личное мнение только следующее: моя личная рекомендация - JScript, потому что она больше напоминает мне настоящий язык программирования и заставляет меня хотеть бить себя в лицо меньше чаще, чем VBScript. А учитывая ваше знакомство с javascript, вам лучше всего выбрать JScript.

Более подробно о разнице между WScript и CScript, как это делают другие: это ваши платформы выполнения ваших сценариев для Windows Script Host. По сути, это одно и то же, тогда как WScript больше ориентирован на GUI, а CScript - больше на консоль. Если вы запустите сценарий с помощью CScript, вы увидите окно консоли, но у вас все еще есть доступ к функциям графического интерфейса, тогда как при запуске с WScript окно консоли отсутствует, и многие из методов вывода по умолчанию отображаются как оконные объекты, а не строка в консоли.

3 голосов
/ 02 октября 2009

Если вам нравится JavaScript, вы, вероятно, будете в порядке с JScript . Это достойный язык и, безусловно, больше подходит для сложных скриптов, чем VBScript.

Однако Microsoft 1 ненавидит JavaScript, поэтому вы столкнетесь с некоторыми API, которые тривиально использовать с VBScript, но болезненно получать доступ с использованием JScript. Считай себя предупрежденным ...

Как отмечает Сникер , WScript - это механизм, который управляет обоими.

1 Антропоморфизация используется для обозначения общей поддержки отсутствия блеска; не следует толковать как свидетельство какой-либо официальной политики.

2 голосов
/ 02 октября 2009

Хотя JScript является гораздо менее ужасным языком, чем VB Script, проблема в том, что VB Script имеет более полную библиотеку полезных функций, встроенных в него для таких вещей, как форматирование даты и чисел. Так что выбор не так прост, как кажется на первый взгляд, если только вы не можете написать и установить собственную библиотеку вспомогательных объектов для использования с JScript.

Некоторые подробности здесь .

2 голосов
/ 02 октября 2009

Чтобы немного расширить ответы других, 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 не установлен.

2 голосов
/ 02 октября 2009

Используйте JScript. Ключевое отличие между использованием JScript с движком WScript / cscript и написанием JavaScript в браузере заключается в том, что у вас нет ограничений безопасности браузера. У вас также есть доступ к объектам ActiveX / COM для управления приложениями, реестром и т. Д. Фактически, вы, вероятно, потратите гораздо больше времени на чтение этих пользовательских объектов и интерфейсов, чем на заботу о языковых функциях. Конечно, вы получаете все преимущества дат JavaScript, регулярных выражений и т. Д.

Пример * приложения JScript из MSDN может помочь вам начать работу.

К сожалению, большинство примеров сценариев Microsoft, как правило, написаны на VBScript, но синтаксис довольно прост, особенно если вы просто пытаетесь выяснить детали интерфейса COM.

2 голосов
/ 02 октября 2009

Не забудьте CScript. И будьте осторожны, потому что хостинг сценариев Windows часто отключается групповой политикой в ​​крупных компаниях. В таком случае единственная опция, которая соответствует всем вашим критериям, - это (дрожь) партии.

Если нет из этих работ для вас, лучшим вариантом, вероятно, является скомпилированная программа, в которой вы распространяете исходный код вместе с программой.

2 голосов
/ 02 октября 2009

Мой выбор - WSH с использованием JScript. Вы можете использовать VBScript, но почему, когда JScript доступен.

Вот ссылка для Windows Script Host.

...