Windows PowerShell
Скачать 0.93 Mb.
|
Windows PowerShell Введение в технологии языка сценариев для пользователей без базовых знаний MICROSOFT SWITZERLAND 1 октября 2007 Франк Кох (БЕРН) Разработчик и пропагандист платформы Windows PowerShell Чего следует ожидать от этой короткой работы – Попытка предисловия Зачем написана эта книга Эта книга, «Windows PowerShell», является введением в Windows PowerShell, а также содержит практические примеры, позволяющие дать краткое введение в тему, даже если у читателя нет серьезного опыта в написании сценариев. Эта книга совершенно точно не предназначена для профессиональных программистов сценариев – существует обширная справка по Windows PowerShell, множество форумов в Интернете и дополнительная литература, которые обеспечат экспертов всей необходимой информацией. Однако новичок сможет найти в этой книге все, что нужно, чтобы подробнее узнать о сценариях, и, будем надеяться, научиться получать удовольствие от работы с компьютером даже без мыши. Источниками для этой книги в основном послужили публикации Microsoft по Windows PowerShell. Информация в книге представлена по-новому, удобно для целевой аудитории. Мы не стали излагать в начале книги теорию, ее место занимают различные примеры и небольшие практические задания, которые будут надежно удерживать ваше внимание. Раз вы прочли этот текст и решили сделать Windows PowerShell постоянной частью вашей обычной работы с компьютером, не стесняйтесь читать оригинальную документацию по Windows PowerShell, которая будет автоматически установлена при установке Windows PowerShell: • Первые шаги с Windows PowerShell • Базовые принципы Windows PowerShell Чтобы получить реальную пользу от этой книги, вы должны иметь доступ к ПК, на котором будете делать упражнения во время чтения. Единственное предварительное условие состоит в том, что это должен быть ПК с установленным Windows PowerShell 1.0, который поставляется бесплатно в составе Windows XP SP2. Сведения о загрузке и установке PowerShell см. на указанных ниже веб-сайтах. Другие источники информации в сети Интернет Вводная страница Windows PowerShell, содержащая ссылку на загрузку: www.microsoft.com/PowerShell . Здесь вы также сможете найти другие ссылки на очень полезные Интернет-трансляции, книги и другие форумы поддержки. Полезные блоги о Windows PowerShell можно найти по адресу http://blogs.msdn.com/PowerShell/ . Здесь можно прочитать о методах программирования сценариев и найти практические примеры. Абсолютно любые. В Швейцарии вы можете также найти сведения на немецком языке в блоке команды ITPro по адресу http://blogs.technet.com/chITPro-DE . В нем можно найти ссылки на немецкие Интернет-трансляции о Windows PowerShell и загрузить примеры к книге из архива за март/апрель 2007 г.. Много полезной информации о Windows PowerShell на русском языке можно найти в блогах Андрея Бешкова http://blogs.technet.com/abeshkov/default.aspx , Василия Гусева http://xaegr.wordpress.com и Дмитрия Сотникова http://www.itcommunity.ru/blogs/dmitrysotnikov/default.aspx . Переводчик этой книги тоже иногда пишет о PowerShell в своем блоге http://pwrshell.blogspot.com/ Содержание Зачем написана эта книга ................................................................................................ 2 Другие источники информации в сети Интернет ............................................................ 2 Первое впечатление о Windows PowerShell ................................................................... 5 Расширенные возможности вывода: конвейеры ............................................................ 7 Вводные упражнения с объектами Windows PowerShell ................................................ 8 Работа с процессами ........................................................................................................ 8 Вывод в файлы формата TXT, CSV или XML ................................................................. 9 Вывод в цвете ................................................................................................................. 10 Проверка условий с помощью командлета if ................................................................ 11 Вывод в виде HTML ........................................................................................................ 12 Работа с файлами .......................................................................................................... 15 Поиск информации об объектах с помощью Get-Member ............................................ 16 Удаление файлов ........................................................................................................... 18 Создание папок ............................................................................................................... 19 Если у вас есть время … ................................................................................................ 21 Windows PowerShell как машина обработки произвольных объектов ........................ 23 Объекты WMI................................................................................................................... 23 Работа с объектами .NET и XML.................................................................................... 25 Работа с COM-объектами .............................................................................................. 26 Работа с журналами сообщений .................................................................................... 29 Сценарии-решения к упражнениям в этой книге .......................................................... 30 Примеры к Windows PowerShell – от простых к сложным ............................................ 33 Теоретические принципы Windows PowerShell ............................................................. 35 Windows PowerShell – краткое введение ....................................................................... 35 Цели разработки Windows PowerShell ........................................................................... 35 О тексте, разборе текста и объектах ............................................................................. 35 Новый язык сценариев ................................................................................................... 36 Команды Windows и служебные программы ................................................................. 37 Интерактивная среда ...................................................................................................... 37 Поддержка сценариев .................................................................................................... 37 CMD, WScript или PowerShell? Что выбрать? ............................................................... 37 Windows PowerShell 1.0 .................................................................................................. 38 Безопасность при использовании сценариев ............................................................... 39 Windows Power Shell в работе Windows PowerShell является свободно распространяемым приложением к семейству операционных систем Windows XP и выше, его можно загрузить с веб-сайта Microsoft по адресу http://www.microsoft.com/powershell . Необходимым предварительным условием является наличие среды .NET Framework 2.0, если она еще не установлена, ее следует загрузить и установить отдельно. Сам по себе пакет Windows PowerShell имеет относительно малый объем, около 1,5 МБайт, и легко устанавливается автоматически через стандартные каналы распространении программного обеспечения. Следует лишь учитывать, что для каждой версии и архитектуры Windows используется своя версия Windows PowerShell. После установки Windows PowerShell помещает себя в меню Start, доступ к ней можно получить, щелкнув по пиктограмме быстрого доступа или введя «PowerShell» в окно для запуска команд Windows. Первое впечатление о Windows PowerShell Чтобы получить первое впечатление, запустите одновременно Windows PowerShell и классическую командную строку CMD из меню Start. На первый взгляд обе командные оболочки выглядят очень похоже – за исключением разного цвета: Рисунок 1: Классическая командная строка CMD Рисунок 2: Windows PowerShell Ничего неожиданного в этом нет, поскольку обе командные оболочки используют один и тот же механизм командной строки. К сожалению, это также означает, что Windows PowerShell страдает такой же плохой реализацией операций копирования/вставки, как и CMD. Поэтому будут небесполезны следующие советы: • Выберите нужный текст с помощью мыши • Нажмите правую кнопку мыши (= копирование) • Поместите курсор в нужное место • Нажмите правую кнопку мыши (= вставка) Попробуйте сделать это сами. Скопируйте первую строку текста в каждой из оболочек (то есть «Copyright (c) 2006 Microsoft Corporation») и вставьте ее в качестве командной строки. Не беспокойтесь о сообщениях об ошибках, которые появятся после того, как вы нажмете Enter. Привыкайте к этим упражнениям с кнопками мыши, позднее вам придется часто их использовать. Несмотря на то, что внешне эти оболочки командной строки одинаковы, содержимое и функции каждой из них сильно различаются. Самый простой способ понять это – взглянуть на интерактивную справку. Первый же взгляд ясно покажет, что Windows PowerShell предоставляет значительно больше функций, чем CMD; более 100 команд, также называемых командлетами (пишется «cmdlets»). Сама CMD содержит всего несколько команд, поэтому для нее было разработано множество вспомогательных программ. Поскольку каждая из этих программ CMD имеет собственный синтаксис, опытные эксперты по CMD наизусть знают множество разных команд и их логику. Для командлетов синтаксис и логика единообразны. Команды Windows PowerShell следуют определенным правилам именования: • Команды Windows PowerShell состоят из глагола и существительного (всегда в единственном числе), разделенных тире. Команды записываются на английском языке. Пример: Get-Help вызывает интерактивную справку по синтаксису Windows PowerShell • Перед параметрами ставится символ «-»: Get-Help -Detailed • В Windows PowerShell также включены псевдонимы многих известных команд. Это упростит вам знакомство и использование Windows PowerShell. Пример: Команды help (классический стиль Windows) и man (классический стиль Unix) работают так же, как и Get-Help. Выведите на экран различные тексты справки для каждой командной оболочки. Введите команды help в каждой из оболочек. Вы увидите, что в каждой справке приводится разное количество документированных команд. Вместо help или man в Windows PowerShell можно также использовать команду Get- Help. Ее синтаксис описан ниже: • Get-Help выводит на экран справку об использовании справки • Get-Help * перечисляет все команды Windows PowerShell • Get-Help выводит справку по соответствующей команде • Get-Help -Detailed выводит подробную справку с примерами команды Использование команды help для получения подробных сведений о команде help: Get-Help Get-Help -Detailed. Подсказка: Используйте клавишу TAB для автоматического завершения ввода команды. Это поможет вам избежать опечаток. Расширенные возможности вывода: конвейеры Как было сказано выше, Windows PowerShell является объектно-ориентированной командной оболочкой. Это означает, что вводимые и выводимые данные команд как правило являются объектами. Поскольку человек не может читать объекты, Windows PowerShell «транслирует» объекты для вывода на экран в текст (профессионалы могут даже найти в Windows PowerShell команды, которые позволят настроить вывод в соответствии с их нуждами). На связывание команд указывает команда конвейера: | Эту связку можно использовать также для создания собственной книги Windows PowerShell. Get-Help * | Get-Help -Detailed сделает это для вас: команда Get-Help * создаст список известных команд, который будет подан на вход команды Get-Help - Detailed. Она выведет очень много информации, вывод можно будет прервать комбинацией клавиш CTRL-C. Чтобы иметь возможность использовать результат «справочника» позднее, было бы разумно перенаправить выход в файл, а не выводить данные на экран. Windows PowerShell имеет для этого специальную команду Out-File, более известную в варианте символа «>». Теперь создайте собственный «файл книги». Введите соответствующую команду: Get-Help * | Get-Help -Detailed | Out-File c c c c: : : :\Powershell-Help.txt или даже Get-Help * | Get-Help -Detailed > C C C C: : : :\PowerShell-Help.txt. Учтите, что вы должны иметь права на запись в соответствующий каталог (в данном случае C:\ ). Откройте свой первый файл справки в Блокноте и используйте его как интерактивную справку в последующей работе. Если вы когда-либо будете искать команду, Get-Help поможет вам и в этом. Если вы хотите что-то отсортировать, попробуйте найти что-то подходящее, используя команду Get-Help Sort*. Get-Help будет искать соответствующую команду в репозитории команд Windows PowerShell. Поскольку все команды начинаются с глагола, мы легко можем структурировать поиск, используя форму Get-Help ()*+)()*,-./0 12/0(/0 1212 *. Если вы еще не знаете, символ «*» означает поиск по шаблону. Он используется, если после текста для поиска может идти все, что угодно, а мы хотим найти все, что начинается с нашего текста для поиска. После того, как вы найдете команду (например, пусть это будет Sort-Object), просто вызовите еще раз Get-Help, теперь с соответствующей командой и параметром - Detailed, чтобы найти примеры использования этой команды: Get-Help Sort-Object -Detailed. Теперь вы должны быть в состоянии решить свою проблему. Вводные упражнения с объектами Windows PowerShell Если вы никогда раньше не работали с объектами, примеры ниже позволят вам понять многочисленные возможности этого мира. Объекты не являются чем-то новым в программировании, но в области сценариев ничего подобного еще не было. Если вы заинтересовались работой с объектами, подробную дополнительную литературу вы сможете найти в MSDN по адресам http://msdn.microsoft.com и http://www.microsoft.com/switzerland/msdn/ru/default.mspx . Давайте рассмотрим объекты на примере объекта процесса «process». Если слово «процесс» для вас ничего не значит, подумайте о том, что вы видите на экране, когда вызываете Диспетчер задач (Task Manager). Если вы заинтересовались объектом «process», на страницах MSDN вы найдете информацию о нем. Работа с процессами Команда Get-Process выводит список всех процессов в вашей системе. Этот список может быть очень длинным. Для сортировки списка вы можете воспользоваться другим командлетом: Sort-Object. По умолчанию Sort-Object имеет фиксированный порядок сортировки (по возрастанию), который можно изменить с помощью параметра - Descending. В качестве аргумента можно указать свойство объекта, например, используемое время процессора (CPU). A1: Сейчас ваша задача состоит в создании списка всех процессов и его сортировке в порядке убывания в соответствии с используемым временем процессора. Вы уже знаете, как это сделать: Get-Process, Sort-Object и конвейер (|). Подсказка: CPU не является параметром Sort-Object, это аргумент, который вы можете использовать при сортировке. Поэтому он не имеет символа «-». В следующем упражнении мы хотим немного ограничить список, чтобы с ним было проще работать. Мы используем команду Select-Object. Select-Object понимает несколько параметров (чтобы их узнать, воспользуйтесь командой Get-Help), но нам понадобятся только -First x и -Last y, с помощью которых можно узнать первые x или последние y объектов списка, например Select-Object -First 5. Командлет Select- Object не работает сам по себе, он ожидает исходных данных, передаваемых через конвейер. A2: Создадим список первых 10 процессов по используемому времени процессора. Для этого возьмем результаты упражнения A1 и добавим к ним команду Select-Object. Существует два пути получить идеальное решение, в зависимости от того, как вы хотите отсортировать список. Давайте рассмотрим оба. Подсказка: в одном из путей используется параметр -First, в другом -Last. Мы используем это упражнение в качестве краткого введения в переменные. Говоря простым языком, в переменных хранятся все возможные значения, даже если они являются объектами. Здесь мы тоже сошлемся на дополнительную литературу, которую следует использовать для более глубокого изучения переменных. Сейчас нам нужно только знать, что переменные в PowerShell всегда должны начинаться с символа «$». Вы можете сохранить результат упражнения A2 в переменной, это позволит вам в любое время получать доступ к списку из 10 процессов. Получив текущий список и сравнив его со значением переменной, можно оценить изменения в системе. Присвоить значение переменной можно легко: $a = get-process | sort-object CPU -de… Многоточие в конце строки указывает, что выражение не дописано до конца. Если попытаться выполнить его в таком виде, PowerShell сообщит об ошибке. Закончите его самостоятельно. A3: Назначьте переменной $P сокращенный список процессов из упражнения A2. Подсказка: С помощью клавиши курсора «>)?+2 **+?@» можно вызвать последнюю использованную команду, а с помощью клавиши «Home» переместить курсор в начало строки, а затем ввести данные. Вывести содержимое переменной можно, просто напечатав в командной строке $P. Рисунок 3: Содержимое переменной $P Вывод в файлы формата TXT, CSV или XML По умолчанию Windows PowerShell выводит результаты работы цепочки команд на экран. Все объекты преобразуются в текст, чтобы человек мог прочитать содержащиеся в них данные. Для этого используется команда Out-Host. Однако поскольку Windows PowerShell построена с расчетом на максимальную эффективность, эта команда добавляется автоматически и будет невидима, если вы не добавите ее явно. Существуют альтернативы команды Out-Host; их можно найти с помощью команды Get-Help Out*. Вывести результаты в текстовый файл можно легко и быстро: Out-File /BC02. Многие командные оболочки используют команду «>», которая поддерживается и в Windows PowerShell. Выводимые данные можно преобразовать не только в текстовый файл, но и в CSV или XML. После работы команды Out-Host специальные командлеты выполнят для вас и эту задачу. Эти командлеты имеют имена Export-CSV и Export-CliXML, оба они требуют в качестве аргумента имя файла. И да, конечно – если вы можете экспортировать, вы можете и импортировать. Для импорта файлов с целью просмотра используются команды Import-CSV и Import-CliXML. A4: Возьмите переменную $P из упражнения A3 и сохраните ее содержимое в текстовый файл с именем «A4.txt». Затем сохраните содержимое $P в файл CSV с именем «A4.CSV», и наконец в файл XML с именем «A4.XML». Подсказка: при использовании > не нужен символ |, который требуется только для командлетов, таких как Out-File, Export-CSV и т.д. Просмотрите результат, для этого можно воспользоваться Блокнотом (Notepad). |