Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 5:

Собственная объектная модель WSH

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Аннотация: Рассматриваются основные объекты, поддерживаемые WSH (WScript, WshShell, WshEnvironment, WshSpecialFolders, WshArguments). Даются примеры сценариев для работы со стандартными объектами WSH

Собственная объектная модель WSH

Перейдем к описанию собственной объектной модели Windows Script Host. С помощью внутренних объектов WSH из сценариев можно выполнять следующие основные задачи:

  • выводить информацию в стандартный выходной поток (на экран) или в диалоговое окно Windows;
  • читать данные из стандартного входного потока (то есть вводить данные с клавиатуры) или использовать информацию, выводимую другой командой;
  • использовать свойства и методы внешних объектов, а также обрабатывать события, которые генерируются этими объектами;
  • запускать новые независимые процессы или активизировать уже имеющиеся;
  • запускать дочерние процессы с возможностью контроля их состояния и доступа к их стандартным входным и выходным потокам;
  • работать с локальной сетью: определять имя зарегистрировавшегося пользователя, подключать сетевые диски и принтеры;
  • просматривать и изменять переменные среды;
  • получать доступ к специальным папкам Windows;
  • создавать ярлыки Windows;
  • работать с системным реестром.

В WSH версии 5.6 (стандартная версия в Windows XP) входят перечисленные ниже объекты:

  • WScript. Это главный объект WSH, который служит для создания других объектов или связи с ними, содержит сведения о сервере сценариев, а также позволяет вводить данные с клавиатуры и выводить информацию на экран или в окно Windows.
  • WshArguments. Обеспечивает доступ ко всем параметрам командной строки запущенного сценария или ярлыка Windows.
  • WshNamed. Обеспечивает доступ к именным параметрам командной строки запущенного сценария.
  • WshUnnamed. Обеспечивает доступ к безымянным параметрам командной строки запущенного сценария.
  • WshShell. Позволяет запускать независимые процессы, создавать ярлыки, работать с переменными среды, системным реестром и специальными папками Windows.
  • WshSpecialFolders. Обеспечивает доступ к специальным папкам Windows.
  • WshShortcut. Позволяет работать с ярлыками Windows.
  • WshUrlShortcut. Предназначен для работы с ярлыками сетевых ресурсов.
  • WshEnvironment. Предназначен для просмотра, изменения и удаления переменных среды.
  • WshNetwork. Используется при работе с локальной сетью: содержит сетевую информацию для локального компьютера, позволяет подключать сетевые диски и принтеры.
  • WshScriptExec. Позволяет запускать консольные приложения в качестве дочерних процессов, обеспечивает контроль состояния этих приложений и доступ к их стандартным входным и выходным потокам.
  • WshController. Позволяет запускать сценарии на удаленных машинах.
  • WshRemote. Позволяет управлять сценарием, запущенным на удаленной машине.
  • WshRemoteError. Используется для получения информации об ошибке, возникшей в результате выполнения сценария, запущенного на удаленной машине.

Кроме этого, имеется объект FileSystemObject, обеспечивающий доступ к файловой системе компьютера (этот объект будет подробно рассмотрен в следующей лекции).

Рассмотрим более подробно несколько объектов WSH, которые часто используются в сценариях.

Объект WScript

Свойства объекта WScript позволяют получить полный путь к использующемуся серверу сценариев (wscript.exe или cscript.exe), параметры командной строки, с которыми запущен сценарий, режим его работы (интерактивный или пакетный). Кроме этого, с помощью свойств объекта WScript можно выводить информацию в стандартный выходной поток и читать данные из стандартного входного потока. Также WScript предоставляет методы для работы внутри сценария с объектами автоматизации и вывода информации на экран (в текстовом режиме) или в окно Windows.

Отметим, что в сценарии WSH объект WScript можно использовать сразу, без какого-либо предварительного описания или создания, так как его экземпляр создается сервером сценариев автоматически. Для использования же всех остальных объектов нужно использовать либо метод CreateObject, либо определенное свойство другого объекта.

Свойства объекта WScript представлены в табл. 5.1.

Таблица 5.1. Свойства объекта WScript
Свойство Описание
Application Предоставляет интерфейс Idispatch для объекта WScript
Arguments Содержит указатель на коллекцию WshArguments, содержащую параметры командной строки для исполняемого сценария
FullName Содержит полный путь к исполняемому файлу сервера сценариев (в Windows XP обычно это C:\WINDOWS\SYSTEM32\CSCRIPT.EXE или C:\WINDOWS\SYSTEM32\WSCRIPT.EXE)
Name Содержит название объекта Wscript (Windows Script Host)
Path Содержит путь к каталогу, в котором находится cscript.exe или wscript.exe (в Windows XP обычно это C:\WINDOWS\SYSTEM32)
ScriptFullName Содержит полный путь к запущенному сценарию
ScriptName Содержит имя запущенного сценария
StdErr Позволяет запущенному сценарию записывать сообщения в стандартный поток для ошибок
StdIn Позволяет запущенному сценарию читать информацию из стандартного входного потока
StdOut Позволяет запущенному сценарию записывать информацию в стандартный выходной поток
Version Содержит версию WSH

Опишем более подробно некоторые свойства объекта WScript.

Свойство Arguments

В следующем примере (листинг 5.1) с помощью цикла For Each … Next на экран выводятся все параметры командной строки, с которыми был запущен сценарий.

'********************************************************************
' Имя: Args.vbs                                                   
' Язык: VBScript                                                    
' Описание: Работа с аргументами запущенного сценария              
'********************************************************************
Option Explicit

Dim s,objArgs,Arg 
Set objArgs = WScript.Arguments  ' Создаем объект WshArguments
For Each Arg In objArgs
  s=s & Arg ' Формируем строки со значениями аргументов
Next

WScript.Echo s   ' Выводим сформированные строки
'*************  Конец *********************************************
Листинг 5.1. Вывод всех параметров командной строки сценария (VBScript)
Свойства StdErr, StdIn, StdOut

Доступ к стандартным входным и выходным потокам с помощью свойств StdIn, StdOut и StdErr можно получить только в том случае, если сценарий запускался в консольном режиме с помощью cscript.exe. Если сценарий был запущен с помощью wscript.exe, то при попытке обратиться к этим свойствам возникнет ошибка "Invalid Handle".

Работать с потоками StdOut и StdErr можно с помощью методов Write, WriteLine, WriteBlankLines, а с потоком StdIn — с помощью методов Read, ReadLine, ReadAll, Skip, SkipLine. Эти методы кратко описаны в табл. 5.2.

Таблица 5.2. Методы для работы с потоками
Метод Описание
Read(n) Считывает из потока StdIn заданное параметром n число символов и возвращает полученную строку
ReadAll() Читает символы из потока StdIn до тех пор, пока не встретится символ конца файла ASCII 26 (<Ctrl>+<Z>), и возвращает полученную строку
ReadLine() Возвращает строку, считанную из потока StdIn
Skip(n) Пропускает при чтении из потока StdIn заданное параметром n число символов
SkipLine() Пропускает целую строку при чтении из потока StdIn
Write(string) Записывает в поток StdOut или StdErr строку string (без символа конца строки)
WriteBlankLines(n) Записывает в поток StdOut или StdErr заданное параметром n число пустых строк
WriteLine(string) Записывает в поток StdOut или StdErr строку string (вместе с символом конца строки)

Напомним, что операционная система Windows поддерживает механизм конвейеризации (символ "|" в командной строке). Этот механизм делает возможным передачу данных от одной программы к другой. Таким образом, используя стандартные входные и выходные потоки, можно из сценария обрабатывать строки вывода другого приложения или перенаправлять выводимые сценарием данные на вход программ-фильтров ( FIND или SORT ). Например, следующая команда будет сортировать строки вывода сценария example.js и выводить их в файл sort.txt:

cscript //Nologo example.js | sort > sort.txt

Опция //Nologo здесь нужна для того, чтобы в файл sort.txt не попадали строки с информацией о разработчике и номере версии WSH.

Кроме этого, с помощью методов, работающих с входным потоком StdIn, можно организовывать диалог с пользователем, то есть создавать интерактивные сценарии. Соответствующий пример приведен в листинге 5.2.

'*******************************************************************
'* Имя: Interact.vbs                                               
'* Язык: VBScript                                                  
'* Описание: Ввод/вывод строк в консольном режиме                  
'*******************************************************************
Dim  s
' Выводим строку на экран
WScript.StdOut.Write "Введите число: "
' Считываем строку
s = WScript.StdIn.ReadLine
' Выводим строку на экран
WScript.StdOut.WriteLine "Вы ввели число " & s
'*************  Конец *********************************************
Листинг 5.2. Ввод/вывод строк в символьном режиме
< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ.

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.