Сервер сценариев Windows Script Host — подводим итоги

Сервер сценариев Windows Script Host — подводим итоги Полезный софт, сервисы и познавательные статьи

Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы сделаем заключительный анализ сервера сценариев Windows Script Host и его возможностей.

На данном блоге собралось уже достаточно примеров скриптов и обучающих статей, что бы написать действительно качественный обзор по Windows Script Host, да, я такой, люблю публиковать материалы в обратном порядке… По ходу статьи я приведу примеры программного кода для Windows Script Host (коротко — WSH), а пока немного лирического предисловия.

Операционная система изначально создавалась как платформа для программистов, это теперь, мы привыкли, что Windows – это красочный интерфейс пригодный для посиделок в социальных сетях, разговорах по скайпу и игре в компьютерные игры. Но как бы там не было, ОС это как не как программа, а любую программу нужно отлаживать и исправлять в ней ошибки. Это теперь мы привыкли, что есть мышка, а ведь когда то все делали ручками – все команды вводили вручную, и если программисту это не в дикость, то рядовому пользователю такая картина покажется дикостью… Но, хотя времена уже не те, Windows по прежнему позволяет решать административные вопросы без сторонних приложений…

Windows Script Host — вначале была командная строка…

Да, да, черный экран и взгляд в неизвестность… До появления Windows Script Host и PowerShell, командная строка являлась практический единственным средством для решения внештатных задач. Помню в детстве, мне частенько приходилось бегать с загрузочными дискетами и даже держать их в тайнике целыми стопками. Ну, а старый добрый Doom!!! Не знаю как теперь, но он у меня он работал только под управлением командной строки. Помню, в школе на уроках информатики нам приходилось изучать базовые команды CMD, типа, переход по каталогам и дискам, создание папок и файлов и так далее. Даже в нынешнее время приходится использовать базовые утилиты командной оболочки, взять тот же ping или ipconfig, когда я приходил к клиентам, у которых не работал интернет, эти утилиты шли в бой всегда..

Но, времена идут, и продвинутому пользователю хочется чего-то больше…

И был день, и была ночь, и пришел Windows Script Host

Windows Script Host - базовые возможности

В простом варианте, сервер сценариев Windows Script Host – это программа, точнее две: wscript.exe (позволяет запускать сценарии в оконном интерфейсе) и cscript.exe (запуск скриптов в режиме командной строки). Так как Windows Script Host не требует установки и входит в состав практически всех версий Windows, то можно сразу приступать к программированию. У пользователя есть выбор, писать программный код на языке VBScript (файлы с расширением .vbs) или JScript (файлы с расширением .js). Те, кто самые ленивые, могут открыть текстовый блокнот и сразу приступить к делу, но лучше использовать редактор Notepad++. Я даже написал несколько статей по данному редактору, например — «Редактор Notepad++ — Знакомство«.

Оба языка программирования vbscript и jscript являются разработкой компании Майкрософт, их код частично может выполняться в теле интернет страницы, хотя, более эффективней они используются как прикладные сценарии.

Некоторые преимущества сценариев Windows Script Host по сравнению с рядовыми файлами командной оболочки:

  • Расширяемость возможностей за счет подключения внешних объектов. Объекты – это файлы (библиотеки) с набором различных функций для выполнения определенных задач: создание графического интерфейса (WindowSystemObject), работа со ссылками на сайте (Chilkat.Spider) или работа с протоколом HTTP (Компоненты для создания HTTP запроса), однако, Windows Script Host предоставляет и собственные объекты, например, работа с файловой системой (FileSystemObject), или взаимодействие с системой (WScript.Shell).
  • Взаимодействие с Windows Management Instrumentation (Инструментарий управления Windows). WMI содержит практически неограниченные возможность для администрирования системы, с его помощью можно получить доступ практически к каждому элементу (как оборудование, так и системная информация).
  • Универсальность использования. Нет необходимости устанавливать программные пакеты по несколько сотен мегабайт, вы можете написать сценарий и потом запустить его на другом компьютере, да и компиляция отсутствует, что позволяет в любой момент изменить программный код.

«Привет Мир», или пишем первые примеры по Windows Script Host…

Windows Script Host - начинаем программировать

Пожалуй, я не буду нарушать традицию…

Вывод сообщения "Привет Мир" на языке Jscript:

WScript.Echo("Привет Мир");

Вывод сообщения "Привет Мир" на языке VBscript:

WScript.Echo"Привет Мир"

Как видим все довольно просто, но… хочется чего-то большего, поэтому приведу вам пример сценариев Windows Script Host, которые будут выводить список имен пользователей системы и их SID (уникальный идентификатор, который назначается каждой учетной записи):

Программный код на языке VBSCRIPT:

'-------------------------------------------------------------------------------------
' Примеры программного кода для сервера Windows Script Host
' Список имен пользователей и их SID
' windows_script_host_UserSID.vbs
'-------------------------------------------------------------------------------------
 
' включаем проверку переменных
Option Explicit
 
dim objWMIService, colItems, objItem, list
 
list = "Имя пользователя и его SID" & vbCrLf & vbCrLf
' получаем доступ к WMI
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
' получаем доступ к классу WMI - Win32_UserAccount
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount")
 
' начинаем перебор значений
For Each objItem In colItems
     list = list &  "Имя" & vbTab & vbTab & objItem.Name & vbCrLf
     list = list &  "Значение SID" & vbTab & objItem.SID & vbCrLf & vbCrLf
Next
 
ShowInNotepad(list)
 
'Процедура создания временного файла с данными
Sub ShowInNotepad(StrToFile)
dim FSO, TempPath, TxtFile
    Set FSO = CreateObject("Scripting.FileSystemObject")
    TempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & FSO.GetTempName
    Set TxtFile = FSO.CreateTextFile(TempPath)
    TxtFile.WriteLine(StrToFile)
    TxtFile.Close
    CreateObject("WScript.Shell").Run "wordpad.exe " & TempPath
End Sub

Программный код на языке JSCRIPT:

//-------------------------------------------------------------------------------------
// Примеры программного кода для сервера Windows Script Host
// Список имен пользователей и их SID
// windows_script_host_UserSID.js
//-------------------------------------------------------------------------------------
 
var objWMIService1, colItems1, objItem1, list1;
 
list1 = "Имя пользователя и его SID\n\n";
// получаем доступ к WMI
objWMIService1 = GetObject("winmgmts:\\\\.\\root\\cimv2");
// получаем доступ к классу WMI - Win32_UserAccount
colItems1 = new Enumerator(objWMIService1.ExecQuery("SELECT * FROM Win32_UserAccount"));
 
// начинаем перебор значений
for (; !colItems1.atEnd(); colItems1.moveNext()){
     objItem1 = colItems1.item();
 
     list1 += "Имя\t\t" + objItem1.Name + "\n";
     list1 += "Значение SID\t" + objItem1.SID + "\n\n";
}
 
ShowInNotepad(list1)
 
//Функцияя создания временного файла с данными
function ShowInNotepad(StrToFile){
var FSO, TempPath, TxtFile;
     with(WScript){
                 FSO = CreateObject("Scripting.FileSystemObject");
                 TempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") + "\\" + FSO.GetTempName();
                 TxtFile = FSO.CreateTextFile(TempPath);
                 TxtFile.WriteLine(StrToFile);
                 TxtFile.Close();
                 CreateObject("WScript.Shell").Run ("wordpad.exe " + TempPath);
     }
}

Как видим, не все так сложно, как бы казалось, кстати, данный пример я взял из книги Windows Script Host – новичок, там я собрал 132 примера сценариев на обоих языках. Я стараюсь всегда приводить программный код как на языке VBScript так и на языке Jscript, что бы можно было провести сравнительный анализ.

Хорошо, теперь придерживаясь этикета, давайте разберем программный код примеров.

Логика работы идентична, вначале происходит объявление переменных (ключевые слова dim и var). Видим, что имена переменных практически одинаковые, смотрите «Урок 2 по JScript — типы данных и переменные» и «Урок 2 по VBScript: Переменные«. Обратите внимание, что в отличии от прикладных языков программирования, в скриптах Windows Script Host не нужно указывать тип данных.

Переменная list будех хранить основную информацию относительно имени и значении SID. Мы присваиваем переменной сначала информативную фразу и добавляем дважды перевод строки (n и vbCrLf). Далее с помощью функции CreateObject происходит подключение внешних классов WMI, которые и позволят выполнить поставленную задачу.

Далее нам надо обработать все найденные идентификаторы. Для этих целей мы применили цикл FOR и FOR EACH – смотрите статьи «Урок 6 по VBScript: Циклы for…next и for each…next» и "Урок 9 по JScript — оператор цикла for«. Все найденные результат будут записываться в переменную. Обратите внимание, что для объедения строк мы использовали Windows Script Host операторы "&" и "+".

В самом конце происходит вызов пользовательской процедуры (функции) ShowInNotepad, принципы создания пользовательских процедур и функций смотрите в статье «Урок 3 по JScript — создание пользовательских функций JS«. В результате, будет открыто приложение WordPad.exe, в котором будут содержаться имена идентификаторов и их значений.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий

  1. Александр

    Помню помню такие времена, помню как работал через DOS. А Doom была одна из первых моих игр в которую я поиграл на компьютере-)). Сам тоже тогда бегал к знакомым для наладки компьютеров

    Ответить
    1. Игорь

      Зачем писать всякую ерунду? Вынуждаете читать, а в результате потеря времени. А я работал на БЭСМ-6. Очень это интересно другим?

      Ответить
      1. qwerty

        А у кого-то прогар.

        Ответить