Командная строка и сценарии Windows
Покупка
Тематика:
Windows
Издательство:
ИНТУИТ
Автор:
Попов А. В.
Год издания: 2016
Кол-во страниц: 271
Дополнительно
В курсе рассматриваются стандартные технологии (WSH, WMI, ADSI) и программные продукты (командный интерпретатор Cmd.exe, серверы сценариев CScript и WScript, оболочка Windows PowerShell) фирмы Microsoft, разработанные для автоматизации работы в операционной системе Windows.
В курсе рассматриваются разработанные фирмой Microsoft программные средства, позволяющие автоматизировать повседневную работу администраторов и пользователей операционной системы Windows путем выполнения команд в командной строке (интерактивный режим) или запуска предварительно созданных сценариев (пакетный режим). Описываются возможности имеющейся во всех версиях Windows стандартной оболочки командной строки Cmd.exe и языка командных файлов, поддерживаемых этой оболочкой. Подробно рассматривается сервер сценариев Windows Script Host (WSH), позволяющий выполнять в операционной системе сценарии, которые имеют доступ к
внутренним объектным моделям и инфраструктурам Windows (COM, WMI, ADSI) и могут управлять работой других приложений-серверов автоматизации. Приводятся сведения о базовой технологии Windows Management Instrumentation (WMI), предназначенной для централизованного управления комьютерными системами на базе Windows. Обсуждаются способы работы с объектами WMI из командной строки с помощью программы WMI Command-line (WMIC). Рассматривается самый современный и мощный инструмент автоматизации: новая объектно-ориентированная оболочка командной строки и среда выполнения сценариев Windows PowerShell, базирующаяся на платформе
.NET. Обсуждаются основные концепции и механизмы PowerShell и отличия ее от всех остальных оболочек командной строки. Приводятся примеры использования из PowerShell объектов COM, WMI и .NET.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
- ВО - Магистратура
- 09.04.01: Информатика и вычислительная техника
- 09.04.02: Информационные системы и технологии
- 09.04.03: Прикладная информатика
- 09.04.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Командная строка и сценарии Windows 2-е издание, исправленное Попов А.В. Национальный Открытый Университет “ИНТУИТ” 2016 2
Командная строка и сценарии Windows/ А.В. Попов - М.: Национальный Открытый Университет “ИНТУИТ”, 2016 В курсе рассматриваются стандартные технологии (WSH, WMI, ADSI) и программные продукты (командный интерпретатор Cmd.exe, серверы сценариев CScript и WScript, оболочка Windows PowerShell) фирмы Microsoft, разработанные для автоматизации работы в операционной системе Windows. В курсе рассматриваются разработанные фирмой Microsoft программные средства, позволяющие автоматизировать повседневную работу администраторов и пользователей операционной системы Windows путем выполнения команд в командной строке (интерактивный режим) или запуска предварительно созданных сценариев (пакетный режим). Описываются возможности имеющейся во всех версиях Windows стандартной оболочки командной строки Cmd.exe и языка командных файлов, поддерживаемых этой оболочкой. Подробно рассматривается сервер сценариев Windows Script Host (WSH), позволяющий выполнять в операционной системе сценарии, которые имеют доступ к внутренним объектным моделям и инфраструктурам Windows (COM, WMI, ADSI) и могут управлять работой других приложений-серверов автоматизации. Приводятся сведения о базовой технологии Windows Management Instrumentation (WMI), предназначенной для централизованного управления комьютерными системами на базе Windows. Обсуждаются способы работы с объектами WMI из командной строки с помощью программы WMI Command-line (WMIC). Рассматривается самый современный и мощный инструмент автоматизации: новая объектно-ориентированная оболочка командной строки и среда выполнения сценариев Windows PowerShell, базирующаяся на платформе .NET. Обсуждаются основные концепции и механизмы PowerShell и отличия ее от всех остальных оболочек командной строки. Приводятся примеры использования из PowerShell объектов COM, WMI и .NET. (c) ООО “ИНТУИТ.РУ”, 2008-2016 (c) Попов А.В., 2008-2016 3
Эволюция инструментов для автоматизации работы в Microsoft Windows Описываются стандартные (входящие в поставку операционной системы) программные средства для автоматизации администрирования и повседневной работы в Microsoft Windows. Обсуждаются возможности командного интерпретатора Cmd.exe, сервера сценариев WSH и оболочки Windows PowerShell Эволюция инструментов для автоматизации работы в Microsoft Windows В настоящее время графический интерфейс Windows стал настолько привычным, что многие пользователи и начинающие администраторы даже не задумываются (а зачастую и просто не знают) об альтернативных способах управления данной операционной системой, связанных с командной строкой (command line) и различными сценариями (scripts), о тех преимуществах, которые дают эти инструменты с точки зрения автоматизации работы, то есть решения различных задач в автоматическом режиме, без участия человека. Подобная ситуация обусловлена тем, что исторически командная строка всегда была слабым местом операционной системы Windows (по сравнению с Unix-системами). Причиной этого, в основном, является то, что изначально компания Microsoft ориентировалась на широкую аудиторию неискушенных пользователей, не желающих особо вникать в технические детали выполнения тех или иных действий в системе. Поэтому основные усилия разработчиков операционной системы направлялись на улучшение графической оболочки для более комфортной работы непрофессионалов, а не на создание рабочей среды для специалистов или опытных пользователей. Как показало время, с коммерческой точки зрения на рынке персональных (домашних или офисных) компьютеров эта стратегия оказалась более чем успешной – миллионы людей используют графический интерфейс Windows для запуска нужных им программ, работы в офисных пакетах, просмотра фильмов и т.п. Да и управлять одним Windowsсервером сегодня несложно – операционная система предлагает удобные графические средства для настройки различных параметров и выполнения ежедневных администраторских задач, а с помощью службы терминалов легко можно работать на удаленном сервере, физически расположенном на другом континенте. Однако подобная модель управления не является масштабируемой: если администрировать не один, а десять серверов, используя стандартные графические инструменты, то одну и ту же последовательность изменения элементов управления в диалоговых окнах придется повторить десять раз, следовательно, в этом случае остро встает вопрос об автоматизации выполнения рутинных операций (например, проведение инвентаризации оборудования и программного обеспечения, мониторинг работы служб, анализ журналов событий и т.д.) на множестве компьютеров. Помочь в этом могут либо специальные (как правило тяжеловесные и недешевые) приложения типа Microsoft Systems Management Server (SMS), либо сценарии, которые пишутся администраторами самостоятельно (на языке оболочки командной строки или на 4
специальных языках сценариев) и поддерживаются непосредственно операционной системой, без установки сторонних программных продуктов. Поэтому для профессионала, занимающегося администрированием информационных систем на базе Windows, знание возможностей командной строки, сценариев и технологий автоматизации, поддерживаемых данной операционной системой, просто необходимо. При этом, однако, неправильно было бы думать, что командная строка или сценарии нужны только администраторам. Ведь ежедневные рутинные задачи пользователей (связанные, например, с копированием или архивированием файлов, подключением или отключением сетевых ресурсов и т.п.), которые обычно выполняются с помощью графического интерфейса проводника Windows, можно полностью самостоятельно автоматизировать, написав нехитрый командный файл, состоящий всего из нескольких строчек! Более того, для человека, не знающего основные команды Windows и такие базовые возможности операционной системы, как перенаправление ввода/вывода и конвейеризация команд, некоторые простейшие задачи могут показаться нетривиальными. Попробуйте, например, пользуясь только графическими средствами, сформировать файл, содержащий имена файлов из всех подкаталогов какого-либо каталога! А ведь для этого достаточно выполнить единственную команду DIR (с определенными ключами) и перенаправить вывод этой команды в нужный текстовый файл. Каким же нам хотелось бы видеть инструмент для автоматизации работы в операционной системе, какими возможностями он должен обладать? Желательно, чтобы в нем было реализовано следующее: работа в разных версиях операционной системы (желательно во всех) без установки какого-либо дополнительного программного обеспечения; интеграция с командной строкой (непосредственное выполнение вводимых с клавиатуры команд); согласованный и непротиворечивый синтаксис команд и утилит; наличие подробной встроенной справки по командам с примерами использования; возможность выполнения сценариев, составленных на простом для изучения языке; возможность использования всех технологий, поддерживаемых операционной системой. В Unix-системах в качестве инструмента автоматизации выступает стандартная оболочка (shell) или ее модификации (bashell, kshell, cshell и т.д.), причем этот аспект операционной системы стандартизирован в рамках POSIX (стандарт мобильных систем). В операционной системе Windows дело обстоит сложнее. На сегодняшний день одного “идеального” средства автоматизации, удовлетворяющего сразу всем перечисленным выше требованиям, в Windows нет; в последних версиях операционной системы поддерживаются несколько стандартных инструментов автоматизации, сильно отличающихся друг от друга: оболочка командной строки cmd.exe, среда выполнения 5
сценариев Windows Script Host и оболочка Microsoft PowerShell. Поэтому администратору или пользователю Windows приходится выбирать, каким именно подходом воспользоваться для решения определенной задачи, а для этого желательно иметь четкое представление о сильных и слабых сторонах данных средств автоматизации. Здесь мы кратко обсудим достоинства и недостатки каждого из них (теоретические и практические подробности будут рассмотрены в последующих лекциях). Оболочка командной строки command.com/cmd.exe Во всех версиях операционной системы Windows поддерживается интерактивная оболочка командной строки (command shell) и по умолчанию устанавливается определенный набор утилит командной строки (количество и состав этих утилит зависит от версии операционной системы). Вообще, любую операционную систему можно представить в виде совокупности ядра системы, которое имеет доступ к аппаратуре и оперирует файлами и процессами, и оболочки (командного интерпретатора) с утилитами, которые позволяют пользователю получить доступ к функциональности ядра операционной системы. Механизм работы оболочек в разных системах одинаков: в ответ на приглашение (“подсказку”, prompt), выдаваемое находящейся в ожидании оболочкой, пользователь вводит некоторую команду (функциональность этой команды может быть реализована либо самой оболочкой, либо определенной внешней утилитой), оболочка выполняет ее, при необходимости выводя на экран какую-либо информацию, после чего снова выводит приглашение и ожидает ввода следующей команды. Замечание С технической точки зрения оболочка представляет собой построчный интерпретатор простого языка сентенциального (директивного) программирования, в качестве операторов которого могут использоваться исполняемые программы. Наряду с интерактивным режимом работы оболочки, как правило, поддерживают и пакетный режим, в котором система последовательно выполняет команды, записанные в текстовом файле-сценарии. Оболочка Windows не является исключением, с точки зрения программирования язык командных файлов Windows может быть охарактеризован следующим образом: реализация сентенциальной (директивной) парадигмы программирования; выполнение в режиме построчной интерпретации; наличие управляющих конструкций; поддержка нескольких видов циклов (в том числе специальных циклов для обработки текстовых файлов); наличие оператора присваивания (установки значения переменной); возможность использования внешних программ (команд) операционной системы в качестве операторов и обработки их кодов возврата; наличие нетипизированных переменных, которые декларируются первым 6
упоминанием (значения переменных могут интерпретироваться как числа и использоваться в выражениях целочисленной арифметики). Начиная с версии Windows NT, оболочка командной строки представляется интерпретатором Cmd.exe, который расширяет возможности оболочки command.com операционной системы MS-DOS. В свою очередь функциональность командного интерпретатора command.com была позаимствована из операционной системы CP/M, оболочка которой представляла собой значительно упрощенный и урезанный вариант оболочки Unix-систем. Таким образом, оболочка командной строки MS-DOS изначально уступала Unixоболочкам по удобству работы и развитости языка сценариев; в командной оболочке Windows (cmd.exe), несмотря на все сделанные улучшения, не удалось преодолеть данное отставание ни в режиме интерактивной работы (например, в cmd.exe отсутствует поддержка псевдонимов для длинных названий команд и не реализовано автоматическое завершение команд при вводе их с клавиатуры), ни в синтаксисе или возможностях языка командных файлов. Ситуация усугублялась тем, что Windows всегда проигрывала Unix-системам в количестве и функциональных возможностях стандартных (не требующих дополнительной установки) утилит командной строки, а также в качестве и полноте встроенной справочной системы по командам оболочки. На практике проблему отсутствия нужной функциональности у стандартных команд приходится решать либо с помощью утилит пакета Windows Resource Kit для соответствующей версии операционной системы, либо путем поиска подходящей утилиты сторонних производителей. Кроме того, в Windows можно пользоваться POSIX-совместимыми утилитами и оболочками с помощью пакета Microsoft Services For Unix (SFU). Данный продукт разрабатывался еще для Windows NT и первоначально не входил в состав операционной системы, его нужно было приобретать за отдельную плату. В дальнейшем пакет SFU стал бесплатным и даже был включен в состав операционной системы Windows Server 2003 R2. Итак, учитывая все сказанное выше, мы можем сделать следующий вывод: оболочка командной строки cmd.exe и командные файлы – наиболее универсальные и простые в изучении средства автоматизации работы в Windows, доступные во всех версиях операционной системы, которые, однако, существенно проигрывают аналогичным инструментам в Unix-системах и не обеспечивают доступ к объектным моделям, поддерживаемым операционной системой (COM, WMI, .NET). Поддержка языков сценариев. Сервер сценариев Windows Script Host Следующим шагом в развитии средств и технологий автоматизации в операционной системе Windows стало появление сервера сценариев Windows Script Host (WSH). Этот инструмент разработан для всех версий Windows и позволяет непосредственно в операционной системе выполнять сценарии на полноценных языках сценариев (по умолчанию, VBScript и JScript), которые до этого были доступны только внутри 7
HTML-страниц и работали в контексте безопасности веб-браузера (в силу этого подобные сценарии, например, могли не иметь доступа к файловой системе локального компьютера). По сравнению с командными файлами интерпретатора cmd.exe сценарии WSH имеют несколько преимуществ. Во-первых, VBScript и JScript – это полноценные алгоритмические языки, имеющие встроенные функции и методы для обработки символьных строк, выполнения математических операций, обработки исключительных ситуаций и т.д.; кроме того, для написания сценариев WSH может использоваться любой другой язык сценариев (например, широко распространенный в Unix-системах Perl), для которого установлен соответствующий модуль поддержки. Во-вторых, WSH поддерживает несколько собственных объектов, свойства и методы которых позволяют решать некоторые часто возникающие повседневные задачи администратора операционной системы: работа с сетевыми ресурсами, переменными среды, системным реестром, ярлыками и специальными папками Windows, запуск и управление работой других приложений. В-третьих, из сценариев WSH можно обращаться к службам любых приложенийсерверов автоматизации (например, программ из пакета Microsoft Office), которые регистрируют в операционной системе свои объекты. Наконец, сценарии WSH позволяют работать с объектами информационной модели Windows Management Instrumentation (WMI), обеспечивающей программный интерфейс управления всеми компонентами операционной модели, а также с объектами службы каталогов Active Directory Service Interface (ADSI) (объектные модели WMI и ADSI будут обсуждаться подробнее в следующих лекциях). Следует также отметить, что технология WSH поддерживается в Windows уже довольно давно, в Интернете (в том числе на сайте Microsoft) можно найти множество готовых сценариев, выполняющих ту или иную операцию и при определенных навыках и знаниях быстро “подогнать” эти сценарии под свои конкретные задачи. Поговорим теперь о слабых местах WSH. Прежде всего, сам по себе WSH – это только среда выполнения сценариев, а не оболочка; WSH не интегрирован с командной строкой, то есть отсутствует режим, в котором можно было вводить команды с клавиатуры и сразу видеть результат их выполнения. Большим минусом является то, что в операционной системе по умолчанию нет полноценной подробной справочной информации по объектам WSH и языкам VBScript/JScript (документацию приходится искать в Интернете на сайте Microsoft). Другими словами, если вы, например, не помните синтаксис определенной команды VBScript/JScript или точное название свойства объекта WSH, под рукой у вас нет распечатанной документации, а компьютер не имеет выхода в Интернет, то написать корректный сценарий вам просто не удастся (в данном аспекте командные файлы более универсальны, так как практически у всех команд есть по крайней мере встроенное описание используемых ими ключей, а в операционной системе имеется справочный 8
файл с информацией о всех стандартных командах). Наконец, сценарии WSH представляют собой довольно серьезную потенциальную угрозу с точки зрения безопасности, известно большое количество вирусов, использующих WSH для выполнения деструктивных действий. Таким образом, можно дать следующую общую оценку: сценарии WSH – это универсальный инструмент, который в любой версии операционной системы Windows позволяет решать задачи автоматизации практически любой степени сложности, но требует при этом большой работы по изучению самих языков сценариев и ряда смежных технологий управления операционной системой (WMI, ADSI и т.п.). Командная оболочка Microsoft PowerShell Итак, к началу XXI века ситуацию со средствами автоматизации работы в Windows нельзя было назвать совсем хорошей. С одной стороны функциональности и гибкости языка оболочки cmd.exe было явно недостаточно, а с другой стороны сценарии WSH, работающие с объектными моделями ADSI и WMI, оказались слишком сложными для пользователей среднего уровня и начинающих администраторов. В 2000 году была начата разработка новой оболочки для доступа к объектам WMI из командной строки (WMI Command-line, WMIC). Этот продукт оказался не особенно удачным, так как в нем акцент был сделан на функциональные особенности WMI, а не на удобство работы пользователя. Начав дорабатывать WMIC, специалисты Microsoft поняли, что можно реализовать оболочку, которая не ограничивалась бы только работой с объектами WMI, а также предоставляла бы доступ к любым классам платформы .NET Framework, обеспечивая тем самым возможность пользоваться из командной строки всеми мощными функциональными возможностями данной среды. Перед разработчиками новой оболочки, получившей название Windows PowerShell (предварительное название – Monad), стояли следующие основные цели и задачи, которые были успешно решены: применение командной строки в качестве основного интерфейса администрирования; реализация модели ObjectFlow (элементом обмена информации является объект); переработка существующих команд, утилит и оболочки; интеграция командной строки, объектов COM, WMI и .NET; работа с произвольными источниками данных в командной строке по принципу файловой системы. Вообще, самая важная идея, заложенная в PowerShell, состоит в том, что в командной строке вывод результатов команды представляет собой не текст (в смысле последовательности байтов), а объект (данные вместе со свойственными им методами). В силу этого работать в PowerShell становится проще, чем в традиционных оболочках, так как не нужно выполнять никаких манипуляций по выделению нужной информации из символьного потока. 9
Кроме того, разработчики старались собрать в PowerShell все лучшие аспекты других оболочек командной строки из разных операционных систем. По их словам, сильное влияние на PowerShell оказали следующие продукты: BASH, KSH (конвейеризация или композиция команд); AS400/VMS (стандартные названия команд, ускоряющие изучение); TCL/WSH (поддержка встраиваемости и нескольких языков); PERL, PYTHON (выразительность и стиль). Отметим, что PowerShell одновременно является и оболочкой командной строки (пользователь работает в интерактивном режиме) и средой выполнения сценариев, которые пишутся на специальном языке PowerShell. Интерактивный сеанс в PowerShell похож на работу в оболочке Unix-систем: все команды в PowerShell имеют подробную встроенную справку (для большинства команд приводятся примеры их использования), поддерживается функция автоматического завершения названий команд и их параметров при вводе с клавиатуры, для многих команд имеются псевдонимы, аналогичные названиям Unixутилит (ls, pwd, tee и т.д.). Язык PowerShell несложен для изучения, писать на нем сценарии, обращающиеся к внешним объектам, проще, чем на VBScript или JScript. Отдельное внимание было уделено вопросам безопасности при работе со сценариями (например, запустить сценарий можно только с указанием полного пути к нему, а по умолчанию запуск сценариев PowerShell в системе вообще запрещен). В целом, оболочка PowerShell намного удобнее и мощнее своих предшественников (cmd.exe и WSH), а основным недостатком, сдерживающим распространение нового инструмента, является тот факт, что PowerShell работает не во всех версиях операционной системы Windows. Оболочкой можно пользоваться только на версиях не ниже Windows XP Service Pack 2 с установленным пакетом .NET Framework 2.0. 10