Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
2003 г

Сценарии Windows и управление системой

Криста Андерсон
21.08.2002
Windows & .NET Magazine/RE, #05/2002

Составление сценариев и их использование в процессе управления Windows - очень удобный метод, о котором не следует забывать. Возможно, не всегда ясно, как применять сценарии при наличии графического интерфейса. Может быть, непонятно, во что обойдется обучение написанию сценариев с точки зрения временных затрат и, как говорится, стоит ли овчинка выделки. Или, быть может, трудно разобраться в этих названиях - WSH, WMI, ADSI, в бесконечных объектах, методах, процедурах и функциях. При этом у многих администраторов возникает ощущение, что использованием сценариев можно без ущерба для себя пренебречь. Однако игнорировать возможности сценариев не следует. Быстро подготовленный сценарий значительно сэкономит и время, и силы. И чем больше подобных сценариев, тем, естественно, лучше.

В этой статье я хотела бы пояснить, когда следует использовать механизмы сценариев, рассказать о некоторых базовых концепциях их составления, а также дать ряд практических советов (см. врезку "Советы по составлению сценариев"). Кроме того, я представлю код на VBScript, с помощью которого решается некая общая задача, и прокомментирую его. Выбор пал на VBScript, поскольку Windows поддерживает этот язык. Windows поддерживает и JScript, но в предыдущих номерах журнала, как правило, использовался VBScript, так что есть смысл сохранять преемственность.

Почему именно сценарии?

Программирование сценария занимает больше времени, чем однократное выполнение задачи вручную, - даже если за дело берется опытный специалист по программированию на VBScript, который знает проблему досконально. Если же вы не профессионал, то написание и отладка сценария займет куда больше времени, чем использование графического интерфейса. Так зачем же тогда привлекать сценарий?

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

Если с помощью GUI решить задачу непросто, то, может быть, стоит обратиться к утилитам командной строки, которые поставляются вместе с операционной системой или в составе Resource Kit? Желательно использовать данные утилиты всегда, когда в этом есть смысл. Но в Windows 2000 набор программ с графическим интерфейсом не соответствует в точности набору утилит командной строки, и некоторые утилиты могут не удовлетворять в полном объеме решаемой задаче. Пакетные файлы не всегда хорошо справляются с ситуацией, когда входной поток данных должен быть изменен. Кроме того, утилиты командной строки и сценарии не являются взаимоисключающими методами. Можно написать сценарии, основанные на применении утилит командной строки и при этом свободные от недостатков последних.

Scripting Host

Прежде чем перейти к созданию сценария, поясню некоторые термины. Зная, что скрывается за словами scripting host, легче понять, как это может повлиять на проект сценария, допустимо ли будет использовать в сценарии выражения и т. п.

Scripting host (машина сценариев) - это операционная среда сценария. Windows не имеет понятия о VBScript: если в командной строке ввести строчку кода на VBScript, система выдаст сообщение об ошибке. Когда Windows сталкивается с файлом, расширение которого указывает на файл-сценарий, операционная система передает файл машине сценариев для интерпретации. Машина интерпретирует предложенный сценарий, а затем передает сообщения сценария (по сути - запрос на регистрацию данных) в операционную систему Windows для исполнения.

Windows поддерживает две машины сценариев: Microsoft Internet Explorer (IE) и Windows Script Host (WSH). Выбор той или иной машины влияет на используемые в сценарии возможности. Если применяется WSH, как чаще всего и бывает, то в сценарии могут использоваться объекты WSH, но не IE, и наоборот. Машина сценария не обязана понимать содержание всех мыслимых сценариев; воспринимается только сценарий, написанный на языке машины, и тот, который ею поддерживается. Для WSH и IE "понятными" являются языки VBScript и JScript.

Элементы сценария

Каждая строка сценария - это оператор, который сообщает компьютеру, что следует сделать. Исполняемые операторы обычно имеют форму типа "действие-объект": описываются само действие и тот объект, над которым действие совершается. Сценарий может содержать условия, при наличии которых указанные операторы должны быть выполнены. Хост сценария интерпретирует строки кода слева направо и сверху вниз, так что можно, например, получив некоторые данные в строке 10, использовать их в 30-й строке. Исключение составляют процедуры. Процедуры (функции и подпрограммы) - это набор операторов, которые выполняются только при явном обращении к ним. В данном случае процедура сразу же начинает выполняться независимо от того, из какого места кода было обращение.

Исполняемые части сценария называются операторами. Неисполняемая часть сценария называется комментарием и должна предваряться апострофом (') или ключевым словом Rem. Например:

Rem Это комментарий

или

' Это комментарий

Комментарий может занимать всю строчку целиком или быть частью строки, содержащей исполняемый код. Сценарий следует документировать, чтобы не участвующий в его написании человек (или даже незнакомый с лексикой его языка) смог легко понять, для чего сценарий предназначен. Иногда в целях отладки программы в начале исполняемой строки ставят признак комментария.

VBScript "понимает" четыре типа данных: числа (number); строки (string); дата и время (date and time); булевы данные (boolean). Примеры чисел - скажем 2 или 9458. Строки - это любая комбинация символов, заключенная в двойные кавычки, например "рыба" и "Это строка %@#^>". Дата и время должны находиться внутри символов решетки (#) и выглядеть соответственно. Так, например, #16 January 1968# и #1/01/02 11:45 PM# - нормальные с точки зрения VBScript данные. Булевы данные - TRUE или FALSE, например x<x+1 = TRUE (они необязательно должны быть написаны заглавными буквами, просто так легче читать сценарий). Булевы данные часто бывают нужны при тестировании сценария.

VBScript рассматривает перечисленные четыре типа данных как подмножество другого типа данных - variant, который может содержать данные любого вида. Таким образом, VBScript можно не сообщать, с данными какого типа вы работаете, но нужно иметь в виду, что некоторые задачи выполняются в Visual Basic (VB) и VBScript с описанными типами данных по-разному (правда, подобная ситуация может никогда и не встретиться). Группы однотипных данных называются массивами (array).

Для простоты работы с данными VBScript поддерживает еще два типа данных, не имеющих никакого начального значения (null-данные), которые можно присваивать переменным (variable) и константам (constant) сценария. Значения переменных в ходе выполнения программы могут меняться, но их имена при этом остаются прежними. Константы при выполнении сценария имеют только одно значение и изменяться не могут.

Передать данные в сценарий можно двумя способами. Во-первых, их в явном виде прописывают в теле программы. Например, ""\\bigserver\sharedfolder"" - обычное использование в сценарии строковых данных для обозначения пути. Другой способ - передать нужные данные во входном потоке в сценарий. Кроме того, по ходу обработки сценарий может самостоятельно генерировать данные (например, вычислить дату двумя неделями позднее текущей), а затем использовать их.

Манипулировать данными можно с помощью операторов (operator) - символов, которые обычно применяются для обозначения математических функций. Какие-то операторы имеют более высокий приоритет, какие-то - более низкий, и это влияет на порядок вычисления выражений (expression). Выражение есть некоторое вычисление, в которое могут быть включены числа, переменные, строки, константы. В выражениях могут использоваться операторы. Например, выражение dInputDate + 2 = dNewDate означает, что к значению переменной dInputDate добавляется 2, и результат вычисления вновь присваивается переменной dNewDate.

Функции и подпрограммы

VBScript имеет набор встроенных функций, которые позволяют выполнять некоторые операции без подробного описания решаемой задачи. С помощью встроенных функций можно манипулировать числами, строками, значениями даты и времени, массивами. В состав VBScript также входят функции преобразования данных одного типа в другой. Например, VBScript обычно исходит из того, что число, допустим, 45, имеет тип "число", но при необходимости его можно рассматривать как данные строкового типа.

VBScript предусматривает создание собственных функций пользователя (user-defined function, UDF) для выполнения каких-то специфических задач. Например:

Function TestFunct
TestFunct = Sqr(9) + 2
End Function

Пользовательская функция TestFunct работает со встроенной функцией Sqr для извлечения квадратного корня из 9 и добавления к полученному результату 2. UDF, как и встроенная функция, может использовать аргументы.

TestFunct UDF возвращает результат в основное тело программы. Подпрограмма выполняет некоторые действия, но ничего не возвращает в основной код в качестве результата. Программист может задействовать подпрограмму несколько раз, при необходимости использовать один и тот же участок кода, а повторно писать одно и то же лень. Подпрограмма

Sub AskUserName
WScript.Echo _
''Please type a username.''
WScript.Quit
End Sub

использует возможности объекта WScript для вывода на экран некоторого сообщения, после чего завершает свою работу. Функции и подпрограммы могут задействовать значения переменных, декларированных внутри основного кода сценария, или же использовать собственные переменные.

Объекты в сценарии

Объект (Object) представляет собой физическую или логическую часть вычислительной среды, например дисковод или имя учетной записи. Конечно, можно программировать, не прибегая к объектам, но большинство сценариев управления работает с объектами. Если используется WSH, VBScript может обращаться к объектам, изначально присущим WSH, например, представляющим файлы, каталоги, части реестра; VBScript также поддерживает объекты Windows Management Instrumentation (WMI) и Active Directory Service Interfaces (ADSI). Объекты WMI связаны с физическими и логическими частями вычислительной системы: например, адресами IP, файловыми системами, сетевыми адаптерами. ADSI-объекты представляют ресурсы службы каталогов: в частности, Active Directory (AD) или иные поддерживаемые каталоги, скажем Windows NT 4.0 SAM. Статические группы объектов одинаковой природы называются классами, а группы, описываемые пользователем, - библиотеками.

Объекты имеют свойства и методы. Объект определяется его свойствами (т. е. IP Address - это свойство объекта Network Card, а 12.4.21.197 - значение данного свойства). Методы - это действия, которые могут выполняться над объектом (Copy - один из методов объекта File). Не все объекты имеют методы. Свойства и методы используются при написании кода одинаково: сначала следует объект, затем ставится точка, далее название метода или свойства (например, ObjectName.PropertyName). Объекты могут содержать другие объекты. В частности, объект WSH WScript включает подчиненный объект WshArguments, который является набором аргументов, передаваемых при вызове файлу-сценарию. Для выделения первого элемента строки аргументов используется WScript.Arguments(0). Как было видно при обсуждении объектов WSH, формальное имя подчиненных объектов не совпадает с именем, используемым при обращении к ним в сценарии.

В следующий раз я расскажу о том, как применять полученные знания при создании сценариев управления.

Криста Андерсон - независимый автор и консультант журнала Windows NT Magazine. Ее последняя книга - "Mastering Local Area Networks". С ней можно связаться по адресу: candersn@adelphia.net.


Советы по составлению сценариев

В следующей статье будут приведены более конкретные советы по программированию на VBScript, а сейчас ограничимся общими правилами, которых нужно придерживаться всегда:

  • строки сценария должны быть короткими: они легче читаются. VBScript допускает использование знака подчеркивания для разрыва строки, а конструкция If ...Then ... Else поможет избавиться от нагромождения логики в одной строке;
  • не скупитесь на комментарии. Сейчас вы еще помните, зачем нужна данная строка кода. Но вспомните ли вы об этом через полгода? А другой человек - разберется ли он без посторонней помощи в чужом коде? Убедитесь, что логика кода исчерпывающе объясняется в комментариях;
  • смешивайте регистр написания кода. Переменная oDiskSpace читается легче, чем odiskspace или ODISKSPACE. VBScript в большинстве случаев не зависит от регистра (единственное исключение - вычисление значения ASCII-символа);
  • при работе с Windows Script Host (WSH) следует использовать среду командной строки (command-line environment). WSH может исполняться в двух средах - в среде командной строки и в графической среде (по умолчанию). В первом случае вывод направляется в командное окно, если только программист не перенаправит поток данных в другое место. В графической среде вывод поступает в окна сообщений. Чаще всего используется командная среда. Некоторые операции в графической среде не работают, и если несколько строк кода генерирует вывод, то для каждой из них понадобится свое окошко сообщений. В результате работа сценария будет приостанавливаться до тех пор, пока оператор не нажмет кнопку ОК. Для исполнения сценария в командной среде следует воспользоваться одним из двух способов: предварять каждую команду сценария вызовом cscript, например:
    cscript getfree.vbs

    либо установить среду командной строки в виде среды по умолчанию:

    wscript //h:cscript //s
    
  • присваивайте имена переменным в соответствии с типом представляемых данных (т. е. имена строковых переменных должны начинаться с s, объектных - с o). Подобная практика поможет при отладке кода. В ряде случаев при несоответствии типов данных объявленным переменным работа сценария будет протекать не так, как ожидается. А если тип данных ассоциируется с названием переменной, ошибки из-за несоответствия типов переменных и данных будут выявляться быстрее;
  • заранее и в явном виде описывайте переменные. Хотя переменные разрешено описывать неявно (просто присваивая им значения), их применение можно запретить. Для этого используйте утверждение Option Explicit в самом начале файла-сценария. С этого момента любая применяемая в коде программы переменная должна явно описываться оператором Dim, что позволит ограничить число ошибок из-за случайно или неверно набранных переменных;
  • пишите сценарии в текстовом редакторе. Не применяйте для этих целей текстовый процессор с последующим сохранением данных в редакторе.

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

 

Новости мира IT:

Архив новостей

Последние комментарии:

Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...