основи wsh

Ветой статті я розповім про завдання, вирішення яких можна автоматизувати за допомогою Windows Scripting Host (WSH) 1.0. До сих пір я майже не приділяв уваги фундаментальним основам WSH. Оскільки я отримую по електронній пошті численні запитання про WSH і Visual Basic Scripting Edition (VBScript), багатьом системним адміністраторам, думаю, буде корисною базова інформація про сценарії.

У чому причина труднощів?

WSH може здаватися важким у вивченні по ряду причин. Більшість труднощів, на мій погляд, пов'язано з нестачею якісних джерел інформації. WSH поки є новою технологією, і в міру її вдосконалення, я сподіваюся, будуть з'являтися хороші документи. Ну а поки за відомостями про WSH звертайтеся до публікацій і Web-вузлів, перерахованим в урізанні «Джерела інформації про Win32-сценаріях».

Ще один фактор, що ускладнює вивчення WSH - велика кількість на перший погляд незв'язаних технологій, які необхідно освоїти, щоб змусити WSH-сценарії виконувати різні функції. Наприклад, щоб написати сценарій, який визначає назву групи, до якої належить користувач, необхідно знати щось про WSH, VBScript або JScript, а також про Active Directory Service Interfaces (ADSI). Набагато менше знань знадобиться, щоб виконати ту ж саму задачу за допомогою спеціалізованої мови сценаріїв під назвою KiXtart, мови пакетних файлів або утиліти начебто Ifmember з NT Server 4.0 Resource Kit.

Складність не тільки в тому, що WSH нерідко вимагає знання декількох скриптових технологій; оскільки вони частково перекривають один одного, доводиться вибирати, яку ж використовувати для виконання того чи іншого завдання. Наприклад, і ADSI, і Windows Management Instrumentation (WMI) - реалізація Web-Based Enterprise Management (WBEM), запропонована Microsoft, - забезпечують доступ до служб NT через інтерфейси автоматизації. Якщо ви хочете запускати і зупиняти сервіси на NT-сервері за допомогою WSH, вам необхідно вирішити, чим користуватися - WMI або ADSI.

З огляду на брак документації по WSH і різноманітність технологій, які в WSH-сценаріях можуть бути задіяні, нова модель Windows-сценаріїв Microsoft дійсно може здатися важкувато. Однак доклавши певних зусиль до вивчення WSH, з його допомогою ви зможете досягти набагато більшого, ніж за рахунок будь-якої іншої технології. Повірте - знання, які ви придбаєте, будуть коштувати витрачених зусиль.

Хоча WSH не накладає обмежень на розмір файлу, WSH-сценарії в поточній версії не можуть розташовуватися більш ніж в одному файлі. WSH 1.0 не підтримує файли, що включаються - файли, що містять процедури, які можуть бути запущені на виконання з основного сценарію. Це обмеження можна обійти кількома шляхами. Можна використовувати метод Run об'єкта WSH Shell для запуску зовнішніх сценаріїв (як і будь-яких інших зовнішніх команд). Але проблема в тому, що два сценарії не можуть використовувати один і той же іменне простір, тобто не мають взаємного доступу до змінних і процедур один одного.

Лістинг 1: include.vbsSub Usage (str) WScript.Echo str End Sub

У VBScript 5.0 є команда Execute, використовуючи яку можна більш вдало обійти відсутність включення файл. Execute має один аргумент сатиричного типу - виконувану команду. Оскільки Execute виконує задану аргументом команду всередині сценарію, цей аргумент повинен містити код на VBScript. Завдяки цьому Execute можна використовувати для завдання підпрограм в зовнішніх файлах, зчитування їх в виконуваному сценарії і подальшого виклику з нього. Наведу приклад.

У лістингу 1 наведено сценарій include.vbs, в лістингу 2 - main.vbs. Include.vbs містить підпрограму під назвою Usage з одним аргументом сатиричного типу. Вміст цього рядка підпрограма виводить на екран за допомогою методу Wscript.Echo.

Лістинг 2: main.vbsDim objFileSystem, objTextStream, strCode Set objFileSystem = CreateObject ( "Scripting.FileSystemObject") Set objTextStream = objFileSystem.OpenTextFile ( "include.vbs", 1) strCode = objTextStream.ReadAll objTextStream.Close Execute strCode Call Usage ( "The Usage subroutine is defined in include.vbs.")

Main.vbs зчитує в змінну strCode вміст підпрограми Usage з файлу include.vbs, а потім викликає її. Для створення посилання на об'єкт TextStream, що є покажчиком на файл include.vbs, використовується метод OpenTextFile об'єкта VBScript FileSystemObject. Потім за допомогою методу TextStream.ReadAll вміст файлу include.vbs поміщається в змінну strCode.

Після цього main.vbs передає змінну strCode як аргумент команді Execute, яка таким чином робить підпрограму Usage частиною сценарію main.vbs. В останньому рядку сценарію викликається підпрограма Usage, якої в якості аргументу передається рядок для виведення на екран. На екрані 1 показаний результат запуску main.vbs.

Екран 1: Результат роботи сценарію main.vbs

Хоча виклик Usage, на перший погляд, звертається до підпрограми, що знаходиться в іншому файлі, насправді це не так. Підпрограма Usage стає частиною іменного простору main.vbs, як тільки цей сценарій передає рядок з її кодом команді Execute. Тому не забувайте, що підпрограму з назвою, що відповідає імені однієї з процедур, що вже використовуються в сценарії, «затягувати» в нього з іншого файлу не можна (якщо, звичайно, ви не хочете динамічно модифікувати код процедури).

В WSH 2.0 з'явиться підтримка включення файл і можливість створення бібліотек часто використовуваних функцій і підпрограм, до яких можна здійснювати доступ з інших сценаріїв незалежно від мови, на якому вони написані. WSH 2.0 дозволить також викликати функції JSсript з програм на VBScript і навпаки.

Одна з приємних особливостей мов сценаріїв в тому, що вони передбачають дуже мало обов'язкових правил форматування, структурування і розташування блоків. Тим часом подібна гнучкість може збентежити адміністраторів, вперше зіткнулися зі сценаріями.

Способів структурування сценаріїв стільки ж, скільки і розробників. Однак хоча правил форматування в мовах сценаріїв дійсно трохи, має сенс застосовувати один і той же спосіб структурування у всіх своїх сценаріях. Чи використовуєте ви шаблони для ваших сценаріїв або просто дотримуєтеся певної методології, дотримання однаковості допоможе прискорити процес розробки, зробить сценарії більш простими у використанні і спростить налагодження.

Я ділю мої WSH-сценарії на три секції: секція декларації та ініціалізації, тіло сценарію, секція завдання функцій і процедур. В першу секцію я розміщую директиви інтерпретатора, декларації змінних, а також код ініціалізації констант і змінних. Команди сценарію і код, керуючий його поведінкою, я маю в другій секції. У тілі сценарію я розміщую в пам'ять і використовую об'єкти, викликаю методи, встановлюю властивості, звертаюся до процедур і функцій. Нарешті, секція функцій і процедур в кінці сценарію у мене призначена для поділу коду на блоки. Тут містяться частини коду, які використовуються всередині сценарію по кілька разів.

У наступній статті серії я кожну з трьох своїх секцій опишу в подробицях. А поки ви можете звернутися до врізки «Джерела інформації про Win32-сценаріях». Велика ймовірність, що ви дізнаєтеся щось нове.

Джерела інформації про Win32-сценаріях

Книги по WSH Gunter Born, Windows Scripting Host Tutorial (Wrox Press). Подальші відомості можна отримати на Web-сайті www.wrox.com. Thomas Fredell, SAMS Teach Yourself Windows Scripting Host in 21 days (SAMS). Dan Gookin, Introducing Windows Scripting Host for Windows 98 (Microsoft Press). Книги по VBScript і JScript

На жаль, у всіх книгах, що випускаються перерахованими видавництвами, мови сценаріїв описуються в контексті Web-програмування. Щоб знайти потрібні видання, відвідайте Web-вузли видавництв і виконайте пошук за ключовими словами VBScript і JScript.

Не забувайте, що основне призначення WSH - інтеграція компонентів автоматизації COM - ADO, Active Directory Service Interfaces (ADSI), Collaboration Data Objects (CDO), Windows Management Administration (WMI) і Microsoft Office. Тому джерела інформації за цими технологіями також можуть виявитися корисними при написанні WSH-сценаріїв.

Нижче перераховані книги, які могли б виконати роль таких джерел.

David Sussman and Alex Homer, ADO 2.0 Programmer's Reference (Wrox Press).

Steven Hahn, ADSI ASP Programmer's Reference (Wrox Press). Mikael Freidlitz and Todd Mondor, ADSI CDO Programming with ASP (Wrox Press).

Хоча в цих книгах про програмування розповідається стосовно розробки Web-додатків, наведені там приклади сценаріїв можна з легкістю адаптувати для використання в середовищі WSH.

Останнє в цій врізки, але звичайно ж далеко не останнє за значущістю: цінність пошукових механізмів Web важко переоцінити. Введіть в улюбленій пошуковій машині ключові слова Windows Scripting Host, і ви отримаєте масу посилань. Якщо знайдете що-небудь особливо корисне, не забудьте повідомити мені.

Схожі статті