You are on page 1of 44

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 PowerShell в работе Windows PowerShell является свободно распространяемым приложением к семейству операционных систем Windows XP и выше. и легко устанавливается автоматически через стандартные каналы распространении программного обеспечения.microsoft. Первое впечатление о Windows PowerShell Чтобы получить первое впечатление. запустите одновременно Windows PowerShell и классическую командную строку CMD из меню Start. что для каждой версии и архитектуры Windows используется своя версия Windows PowerShell. доступ к ней можно получить.com/powershell.NET Framework 2. Следует лишь учитывать. Необходимым предварительным условием является наличие среды . щелкнув по пиктограмме быстрого доступа или введя «PowerShell» в окно для запуска команд Windows. около 1. На первый взгляд обе командные оболочки выглядят очень похоже – за исключением разного цвета: Рисунок 1: Классическая командная строка CMD Рисунок 2: Windows PowerShell .5 МБайт. если она еще не установлена. Сам по себе пакет Windows PowerShell имеет относительно малый объем.0. его можно загрузить с веб-сайта Microsoft по адресу http://www. После установки Windows PowerShell помещает себя в меню Start. ее следует загрузить и установить отдельно.

Вместо help или man в Windows PowerShell можно также использовать команду GetHelp. Не беспокойтесь о сообщениях об ошибках. разделенных тире. Несмотря на то. Команды записываются на английском языке. как и Get-Help. содержимое и функции каждой из них сильно различаются. К сожалению. Поскольку каждая из этих программ CMD имеет собственный синтаксис. Это поможет вам избежать опечаток. Поэтому будут небесполезны следующие советы: • • • • Выберите нужный текст с помощью мыши Нажмите правую кнопку мыши (= копирование) Поместите курсор в нужное место Нажмите правую кнопку мыши (= вставка) Попробуйте сделать это сами. что Windows PowerShell предоставляет значительно больше функций. что внешне эти оболочки командной строки одинаковы. Пример: Команды help (классический стиль Windows) и man (классический стиль Unix) работают так же. Введите команды help в каждой из оболочек. Для командлетов синтаксис и логика единообразны. . Команды Windows PowerShell следуют определенным правилам именования: • • • Команды Windows PowerShell состоят из глагола и существительного (всегда в единственном числе). также называемых командлетами (пишется «cmdlets»). Первый же взгляд ясно покажет.Ничего неожиданного в этом нет. как и CMD. Подсказка: Используйте клавишу TAB для автоматического завершения ввода команды. Самый простой способ понять это – взглянуть на интерактивную справку. которые появятся после того. Пример: Get-Help вызывает интерактивную справку по синтаксису Windows PowerShell Перед параметрами ставится символ «-»: Get-Help -Detailed В Windows PowerShell также включены псевдонимы многих известных команд. Скопируйте первую строку текста в каждой из оболочек (то есть «Copyright (c) 2006 Microsoft Corporation») и вставьте ее в качестве командной строки. поэтому для нее было разработано множество вспомогательных программ. что в каждой справке приводится разное количество документированных команд. что Windows PowerShell страдает такой же плохой реализацией операций копирования/вставки. Вы увидите. Ее синтаксис описан ниже: • • • • Get-Help выводит на экран справку об использовании справки Get-Help * перечисляет все команды Windows PowerShell Get-Help  выводит справку по соответствующей команде Get-Help  -Detailed выводит подробную справку с примерами команды Использование команды help для получения подробных сведений о команде help: Get-Help Get-Help -Detailed. Привыкайте к этим упражнениям с кнопками мыши. поскольку обе командные оболочки используют один и тот же механизм командной строки. чем CMD. опытные эксперты по CMD наизусть знают множество разных команд и их логику. более 100 команд. Сама CMD содержит всего несколько команд. это также означает. Это упростит вам знакомство и использование Windows PowerShell. позднее вам придется часто их использовать. Выведите на экран различные тексты справки для каждой командной оболочки. как вы нажмете Enter.

Чтобы иметь возможность использовать результат «справочника» позднее. который будет подан на вход команды Get-Help Detailed. а не выводить данные на экран. Windows PowerShell имеет для этого специальную команду Out-File. Теперь создайте собственный «файл книги». Get-Help будет искать соответствующую команду в репозитории команд Windows PowerShell. как вы найдете команду (например. Get-Help * | Get-Help -Detailed сделает это для вас: команда Get-Help * создаст список известных команд. Если вы когда-либо будете искать команду. было бы разумно перенаправить выход в файл.txt. используя команду Get-Help Sort*. попробуйте найти что-то подходящее. Учтите. Get-Help поможет вам и в этом. Если вы хотите что-то отсортировать. теперь с соответствующей командой и параметром Detailed. Откройте свой первый файл справки в Блокноте и используйте его как интерактивную справку в последующей работе.-. Теперь вы должны быть в состоянии решить свою проблему.Расширенные возможности вывода: конвейеры Как было сказано выше. Это означает. пусть это будет Sort-Object). что начинается с нашего текста для поиска. Если вы еще не знаете. Windows PowerShell является объектно-ориентированной командной оболочкой. а мы хотим найти все. Поскольку человек не может читать объекты. просто вызовите еще раз Get-Help. более известную в варианте символа «>». что вводимые и выводимые данные команд как правило являются объектами./0 12/0(/0 1212 *. чтобы найти примеры использования этой команды: Get-Help Sort-Object -Detailed. Он используется. вывод можно будет прервать комбинацией клавиш CTRL-C. используя форму Get-Help ()*+)()*. если после текста для поиска может идти все. что вы должны иметь права на запись в соответствующий каталог (в данном случае C:\ ). мы легко можем структурировать поиск. На связывание команд указывает команда конвейера: | Эту связку можно использовать также для создания собственной книги Windows PowerShell. символ «*» означает поиск по шаблону. После того. . Поскольку все команды начинаются с глагола. Windows PowerShell «транслирует» объекты для вывода на экран в текст (профессионалы могут даже найти в Windows PowerShell команды. Она выведет очень много информации. Введите соответствующую команду: Get-Help * | Get-Help -Detailed | Out-File c:\Powershell-Help. что угодно. которые позволят настроить вывод в соответствии с их нуждами).txt или даже Get-Help * | Get-Help -Detailed > C:\PowerShell-Help.

он ожидает исходных данных. Для сортировки списка вы можете воспользоваться другим командлетом: Sort-Object. Существует два пути получить идеальное решение. Если слово «процесс» для вас ничего не значит. воспользуйтесь командой Get-Help). Сейчас нам нужно только знать. но нам понадобятся только -First x и -Last y. Подсказка: CPU не является параметром Sort-Object. используемое время процессора (CPU). в переменных хранятся все возможные значения. на страницах MSDN вы найдете информацию о нем. подумайте о том. Присвоить значение переменной можно легко: $a = get-process | sort-object CPU -de… . что переменные в PowerShell всегда должны начинаться с символа «$». Select-Object понимает несколько параметров (чтобы их узнать. можно оценить изменения в системе. Получив текущий список и сравнив его со значением переменной.com/switzerland/msdn/ru/default. Поэтому он не имеет символа «-». По умолчанию Sort-Object имеет фиксированный порядок сортировки (по возрастанию). когда вызываете Диспетчер задач (Task Manager). Вы уже знаете. это аргумент. который вы можете использовать при сортировке. в другом -Last. Давайте рассмотрим объекты на примере объекта процесса «process». даже если они являются объектами. это позволит вам в любое время получать доступ к списку из 10 процессов.com и http://www. Мы используем команду Select-Object. который можно изменить с помощью параметра Descending. Этот список может быть очень длинным. A2: Создадим список первых 10 процессов по используемому времени процессора. Командлет SelectObject не работает сам по себе. В следующем упражнении мы хотим немного ограничить список. Подсказка: в одном из путей используется параметр -First. которую следует использовать для более глубокого изучения переменных. чтобы с ним было проще работать. с помощью которых можно узнать первые x или последние y объектов списка. Объекты не являются чем-то новым в программировании. Для этого возьмем результаты упражнения A1 и добавим к ним команду Select-Object. в зависимости от того. Мы используем это упражнение в качестве краткого введения в переменные.mspx. подробную дополнительную литературу вы сможете найти в MSDN по адресам http://msdn. Вы можете сохранить результат упражнения A2 в переменной. например. как это сделать: Get-Process. A1: Сейчас ваша задача состоит в создании списка всех процессов и его сортировке в порядке убывания в соответствии с используемым временем процессора. Работа с процессами Команда Get-Process выводит список всех процессов в вашей системе.microsoft. но в области сценариев ничего подобного еще не было. В качестве аргумента можно указать свойство объекта. что вы видите на экране. Если вы заинтересовались работой с объектами. примеры ниже позволят вам понять многочисленные возможности этого мира. передаваемых через конвейер. Здесь мы тоже сошлемся на дополнительную литературу. как вы хотите отсортировать список.microsoft. Если вы заинтересовались объектом «process». например Select-Object -First 5. Давайте рассмотрим оба.Вводные упражнения с объектами Windows PowerShell Если вы никогда раньше не работали с объектами. Sort-Object и конвейер (|). Говоря простым языком.

A3: Назначьте переменной $P сокращенный список процессов из упражнения A2. Эти командлеты имеют имена Export-CSV и Export-CliXML. Рисунок 3: Содержимое переменной $P Вывод в файлы формата TXT. эта команда добавляется автоматически и будет невидима. A4: Возьмите переменную $P из упражнения A3 и сохраните ее содержимое в текстовый файл с именем «A4. . таких как Out-File. Однако поскольку Windows PowerShell построена с расчетом на максимальную эффективность. их можно найти с помощью команды Get-Help Out*. Закончите его самостоятельно. для этого можно воспользоваться Блокнотом (Notepad). Просмотрите результат. Вывести результаты в текстовый файл можно легко и быстро: Out-File /BC02. Все объекты преобразуются в текст. Подсказка: при использовании > не нужен символ |. а с помощью клавиши «Home» переместить курсор в начало строки. Если попытаться выполнить его в таком виде. просто напечатав в командной строке $P. который требуется только для командлетов. Многие командные оболочки используют команду «>».XML».CSV». и наконец в файл XML с именем «A4. Существуют альтернативы команды Out-Host.txt». Export-CSV и т. если вы не добавите ее явно. Подсказка: С помощью клавиши курсора «>)?+2 **+?@» можно вызвать последнюю использованную команду. которая поддерживается и в Windows PowerShell. CSV или XML По умолчанию Windows PowerShell выводит результаты работы цепочки команд на экран. Вывести содержимое переменной можно. конечно – если вы можете экспортировать.Многоточие в конце строки указывает. чтобы человек мог прочитать содержащиеся в них данные. И да. PowerShell сообщит об ошибке. Для этого используется команда Out-Host. оба они требуют в качестве аргумента имя файла. Затем сохраните содержимое $P в файл CSV с именем «A4. Для импорта файлов с целью просмотра используются команды Import-CSV и Import-CliXML. После работы команды Out-Host специальные командлеты выполнят для вас и эту задачу. вы можете и импортировать. Выводимые данные можно преобразовать не только в текстовый файл. но и в CSV или XML. а затем ввести данные. что выражение не дописано до конца.д.

Давайте рассмотрим пример: Get-Process | ForEach-Object { Write-Host $_. что и для сортировки процессов по используемому времени процессора. посмотрите сведения о них. Что нам важно знать о службах. какой результат получится после выполнения этой команды? Write-Host "Red on blue" -Foregroundcolor red -Backgroundcolor blue Вы можете угадать. . Как вы думаете. в этом примере мы можем просмотреть только имя и используемое время процессора. В этом нам поможет командлет Write-Host. Это можно сделать. каждый из которых имеет свои особенности и области использования. которое можно использовать для окрашивания выводимых данных. A5: Создайте список всех служб и отсортируйте их по статусу. так что в определенных условиях строка может содержать только имя. Команда Write-Host распознает некоторые параметры. Подсказка: Используйте тот же метод. Существует множество циклов. что показывается в окне Control Panel / Administrative Tools / Services. команда Get-Service | Write-Host -Foregroundcolor red не будет работать так. который следует затем вывести нужным цветом. который проходит по списку объектов и передает каждый объект по отдельности следующему за ним командлету. Мы хотим вывести весь список красным цветом. С помощью этой команды вы можете окрасить все данные. Для наших нужд мы воспользуемся циклом ForEach-Object. если вы раскрасите список в соответствии с дополнительными условиями. а не процессы. Мы можем немного помочь ей с этим. какой атрибут каждого объекта следует выводить таким образом. в MSDN. например. это то. Write-Host не дружит с другими командлетами и не принимает список объектов. с помощью выделения цветом. что они имеют статус «запущена» или «остановлена» («started» или «stopped»). Попробуйте сделать это прямо сейчас. A6: Создайте список служб и выведите на экран только атрибуты имени и статуса. Давайте подробнее рассмотрим эту возможность. используя цикл. а затем Write-Host извлекает из него только два атрибута каждого объекта. так как сначала выводимые данные уходят в канал (|). выводимые процессами. Воспользуйтесь ранее описанным циклом ForEach. Для простоты мы используем службы ПК. не удивляйтесь результату: не все процессы используют время процессора. Будем работать со списком объектов последовательно. например.Вывод в цвете Иногда бывает необходимо выделить результаты. что службы – это то. вот так: $_. Затем мы выбираем атрибут объекта. Если вы вызовете пример еще раз. Однако будет лучше./B-(*0()*. Get-Help Write-Host -Detailed даст вам полный список возможных цветов. но применяйте команду get-service и «status» в качестве аргумента командлета Sort-Object.CPU} Хотя Get-Process дает нам список процессов. что такое службы. Просто скажем. но можете подумать и о других возможных решениях. Но для начала просмотрим службы с помощью командлета Get-Service. Если вы не знаете. В цикле мы выбираем нужный объект с помощью сокращения $_.ProcessName $_. такие как -Foregroundcolor и -Backgroundcolor. Команда Write-Host должна знать. сделав их удобнее для чтения. Также существуют определенные заранее сочетания: вы можете также привлечь внимание пользователя с помощью команды Write-Warning "error". особого «служебного имени» PowerShell. К сожалению. как мы ожидаем.

Для сравнения Windows PowerShell использует несколько операторов сравнения. необходимости в ней нет. Подсказка: Воспользуйтесь решением из A6 и добавьте параметры Foregroundcolor и -Backgroundcolor. Windows PowerShell будет ожидать завершающей } в конце. он довольно прост: If (. возможно. Все службы в системе . Однако сейчас. мы ограничимся командой If. в этом введении. уже знаете ее синтаксис из других вариантов использования. у кого получилось самое красивое сочетание. Наиболее важные операторы перечислены ниже: -Eq -Match -Ne -Notmatch -Gt -Ge -Lt -Le Равно Сравнение по регулярному выражению Не равно Не совпадает с регулярным выражением Больше / Больше или равно Меньше / Меньше или равно Последнее упражнение в этом блоке содержит одновременно все варианты отслеживания статуса системы с использованием PowerShell. A7: Создайте список служб и выведите на экран только атрибуты имени и статуса. используя цвета по желанию. Они все начинаются с «-» и обычно содержат аббревиатуру из двух латинских букв: -eq означает «equals».(2*/+) {*VW2B+V+ V} Elseif (. Вы. Покажите цвета своему соседу и решите. «равно». Для этого существует множество вариантов. Если вы хотите выполнить в области {} более одной команды. их можно разделять точкой с запятой или использовать для каждой команды новую строку. подходящих для различных сценариев.Теперь мы можем использовать параметры Write-Host для вывода в цвете.(2*/+2) {*VW2B+V+ V} Else {*VW2B+V+ V} Elseif – необязательная часть. Рисунок 4: Вывод имен и статусов служб красным цветом Проверка условий с помощью командлета if Мы пропустили еще одну вещь – проверку условий.

например. Вы можете просмотреть статусы служб. Вы уже знаете. как в предыдущих упражнениях. Игнорируйте теоретические параметры и для простоты не пользуйтесь запросом Elseif.сначала сортируются по статусу. добавьте запрос If. его можно оборвать. Отсортируйте список по статусу и окрасьте выводимые данные в красный или зеленый цвет в зависимости от статуса службы «stopped» или «running». воспользуйтесь клавишами курсора. а в форме. Чтобы не вводить все данные второй раз. Рисунок 5: Цветные сведения о службах Вывод в виде HTML Пример A8 можно использовать для мониторинга серверов. Поэтому здесь мы будем использовать варианты Foreach-Object или ForEach. нажав CTRL-C. позволяющей осуществлять редактирование непосредственно в канале. О синтаксисе: Оператор If помещается в скобки (). При этом данные выводятся не в виде файла. Используем командлет Convertto-Html. В конце можно перенести текст в файл. A9: Преобразуем выходные данные Get-Service в HTML. используя как обычно $_. Командлет Foreach-Object можно сократить до ForEach. вам было легче просматривать его в веб-браузере. Затем воспользуйтесь циклом Foreach. но вместо того. Еще раз выполните выражение. Подсказка: Сначала используйте Sort-Object. возможные значения «stopped» или «running». Подсказка: Если список слишком длинный. но на этот раз без командлета Sort-Object. С помощью серии мини-примеров мы покажем различные возможности. а команда вывода в скобки {}. службы со статусом «running» зеленым. не зная смысла значка. чтобы просто использовать WriteHost. Не забудьте конечную фигурную скобку в ForEach! Когда вы дойдете до конца строки >>. чтобы. который может работать непосредственно со списком объектов. дважды нажав Return для выполнения введенных строк. Его можно сделать еще короче. Теперь было бы полезно упростить повторное использование выводимых данных. но тогда вы не сможете прочитать его.status. а затем выводятся с выделением цветом: службы со статусом «stopped» красным. A8: Вызовите список служб. Однако существует и еще одна возможность. . доступные с помощью Convertto-Html. как выводить данные в виде CSV и XML. закройте ее. как в случае других командлетов. иногда более полезная: HTML. Для этого используется командлет Convertto-Html.

status.\get-service.\a10. Если хотите.html Выходной файл должен выглядеть похоже на то. Подсказка: Ваша командная строка теперь будет состоять из 4 команд: вывести список всех служб. Можно также перед преобразованием отсортировать выводимые данные по статусу. как мы знаем. но здесь отдельные строки файла HTML переформированы: команда HTML для столбца таблицы задает зеленый или красный фоновый цвет bgcolor green или bgcolor red . т.е. с полным кодом решения. преобразовать в HTML. В принципе.html для запуска веббраузера по умолчанию и вывода в него файла прямо из PowerShell.\A10. этот пример работает так же. Поскольку не все знают HTML. отсортировать их по статусу. A11: Продолжение A10: Создайте более привлекательную веб-страницу и список с именами и статусами всех служб.A10: В конце воспользуемся командами.html». можете открыть файл с помощью Проводника. . как исключение. прежде чем скопировать. этот пример приведен. "<tr bgcolor=red>"}} > . Не забудьте правильно указать путь к A10. Это не задача Windows PowerShell. чтобы список не стал нечитаемым. Подсказка: Можно использовать команду Invoke-Item . результат можно легко модифицировать. Просмотрим этот файл. Попытайтесь понять. помещают выходные данные в файл «. которые. На вход Convertto-Html следует подавать список выводимых объектов. Convertto-Html позволяет ограничить выводимые данные. как Write-Host.status | Foreach { If ($_ -Like "*<td>Running</td>*") {$_ -Replace "<tr>". … | Convertto-Html -Property name.html. вывести как файл. вставить и выполнить его в Windows PowerShell: Get-Service | ConvertTo-Html -Property name. Поскольку Convertto-Html создает текст HTML. если у вас есть опыт работы с HTML. что делает этот код. но PowerShell может вам помочь. что приведено ниже. "<tr bgcolor=green>"} else {$_ -Replace "<tr>".

Рисунок 6: Цветной вывод HTML с использованием преобразования HTML .

Можно использовать псевдонимы популярных команд. Если это не так. в то время как размер (Size) или дата последнего изменения (Date last accessed) – это свойства файла. к которым Windows PowerShell позволяет осуществлять доступ. введя команду. я буду говорить в основном о Get-Childitem. как и ранее.)bWW+ c: Затем воспользуйтесь командой cd FK: FK:. Кроме того. Чтобы увидеть значения реестра.»! Windows PowerShell превращает все файлы в объекты. Где вы теперь находитесь? Переключитесь на диск ENV:. воспользуйтесь файлами из своего Интернет-кэша. Если вы не можете их найти. Дополнительные сведения можно найти.. используйте команду Remove-PSDrive FK для удаления устройства и попробуйте еще раз. что от Windows PowerShell невозможно скрыться почти нигде на вашем компьютере.Работа с файлами В следующих нескольких упражнениях мы будем работать с файлами. Переключитесь (cd) на диск HKLM:. необходима команда Get-ItemProperty. Для команды cd следует учитывать. мы создадим в Windows PowerShell новый диск. Если вы когда-нибудь разбирались с реестром. просто создайте отдельную папку для упражнений.. который будет указывать на реальную тестовую папку. в справке по Windows PowerShell. Размер файла можно прямо запросить. 40). которые вам больше нравятся. Выведите его содержимое командой ls. Работа с файлами в Windows PowerShell по-настоящему проста. используя командлет Get-Childitem. что используете файлы как минимум двух разных типов. чтобы он указывал на вашу папку с тестовыми файлами: New-PSdrive -Name FK -Psprovider FileSystem -Root c:\W. а не «cd. Выведите список всех дисков Windows PowerShell. Если эта книга используется как часть курса. Команды dir. Windows PowerShell может работать не только в классической файловой системе. как если бы это была обычная папка Unix. попросите тестовые файлы у преподавателя. Причина в том. Еще одно замечание о реестре. Диски выделяются двоеточием после их имени (:). . ls и Get-Childitem всюду имеют одинаковые возможности. что по нему можно перемещаться при помощи команд dir и cd. Эта команда выводит все свойства элемента реестра и их значения. но их может быть и больше. Введите команду dir. Измените конец пути так. Чтобы упростить работу с тестовыми файлами. что между командой и путем должен стоять пробел: «cd . Это означает. что значения реестра являются свойствами объектов реестра.». Вы должны убедиться. таких как dir или ls. Для этого скопируйте в папку несколько разных файлов (например. В конце переключитесь на диск CERT: и выведите список содержимого. Создайте новое устройство. Введите команду cd software. Следующие упражнения продемонстрируют вам обширные возможности Windows PowerShell. его не придется выделять из строки. то отметили. Для этого необходимо выполнить команду New-Psdrive. что вы можете использовать те псевдонимы. в нужной ли папке вы находитесь. чтобы перейти в эту папку и проверьте. Вы увидите. С помощью командлета GetPsdrive вы можете вывести все диски. Чтобы оставаться в рамках синтаксиса Windows PowerShell. но они не позволяют просмотреть значения ключей реестра. Если вы работаете с упражнениями самостоятельно.

Для использования этой команды следует передать объект Get-Member через конвейер. Вы можете даже передать список одинаковых объектов Get-Member. в том числе не добавляя лишних букв.tmp | select n*. это будет выглядеть так: Set-Location fk: fk:). Рисунок 7: Вывод имен и длины файлов без файлов TMP Чтобы свести к минимуму количество вводимой информации. чтобы просмотреть все атрибуты и функции объекта.temp B1: Выведите только имена и длину файлов. Введите Get-Alias | Sort-Object Definition и увидите список всех возможных псевдонимов команд. . что и для вывода процессов в предыдущих примерах. Подсказка: Используйте те же методы. Windows PowerShell предлагает различные способы сокращения команд. Get-Childitem * -Exclude *. игнорируя временные файлы с расширениями temp или tmp. Итак. Отсортируйте все файлы по дате последнего доступа. кстати. который сможет правильно с ним разобраться. Подсказка: Используйте те же методы. не ошибаясь в количестве букв.Переключитесь на свой учебный диск: cd fk: fk: (В синтаксисе PowerShell. length превратится в ls * -ex *. *. затем по имени. что и для вывода процессов и служб. Однако для автоматического дополнения параметров необходимо точно ввести псевдоним. Поиск информации об объектах с помощью Get-Member Используйте командлет Get-Member. Выведите список содержимого с помощью команды Get-Childitem. Скройте все временные файлы: Get-Childitem * -Exclude *. le* B2: Отсортируйте файлы в порядке возрастания по размеру (длине).tmp | Select-Object name.tmp. B3: Создайте список всех возможных атрибутов файла с помощью командлета GetMember.

.Подсказка: Используйте результат работы функции Get-Member и «угадайте» нужные атрибуты из списка свойств.

можно как минимум оценить его возможности на следующих примерах. Для этого необходимо использовать в качестве аргумента один из атрибутов объекта. используя число файлов с каждым из расширений. Кроме Get-Member для получения информации об объектах можно использовать еще один командлет. Все будет отлично работать и с использованием символов подстановки. Используя командлет Remove-Item можно удалять не только файлы. именно: «object. Подсказка: Выведите файлы. Measure-Object. Удобно. Даже если вы не полностью знаете список параметров. и для обычных конвейеров командлетов Windows PowerShell. сгруппируйте их и отсортируйте новый список по числам. Попытайтесь понять. которое может также соответствовать атрибуту «Total». После запуска цепочки повторите команду с добавлением Get-Member для вывода всех атрибутов для получения результата (Вы помните? Windows PowerShell работает с объектами и переводит их в текст. Помните цикл ForEach и как вы находили свойство «Status»? Да. вы сможете по крайней мере начать сначала.Команда Group-Object может разделить список объектов на группы. содержащий две (или более) записей. после нескольких прочтений вы захотите проверить свои догадки. А здесь нам нужен «total». Подсказка: После первой попытки поместите всю строку в (). используемых в Measure-Object. На втором шаге выведите ТОЛЬКО общий размер. . Get-Service | Group-Object status затем создаст новый список. что будет также показано число служб и их статус: Рисунок 8: Результаты работы командлета Group-Object B4: Сгруппируйте полученные файлы по расширению.status». так что их можно прочитать на экране!). а не «status». Для этого используйте аргумент count. Может быть будет разумно создать резервную копию папки с упражнениями. Затем отсортируйте их. Найдите свойство. Удаление файлов Windows PowerShell также содержит все необходимые команды для удаления файлов. B5: Определите общий размер всех файлов TMP. какие результаты даст следующая цепочка команд: Get-Childitem | Measure-Object length -Average -Sum -Maximum -Minimum Возможно. которое соответствует вашим результатам в (). Если вы случайно удалите слишком многое. Измените текст примера соответствующим образом. Он работает аналогично Get-Childitem.

Вы получите новый список. Помните. В будущем это может измениться. а теперь попробуем Get-Service | Sort-Object status -Unique Эта последовательность команд возвращает только один элемент для каждого статуса. Эти имена можно использовать для запуска Remove-Item. Лучше прямо ввести в качестве размера 2MB. Windows PowerShell отлично понимает такой формат. 2 МБайт приблизительно соответствуют 2000000 байт. вводите переменные. что для этого следует использовать полный путь с как минимум одним символом 1 Такие файловые системы. Можно также потребовать сосчитать сумму 512KB + 512KB. как FAT или NTFS. Для этого нам нужен командлет для создания нового «элемента»1 в файловой системе: New-Item. мы можем определить состояние. Попробуйте ее выполнить. использовать особые командлеты не требуется. не являются на самом деле объектноориентированными. вы сможете присвоить этот список переменной и перейти к следующему шагу – с помощью цикла пройти по списку объектов и создать подпапки с именами расширений (. Теперь рассортируйте их с параметром -Unique. Давайте рассмотрим пример со службами. вы не можете ввести 2 МБ как 2000000 (кроме всего прочего. что нужно для создания папок и каталогов. Кстати. Мы создадим отдельные подпапки для файлов всех типов.fullname).status -Eq "stopped”} можно просмотреть только остановленные сервисы. directory для каталога. Затем выведите только имена файлов ($_. Для вычислений требуется просто ввести числа непосредственно в командную оболочку. B7: Теперь удалите все файлы более 2 МБайт. Сначала создайте список всех файлов и отфильтруйте их по размеру (…length -Gt 2000000). .B6: Удалите все файлы TMP с помощью Remove-Item с нужными аргументами! Иногда возникает необходимость удалить файлы. Каждый раз. а тип как параметр. а затем переместим соответствующие файлы в папки.\test -Type Directory Чтобы упростить вам жизнь. Вы можете создать новый каталог «Test» следующим образом: New-Item . например. а не New-Object. Используя Get-Service | Where-Object {$_. Он использует имя как аргумент. когда вам надоест слишком длинная строка команд. это лишь приблизительное значение). B8: Создайте в папке с упражнениями отдельные подпапки для файлов с разными расширениями. Поэтому мы используем команду New-Item.extension). Подсказка: Создавайте свой финальный сценарий шаг за шагом. которому должны удовлетворять выбираемые объекты из списка. Как и для команды if. Теперь у вас есть все. мы еще раз рассмотрим команду сортировки: GetService | Sort-Object status вы уже знаете. Вы увидите список расширений файлов Когда это будет сделано. значения параметров которых выходят за нужные нам границы. Создание папок Теперь попробуем внести в хаос наших файлов некоторый порядок . В этом случае можно использовать командлет WhereObject. который можно обрабатывать в цикле. Подсказка: Создайте список файлов и выберите их только по атрибуту «Extension».

цикл. Подсказка: Список Get-Childitem из оригинальной папки теперь содержит новые подпапки. Move-Item . Для перемещения файлов в нужное место мы используем команду Move-Item. Рисунок 9: папка с файлами до сортировки Рисунок 10: папка с файлами после сортировки И наконец. мы снова выводим все эти файлы. Исходная папка теперь будет пуста. Для сохранения промежуточных результатов всегда можно использовать переменные. которые следует фильтровать. а подпапки заполнены.\test. B11: Если у вас имеется исходные файлы упражнений.«\». попробуйте использовать в качестве аргумента (". Создайте новый список всех элементов (сначала внимательно просмотрите список). чтобы вы могли изучить его в Блокноте (Notepad). Атрибут объекта.\*BWW B9: Переместите все файлы из тестовой папки в созданные подпапки. Затем следует применить к списку. вы можете сделать еще одну вещь: Чтобы еще более упростить себе жизнь.txt . Если с путем возникают проблемы. Для этого перейдите в подпапку для файлов .Extension).txt. можно сбросить атрибут read-only для каждого файла Word. включая все подпапки. называется IsReadOnly. указывающий на конечное положение. и сохраните его под именем FinalOutput. Get-Childitem -Recurse покажет это в деталях. в текстовый файл. а затем с помощью цикла пройдите по объектам. ему следует присвоить значение 0 (числовой ноль). Давайте сохраним эти результаты в файл TXT. который следует установить.\New”+$_. Подсказка: Используйте две команды: создайте список всех объектов. Отфильтруйте список с помощью оператора сравнения по регулярному выражению (…type -Notmatch "d”). В качестве аргументов этот командлет использует полное имя исходного объекта и путь. Последний шаг прост: для каждого объекта найдите соответствующую расширению файла папку и переместите файл в эту папку. B10: Выведите содержимое папки с упражнениями.doc и вызовите все объекты. как делали это раньше в других упражнениях. Не забывайте указать тип объекта (directory) для создания каталога. например. . который теперь содержит только файлы.

csv $p2 = Import-CliXML . Однако это выходит за рамки нашего курса.\test. Используя командлеты Get-Acl и Set-Acl. как в примерах выше. если она еще доступна.\test.\test.xml C1: Вычислите среднее использование процессорного времени.Windows PowerShell также поможет вам с ACL.csv $p | Export-CliXML . Дополнительные сведения по ACL можно найти в интерактивной справке. введите в Windows PowerShell следующую строку: $p = Get-Process Теперь сохраните переменную в файл CSV и файл CliXML: $p | Export-CSV . Используйте свою переменную $P. к командлетам Export-Csv и Export-CliXML. . вы легко можете переносить их от одного объекта к другому и даже создавать новые. а если нет. Подсказка: Используйте команду Measure-Object. вашими спецификациями защиты. Делайте это по отдельности для трех переменных $p. $p1 и $p2.xml Далее импортируйте эти значения в две новые переменные: $p1 = Import-Csv .\test. максимальное и минимальное значения. Рисунок 11: Вывод содержимого подпапок Если у вас есть время … Давайте вернемся к началу.

Все ли результаты остались теми же? Какая переменная отличается от других в разных случаях? Что здесь неправильно? Разгадка относительно проста. что при использовании списка чисел. по использованию процессорного времени. XML может оказаться более безопасным форматом.0 внезапно оказывается больше. которые теперь имеют форму строк. которые показаны в списке.C2: Теперь отсортируйте переменные. что вы приняли это во внимание при сохранении переменных. В файлах XML эта информация сохраняется и может использоваться для правильной сортировки.п. 8. Вычислить среднее значение и т.0 + 800 равно 808. так. При экспорте в файл CSV и последующем импорте Windows PowerShell теряет информацию о типе значений. . чем 800.0 а значит выражение для Measure-Object правильно. и выберите первые пять. 8. легко. Это означает. Снова сделайте это для каждой из трех переменных $p. но для сортировки оно не подходит. Убедитесь. $p1 и $p2.

РАБОТА С ДРУГИМИ ОБЪЕКТАМИ Windows PowerShell как машина обработки произвольных объектов С помощью Windows PowerShell можно работать не только с собственными объектами. вероятно. По указанным вопросам можно найти большое количество дополнительной литературы. Если нет. добро пожаловать в тему. составляют малую часть данных этого объекта. Мы создаем объекты WMI в Windows PowerShell с помощью специального командлета Get-Wmiobject. Уже это показывает. но не ожидайте. сводя количество вводимых данных до абсолютного минимума. т. Далее идут уроки по объектам. Для вывода списка атрибутов используйте команду Windows PowerShell Get-Member. как важен для нас WMI. ограничившись небольшим примером для каждого. глубокого рассмотрения WMI. требующим отдельного обучения. что мы хотим работать с WMI Соответствующий класс WMI. . пожалуйста. это вызовет у вас желание узнать о них больше. Объекты WMI Вы. Мы сосредоточимся исключительно на контексте Windows PowerShell. разумеется. знаете о существовании объектов WMI из Windows Scripting Host WSH и VBScript. можно получить доступ ко всему миру объектов. Windows PowerShell уберегает вас от сложного синтаксиса. Сейчас мы даже не будем начинать рассматривать эти объекты.NET и даже COM. Надеюсь. с которым мы хотим работать.е. Войдите в Windows PowerShell и введите следующую команду: Get-Wmiobject -Class win32_computersystem Вы увидите на экране базовую информацию о своей системе. В противоположность VBScript или другим языкам. . Нам необходимы только: • • Командлет Get-Wmiobject для определения того факта. включая WMI. -Class win32_computersystem Рисунок 12: вывод для объекта WMI WIN32_COMPUTERSYSTEM Выводимые данные.

Полезную помощь в повседневной работе с ИТ могут предоставить следующие классы объектов WMI: Список информации о настройках рабочего стола Get-Wmiobject -Class win32_desktop -Computername . что вы имеете в виду свой локальный компьютер. и т.). WMI. является собственным миром. Эту операцию можно проделывать даже по сети с внешними системами.ch.» необязателен. как CIM Studio. Список всех установленных исправлений Get-Wmiobject -Class win32_quickfixengineering или: Get-Wmiobject -Class win32_quickfixengineering -Property hotfixid | Select-Object -Property hotfixid Рисунок 13: Вывод исправлений в виде номеров KB . но и изменять ее. Информация о BIOS вашей системы: Get-Wmiobject -Class win32_bios Если вы хотите обратиться к своему компьютеру. Чтобы войти в мир WMI.D1: Выведите атрибут «Имя пользователя» («User name») своей системы. Однако я буду рад показать вам несколько небольших примеров. Мы можем не только читать информацию. Точка является частью команды и показывает.д. в том случае. можно использовать браузеры графических объектов. если мы можем идентифицировать себя. server4. Литература по этой теме даст вам всю необходимую информацию. параметр «-Computername . Подсказка: Используйте исходный пример WMI и укажите соответствующий атрибут для имени пользователя.mycompany. как мы говорили. В других случаях используйте другое имя компьютера(server1. такие.

В приложении вы можете найти второй пример. а также их полные URL. Мы вынуждены исключить подробное обсуждение.Запись данных в объекты WMI производится так же. подключается к летнее RSS и считывает из нее все темы. Синтаксис также схож с WMI. Этот сценарий также использует возможности работы с объектами . как в объекты Windows PowerShell. format-table также является обычным командлетом и просто выводит список объектов в виде таблицы. имеются у лент RSS. что это лента RSS и вызываем объект с атрибутами. Работа с объектами . родителя Windows PowerShell подробно рассмотрены оба сценария.NET в сценариях Windows PowerShell. Вызовите объект командой Get-Member. вместо этого мы считаем. поскольку оно не входит в круг вопросов.NET можно найти как в Microsoft MSDN. вы все правильно понимаете.item | Format-Table title. Поскольку мы явно вводим тип (net. которые хотите видеть в виде заголовка (title). так и в одной из множества опубликованных книг по . Вы можете использовать его для создания нового объекта. так и записывать.webclient).rss.DownloadString( http://blogs. как мы знаем. если только вам не посчастливится наткнуться на другую ленту RSS. который принимает URL-адрес (нужного веб-сайта). Все остальное – просто «обрамление»: поскольку мы знаем. ([xml](new-object net. .com/powershell/rss. Первый пример впечатляюще краток и приведен здесь только в демонстрационных целях.channel.NET и объектах . в точности как ваша собственная персональная программа для чтения RSS. чтобы вам захотелось узнать больше. мы не проверяем его.aspx)). Скопируйте пример в Windows PowerShell и запустите его. чем возможности WMI.link Да. Результат будет достаточно впечатляющим. Вы можете прямо ввести столбцы. однако после установки новых значений следует вызвать метод Put объекта. чтобы применить сделанные изменения. В замечательной книге о Windows PowerShell «Windows PowerShell in Action» Брюса Пайетта (Bruce Payette).NET и XML Возможности использования . все что нужно для этого – две строки сценария. Если ввести другой URLадрес. Атрибут «Visible» в последующих примерах COM является одним из тех. есть ли у вас возможность записывать соответствующие значения (set). и URL-адрес (link) ленты RSS.NET типа Webclient. Теперь давайте заглянем внутрь скобок [XML]. В нем используется компонент Windows WinForms. Windows PowerShell немедленно понимает. которые. Сведения по программированию для .NET. которые можно как читать.webclient). что это объект . чтобы просмотреть его атрибуты и методы. обозначенный «Пример 4».NET и XML впечатляют не меньше. Для этого объекта мы используем метод DownloadString(url). сценарий скорее всего не будет работать. или их можно только читать (get). что скрывается за этим адресом. Один вызывает веб-сайт в сети. Внутри имеется простой для понимания командлет new-object. В приложении вы найдете два примера. Вы увидите.msdn. рассматриваемых в этой книге.

автоматизировав эту задачу с помощью Windows PowerShell. которые мы видели раньше. Команда Get-Member выводит полный список атрибутов и методов и для COM-объектов. Этот вопрос рассмотрен в таком количестве книг. создаются автоматически. Эта проблема описана в статье № 320369 из базы знаний Microsoft.application В качестве аргумента мы укажем. Если на вашем ПК не установлен Excel. какой COM-объект хотим использовать. Я использую пример для Excel. Просто от таких приложениях. Чтобы гарантировать. при создании книги Excel вы получите сообщение об ошибке вида «Error: 0x80028018 (-2147647512) Description: Old Format or Invalid Type Library». что мы делаем. немедленно назначим объекту переменную. Листы. Это означает. В каталоге издательства MS Press вы найдете несколько книг. и мы используем аргумент Excel. достаточно простым. Я советую вам посмотреть информацию об этом в Microsoft MSDN или одной из множества книг о COM. используя $a | Get-Member. следует ожидать большего. Во время написания этой книги Microsoft еще не выпустила исправления этой ошибки. что мы получим собственный объект COM определенного типа. English (US)). Нам следует также иметь возможность загрузить существующую рабочую книгу. что позднее мы ничего не забудем.Workbooks. В качестве временного варианта в этом случае для тестирования измените региональные настройки в параметрах системы на English (US) и перезапустите Windows PowerShell. не существует. Специального командлета для использования COM-объектов. Но мы просто создадим новую рабочую книгу из ничего: $b = $a. Вместо этого мы используем стандартный командлет для новых объектов: new-object. Для добавления данных в Excel нам нужна рабочая книга. Итак. как Excel.Add() создаст для нас новую рабочую книгу. вы можете просмотреть альтернативную версию с Internet Explorer. Для этого необходимо указать путь. Мы можем посмотреть синтаксис. чем маленькие объекты.Item(1) . После этого пример для Excel должен работать без ошибок. что я действительно не смогу добавить ничего нового.Application. действительно хорошо описывающих COM-объекты Visio. English (UK))). в вашей системе имеются COM-объекты.Работа с COM-объектами В нашем последнем примере я буду рад кратко рассмотреть возможности COMобъектов. Однако я не собираюсь приводить здесь обширное введение в COM. Windows PowerShell поможет нам сохранить все. $a = new-object -comobject excel. В данном случае это Excel. входящие в рабочую книгу. мы говорим Windows PowerShell. Однако давайте вернемся к нашему примеру с Excel. для которых полные имена не очевидны. Обычно эта ошибка возникает. что хотим работать с объектом COM. Поскольку мы вошли в мир COM. в отличие от объектов WMI. в повседневных задачах ИТ-администрирования вы можете применять Visio для графического отображения системных значений. Кроме использования Excel в качестве набора данных для создания отчетов. нам следует пользоваться синтаксисом COM.Add() Возможно. если Excel установлен на языке (например. отличающемся от региональных настроек Windows (например. Метод Workbooks. Мы выберем первый: $c = $b. Это ошибка в объекте Excel. Как мы увидим.Worksheets.

И как по волшебству Excel показывает нам результат. а не программа. что наборы таблиц Excel называются рабочими книгами? И как следует использовать команду «SaveAs» и ее синтаксис? Все это доступно через COM-объекты. мы используем отдельную переменную $i.xls") Если вас это удивляет: нет. Не забывайте увеличивать $i после каждой строки. эта упрощенная демонстрация. Знаете ли вы. Разумеется.\Test. как получить информацию при работе с Excel. В результате вы обнаружите. попытайтесь выполнить следующее небольшое упражнение: D2: Создайте список всех служб и введите имена и статусы служб в таблицу Excel.Visible = $True задает атрибуту «Visible» объекта Excel значение $true.Cells. догадаться. с помощью своего сценария. не раскрывая ее источник.Item($i.». Используйте сценарий для вывода служб разными цветами и замените строку с выводом цветом на запись $c. Мы не показали в подробностях . В конце мы должны очистить и закрыть Excel.Quit() Если хотите. давайте выведем Excel на экран. что делает следующая строка: $b.1).Если мы хотим записать что-то на лист. Нас интересует файл XLS. чтобы использовать эти знания потом в Windows PowerShell. . Команда $a. можете посмотреть сами.Cells. мы можем вызывать методы (функции) Excel и использовать их в наших целях. как атрибут «Visible». мы здесь сохраняем не Excel. Сохраните результаты из Excel в файле XLS. Это означает. Наша запись в Excel готова. например с помощью выражения $i = $i + 1. Чтобы указать строку в таблице Excel. что нам необходимо ввести строку: $c.Item(1. если не собираемся ничего делать вручную: $a. Вы можете вводить в одну строку несколько команд. Поскольку мы говорим только об инструменте Windows PowerShell. автоматически. а соответствующую рабочую книгу Excel. Вы не верите? Хорошо. Так же. это следует делать не в лист. а не вручную. я ограничусь использованием информации. Вы можете. Get-Member всегда будет для вас главным источником подсказок.SaveAs(". используя точку с запятой «. через меню Excel. а в ячейку на листе Excel. Подсказка: Используйте приведенный выше пример для создания объекта Excel и присвоения его переменной. и для изучения этого материала вы можете использовать любые источники информации о COM. разумеется. который более удобен для пользователя. что статус служб выводится в Excel в виде числа.1) = "Windows PowerShell rocks!" И это все. Дружественный Windows PowerShell заменяет эти числа текстом «running» или «stopped». но пожалуйста.

вы можете использовать другое упражнение. предоставляемые объектом Internet Explorer. а не чисел.Navigate(http://www. Также используется специальный формат Excel 2007 для вывода значений статуса в виде значков. Вместо ввода данных в ячейку мы перейдем на веб-сайт. Навигация с дивана никогда еще не была такой простой.com/powershell) . мы будем искать по популярному веб-сайту: $ie.application В этом случае новый объект также изначально невидим. использующее Internet Explorer. для этой проблемы имеется очень простое решение: $ie. Если на вашем ПК не установлен Excel. как и сценарий для Excel. Сценарий начинается. мы также используем командлет Get-Member: $ie | Get-Member Чтобы упростить работу. и как и для сценария Excel.Visible = $True Чтобы просмотреть возможности. По сравнению с ранее показанным сценарием для чтения RSS нам потребуется только один дополнительный шаг: при автоматическом чтении ленты RSS будем искать в заголовке ключевые слова и автоматически вызывать веб-страницы. с вызова new-object: $ie = New-Object -Comobject InternetExplorer.Рисунок 14: Вывод служб и их статуса в Excel 2007.microsoft.

чтобы постоянно ее использовать. вводите полное имя в кавычках "o0 p. В этой книге я не буду приводить решения этой задачи. проведите поиск ключевых слов. вы можете заменить 20 на любое другое число. измените имя в строке сценария. Например. Подсказка: Если вы не можете написать ответ немедленно. В нашем курсе мы еще не рассматривали поиск ключевых слов в списке заголовков. можно объединить этот сценарий со сценарием чтения RSS. просто запустите Get-Eventlog.logdisplayname -eq "System"} И хотя это самый простой путь. Вы увидите множество интересных ссылок и заголовков. E2: Отсортируйте последние 15 записей в системном журнале событий по коду ID в нисходящем порядке. Работа с журналами сообщений В завершение наших практических упражнений в этой книге мы кратко рассмотрим журналы сообщений. воспользуйтесь для получения дополнительных сведений справкой Windows PowerShell. получившаяся строка кода все равно будет слишком длинной для того. нажав CTRL-C.Если хотите. Разумеется.?2 (q. Результат может оказаться слишком объемным. прочтите книгу еще раз. доступ к системному журналу производится следующим образом1: Get-Eventlog -List | Where-Object {$_. мы можем воспользоваться командлетом Where-Object. которые всегда могут вам помочь. Get-Eventlog system -Newest 3 Get-Eventlog system -Newest 3 | Format-List События можно обрабатывать как обычно в Windows PowerShell. Возьмите список заголовков. Команда Get-Eventlog -List выводит на экран все журналы системы. E1: Найдите имя журнала событий Windows PowerShell. . и при их обнаружении перейдите на нужную страницу. добавив имя нужного журнала. И даже в Windows PowerShell имеется несколько командлетов. Сгруппируйте сообщения по коду ID сообщения. Если вы используете эту версию ОС. Если вы хотите увидеть только последние 20 записей.+/0". Вторым шагом выведите список событий с ID 403. . сортировать и группировать.NET и COM имеют для этого множество команд. Наиболее важный из них – это Get-Eventlog. если вы хотите работать с записями из журнала сообщений. Чтобы получить возможность доступа к конкретному журналу . Windows PowerShell обеспечивает доступ к журналам сообщений с помощью довольно сложных методов. 1 В русской версии Windows XP этот журнал называется «Система». используйте параметр -newest 20. Таким образом. Объекты WMI. Подсказка: Если имя журнала событий содержит пробелы. а затем отсортируйте по имени. но его вывод можно в любой момент остановить.

\A4.status} вместо -f можно написать также -foregroundcolor.status}` else{ write-host -f red $_.name $_.name $_.\a4.status}} A9 get-service | convertto-html .txt $P | export-csv .ОТВЕТЫ К УПРАЖНЕНИЯМ Сценарии-решения к упражнениям в этой книге A1 get-process | sort-object CPU A2a get-process | sort-object CPU -descending | select-object -first 10 get-process | sort-object CPU | select-object -last 10 A3 $P = get-process | sort-object CPU -descending | select-object -first 10 A4 $P > .xml A5 get-service | sort-object status A6 get-service | foreach-object{ write-host $_. а вместо -b – -backgroundcolor A8 get-service | foreach-object{ if ($_.name $_.status} A7 get-service | foreach-object{ write-host -f yellow -b red $_.csv $P | export-CliXML .\a4.name $_.status -eq "stopped") {write-host -f green $_.

sum B6 remove-item .\New" + $_.\*. move-item $_.mode -notmatch "d"} | foreach-object {$b= ". name B3 get-childitem | get-member B4 get-childitem | group-object extension | sort-object count B5 (get-childitem .\a10.length -gt 2000000} | foreach-object {remove-item $_.fullname} B8 get-childitem | select-object extension | sort-object extension -unique | foreach-object {new-item (".A10 get-service | convertto-html > .extension.tmp B7 get-childitem | where-object {$_.tmp | select-object name.tmp | select-object name. length | sort-object length.txt .\a10.\finaloutput.html B1 get-childitem * -exclude *.extension) -type directory} B9 get-childitem | where-object {$_.\*.tmp | measure-object length -sum). length B2 get-childitem * -exclude *. status > .html A11 get-service | sort-object status | convertto-html name.\New" + $_.fullname $b} B10 get-childitem -recurse > .

1) = $_.doc | foreach-object {$_.eventid -eq 403} E2 get-eventlog system -newest 15 | sort-object eventid -descending .application $a.Item(1.status.username D2 $a = new-object -comobject excel.2) = "Service Status" $i = 2 get-service | foreach-object{ $c.Workbooks.Item(1) $c.item($i. $i=$i+1} $b.Worksheets.Item(1.xls") $a.SaveAs("C:\Users\frankoch\Downloads\Test.item($i.Add() $c = $b.Cells.cells.2) = $_.cells.Isreadonly = 0} C1 $p | measure-object CPU -min -max -average C2 $p | sort-object CPU -Descending | Select-Object -first 5 D1 (get-wmiobject -class win32_computersystem).name $c.1) = "Service Name" $c.B11 get-childitem *.Visible = $True $b = $a.Cells.Quit() E1 get-eventlog "Windows PowerShell" | group-object eventid | sort-object name get-eventlog "Windows PowerShell" | where-object {$_.

Пример 3: Ваша программа для чтения RSS Вызывает веб-страницу. а также то. выводит имя файла журнала и строку с ошибкой: dir $env:windir\*.log | Select-String -List error | Format-Table path. Чтобы скопировать сценарии.linenumber -Autosize Комментарии: Может возникнуть сообщение об ошибке. на случай если вам потребуется дополнительная информация.link Комментарии: В самом начале соединение с веб-сайтом может устанавливаться достаточно медленно.webclient).д. читает ленту RSS.item | Format-Table title. Эти упражнения в основном взяты из горячо рекомендуемой книги «Windows PowerShell in Action» Брюса Пайетта.msdn. В этой книге примеры снабжены очень подробными пояснениями. Пример 1: Прямой вывод строки Самая короткая программа "Hello world": "Hello world" Комментарии: Windows PowerShell может непосредственно распознавать введенную строку и выводить ее на экран.DownloadString( "http://blogs. создателя Windows PowerShell. выводит сообщения из ленты RSS и их URL-адреса: ([xml](New-Object net. связанной с недостатком полномочий и т.aspx")).ПРИЛОЖЕНИЕ ПРИМЕРЫ СЦЕНАРИЕВ Примеры к Windows PowerShell – от простых к сложным Вы можете просто скопировать следующие сценарии и запустить их в Windows PowerShell. что краткое введение не в состоянии описать все возможности Windows PowerShell. Пример 2: Анализ файла журнала Создает список всех файлов журналов в папке «Windir».rss. содержащие слово «Error». Игнорируйте подобные сообщения. Они демонстрируют теоретические возможности PowerShell. . находит файлы.com/powershell/rss. выделите текстовые строки сразу после первого символа «>» до комментариев (не включая комментарии).channel.

Forms.Dock="fill" $button.Forms") $form = New-Object Windows.add_click({$form.close()}) $form.Add_Shown({$form.add($button) $form.controls.Form $form.Text = "My First Form" $button = New-Object Windows.Windows. .Button $button.Activate()}) $form.Пример 4: Добавление окон в сценарий Создает отдельную форму WinForm для графического вывода информации: [void][reflection.ShowDialog() Комментарии: Для завершения просто щелкните по новому окну (может находиться за окном Windows PowerShell).Forms.assembly]::LoadWithPartialName("System.text="Push Me!" $button.

командная строка Microsoft.NET Framework 2. в отличии от тексто-ориентированных оболочек. появившаяся в Windows NT. Эта оболочка содержит интерактивную командную строку и среду сценариев. разборе текста и объектах PowerShell полностью объектно-ориентирована. предоставляла пользователям дополнительные средства. Хотя вы можете использовать командлеты поодиночке. разработчики средств администрирования хотели дать нам оболочку для Windows. которые принимают и возвращают текст. а объект (дальше этот момент будет рассмотрен подробнее). MSH). так и вместе. таких как bash. Командлет – это простой инструмент командной строки. Это фундаментальное отличие в среде позволяет использовать для управления и настройки Windows совершенно новые инструменты и методики. соответствовал уровню первых версий MS DOS. появившейся в . Как многие другие командные оболочки. Windows PowerShell вводит идею командлетов (пишется «cmdlet»). Старый command. разработанная специально для системных администраторов. Благодаря поставщикам Windows PowerShell вы получаете легкий доступ к другим хранилищам данных. Windows PowerShell дает вам доступ к файловой системе компьютера. которые можно использовать как по одиночке. Оболочка cmd. Но по сравнению с популярными оболочками Unix.com. интегрированный в оболочку и выполняющий единственную функцию. Windows PowerShell содержит несколько сотен базовых командлетов. их мощь становится более очевидной при использовании комбинаций командлетов для выполнения сложных задач. имела множество недостатков. Но аналогично более ранним популярным оболочкам. О тексте. которую можно будет использовать для написания любых сценариев для управления системой. Теперь Microsoft полностью изменила ситуацию. результатом выполнения команды будет не текст. в который передаются и в котором .0. она имеет конвейер. а также дает возможность создавать собственные командлеты и сценарии и передавать их другим пользователям.ПРИЛОЖЕНИЕ ТЕОРИЯ WINDOWS POWERSHELL Теоретические принципы Windows PowerShell Windows PowerShell – краткое введение Предыдущие попытки Microsoft по созданию оболочек командной строки были не слишком успешны. По сравнению с обычными оболочками она работает иначе. такими как Bash.exe. но растущее число функций операционной системы вскоре превысило его возможности. Создавая Windows PowerShell (ранее называлась Monad Shell. несомненно. В противоположность большинству оболочек командной строки. Windows PowerShell следует совершенно новой концепции. Windows PowerShell базируется на объектной модели. вероятно. таким как реестр и хранилища сертификатов. Цели разработки Windows PowerShell Windows PowerShell – это новая оболочка командной строки Windows.

состоящий из объектов процессов. всегда в единственном числе. которые можно совершить с объектом. Причины этого таковы: • • • . Чтобы пояснить это. которая возвращает все запущенные процессы в операционной системе. этот подход заслуживает доверия в большей или меньшей степени. . Вы можете представить объект как блок данных с атрибутами и методами. вы хотите получить список всех процессов. для нее был создан собственный. Однако. Windows PowerShell необходим язык для управления объектами . И если вы запускаете службу.обрабатываются результаты отдельных команд. например. что исходные и промежуточные значения и результаты являются объектами. Единственная разница состоит в том. вы выводите атрибуты соответствующего объекта службы. В зависимости от того. Язык должен поддерживать сложные задачи. Если. рассмотрим следующий пример: Предположим. Объекты PowerShell не отличаются от объектов в программах C++ или C#. соответствующий этой службе. Объектно-ориентированная концепция PowerShell делает стандартный разбор текста командных оболочек Unix (анализ/оценка) и текстовую информацию со всеми ее проблемами и склонностью к ошибкам. после чего с помощью другой программы запросить число используемых процессом дескрипторов. Новый язык сценариев В Windows PowerShell не используется какой-либо существующий язык. насколько хорошо вы обрезаете и фильтруете информацию из текста. например. Мы еще поговорим об этом более подробно. В традиционной командной оболочке Linux мы должны вызвать команду для просмотра процессов (ps -A). В Windows PowerShell мы обеспечили соответствие всех команд определенной логике с точки зрения конструкций и наименования. у вас несомненно возникнут проблемы. вы используете метод объекта службы. и имена процессов стали слишком длинными.NET. если заголовок столбца в выходных данных изменился. таким как C#. разделенные пробелами. Методы представляют собой действия. Каждая строка будет содержать сведения о процессе. вам не нужно исследовать текстовые строки и разделять их на столбцы. которые расходуют более 100 дескрипторов. Если вы выводите на экран информацию о службе. Эти объекты можно исследовать на предмет их атрибутов и запросить значения прямо у них – таким образом. которая работает с объектами в Windows PowerShell. выдаваемого функциями. Вы также начинаете с команды get-process. По мере увеличения опыта вы лучше поймете преимущества обработки объектов и будете работать с объектами осознанно. не делая простые задачи сложными. Эта команда возвращает текстовый список. отфильтровать коды ID процессов. то есть меняете атрибут статуса службы на «запущен». Вы можете узнать командлеты по их именам: глагол и существительное. отфильтровать нужные строки и вывести на экран соответствующий текст. Командлет представляет собой специализированную команду. вы на самом деле используете объект. . В настоящее время каждый язык имеет свои собственные команды.NET. PowerShell использует принципиально другой подход. Язык должен соответствовать соглашениям других языков. используемых для программирования в . Вы должны разобрать эти строки с помощью отдельного инструмента. полностью излишними. Только в этом случае вы получаете список объектов. . Затем вы должны разобрать полученный в виде текста результат. вы обращаетесь к службе из Windows PowerShell. а не текстом.

Но не бойтесь. ни в каких политиках выполнения Windows PowerShell не разрешается выполнять сценарии двойным щелчком на их значках.разделенные значком тире (-). Хотя сценарии используются очень часто. что можно делать. В Windows PowerShell большинство командлетов очень просты и созданы для использования совместно с другими командлетами. имеющие графический интерфейс. Поддержка сценариев Если вы уже повторяли одни и те же команды. а также использовать оператор конвейера (|) для передачи его другой команде. . называется сценарием. как и в Cmd. таких как Vista или Longhorn Server. со старыми файлами . а теперь и Windows PowerShell.exe. например.bat. Даже в новых версиях Windows. не следуют официальному синтаксису Windows PowerShell. а командлеты «Out» пересылают выводимые данные в указанное место. вам не нужно выбирать между оболочками или беспокоиться о том. содержащий команды. Интерактивная среда Как и в других командных оболочках. WScript или PowerShell? Что выбрать? Для Windows XP имеется три оболочки языков сценариев: старая добрая оболочка CMD. они также могут быть использованы для распространения вредоносного кода.vbs. которую предпочитаете. Даже если команды. какие сценарии могут запускаться. Так. вы обнаружите. get-process и start-service. Вы можете использовать ту из них. командлеты «Set» создают или изменяют данные. get-help. мы рекомендуем не вводить команды или последовательность команд по отдельности. например. что одна из них устареет. который не принимает во внимание этот факт. командлеты «Get» только извлекают данные.cmd или. а сохранить их в файле и выполнять этот файл. Windows Scripting Host для ваших сценариев VB или Jscript. Аналогично поддержке интерактивных интерфейсов. Вы также можете использовать оболочку.. что все три оболочки остались равноправными.ps1. Файл. она выполняется и результат выводится в окно командной оболочки. CMD. Поэтому вы можете определить в Windows PowerShell политики безопасности (также называемые политиками выполнения). Если . Чтобы избежать ненужного риска. такие как dir. вводить расширение файла необязательно. Команды Windows и служебные программы Вы привыкли использовать определенные команды. которая наилучшим образом подходит для конкретной задачи. командлеты «Format» форматируют данные. обречен на быстрое забвение. они будут работать и могут использоваться без каких-либо проблем. вы можете получать текстовый вывод из других программ и использовать этот текст в командной оболочке. Вы можете пересылать результат работы команды в файл или на принтер. в Windows PowerShell поддерживается полностью интерактивная среда. Поэтому в Windows PowerShell вы можете использовать стандартные команды Windows и запускать программы Windows. ls или cd. Windows PowerShell обеспечивает полную поддержку сценариев. например Блокнот (Notepad) и Калькулятор (Calculator). Новый язык. Если вы в ответ на приглашение вводите команду. на ваш вкус. Расширение файлов сценариев Windows PowerShell scripts . и должны ли они иметь цифровую подпись. Вы можете запустить сценарий. Кроме того. например. введя его имя в строке приглашения. чтобы указать.

. интерфейсам и объектам . таких как WMI и . вы увидите. как это просто и какими мощными могут быть простые сценарии. WMI и ADSI. Windows PowerShell 1. качество продукта весьма впечатляет. журналам сообщений. Сейчас следует удовлетвориться использованием существующих проверенных методов. вероятно. что не все. необходимое вам.0.0 Хотя Windows PowerShell имеет версию 1. которые у вас есть или будут. что Windows PowerShell на самом деле является действительно новым способом использования популярной среды . Уже набор функций должен сказать вам. чтобы иметь под рукой новейшую и самую простую в использовании технологию. уже имеется в Windows PowerShell.вы до сих пор написали немного сценариев. Это означает. Windows PowerShell сейчас может обеспечить прямой доступ к файловым системам.0. сейчас самое время начать работать с Windows PowerShell. использовать для администрирования новые интерфейсы веб-служб. и я могу с чистой совестью рекомендовать его использование в практической работе.NET. Решая практические задачи. которые были сертифицированы в 2006 году. что доступ к другим компьютерам работает с помощью средств WMI или . однако удаленная работа в нем еще не реализована.NET. не перерывая гигантские тома и книги из 60-х и 70-х годов о программировании командных файлов. В основном это вызвано тем. записям реестра. Однако вам следует учитывать небольшой номер версии продукта.NET Framework 2.NET. В будущем мы сможем.

Дополнительные сведения по этой теме можно найти в документации по Windows PowerShell. И наконец. Даже если ваша среда допускает выполнение сценариев. команду set-executionpolicy remotesigned Microsoft предоставляют шаблон групповой политики. Существует четыре уровня безопасности: Значение политики Restricted (Запрещено. в Windows PowerShell. Неопытные пользователи получали несколько первых электронных писем с многообещающими привлекательными картинками. Windows PowerShell всегда требует явного ввода полного пути для файлов. Активация обеспечивает различные уровни безопасности. которые приступали к взлому системы. Эта система была настолько мощной. С помощью get-executionpolicy вы получаете существующие настройки. Windows PowerShell делает все возможное. чтобы противостоять этому типу угроз. Эта функция должна быть явным образом активирована системным администратором. которые которые не находятся в папках обозначенных в переменной окружения %Path%. Чтобы быть в состоянии запустить сценарий. которые используют подписание сценариев. Кроме того. например. чтобы автоматически устанавливать ключ в больших организациях. Для этой цели используются два командлета: getexecutionpolicy и set-executionpolicy. введенной в Windows 2000. Так. там было не на что смотреть. по умолчанию) Allsigned (Все подписанные) RemoteSigned (Удаленные подписанные) Unrestricted (Без ограничений) Описание Сценарии не запускаются Запускаются только подписанные сценарии Разрешен запуск локальных сценариев. . базовые настройки Windows PowerShell предполагают запрет запуска любых сценариев. все неблагоразумные двойные щелчки по почтовым вложениям или файлам будут просто приводить к запуску Блокнота и демонстрации исходного кода. вам следует изменить настройки безопасности для Windows PowerShell. но когда они открывали вложение. расширение файлов Windows PowerShell (PS1) ассоциировано с блокнотом (Notepad). прочие сценарии должны быть подписаны Запускаются все сценарии Для изменения этих настроек системный администратор должен вызвать. Это может предотвратить случайное выполнение программы.ПРИЛОЖЕНИЕ СЦЕНАРИИ И БЕЗОПАСНОСТЬ Безопасность при использовании сценариев Со службой Windows Scripting Host (WSH). Microsoft заявила о создании новой мощной системы сценариев. которую вы не хотели использовать. они оборачивались сценариями VBScript. что была использована вирусописателями в качестве новой арены.

Там вы найдете больше полезной информации. но буду очень признателен за любую конструктивную критику и похвалы: frankoch@microsoft. Эта книга не была бы написана без разработчиков Windows PowerShell. теоретические разделы взяты из содержимого. опубликованного в Microsoft MSDN или файла справки Windows PowerShell. который дал мне начальный импульс своей книгой «Windows PowerShell in Action».com . разумеется. напишите мне по электронной почте. в частности. выражаю Брюсу Пайетту.ЗАКЛЮЧЕНИЕ Я хочу поблагодарить свою жену Петру за ее любовь и участие. Очень рекомендую прочесть ее! Не все части этой книги я писал сам. Особые благодарности я.и я искренне благодарен им. со своим компьютером. Я могу быть не в состоянии ответить каждому лично. которую я рекомендую вам прочитать. Если у вас имеются комментарии или советы по этой книге. Она отказалась от множества воскресных поездок и вечеров со мной. когда я проводил время без нее.

142 –option constant Используются с $ $b .[int]$b) { return $a + $b } sum 4 5 Переменные Массивы Должны начинаться с $ $a = 32 Могут иметь тип [int]$a = 32 Инициализация: $a = 1. используйте get-member Установка политики безопасности Get-Service | Get-Member Просмотр и изменение политики безопасности с помощью Get-ExecutionPolicy и SetExecutionPolicy Get-Executionpolicy Set-Executionpolicy remotesigned Выполнение сценария powershell.4. используйте get-command Get-Command Чтобы получить список всех свойств и методов объекта.PowerShell – краткая шпаргалка Отдельные команды Для справки по любому коммандлету используйте get-help Get-Help Get-Service Чтобы получить список доступных коммандлетов.2.8 Запрос элемента: $b = $a[3] Константы Создаются без $ Set-Variable –name b –value 3.exe –noexit &"c:\myscript.ps1" Функции Параметры разделяются пробелами. Return необязателен. function sum ([int]$a.

разделяясь пробелами myscript. При необходимости могут передаваться параметры New-Object –type <. $a=1.25 $d.Net Object> $d = New-Object -Type System.12.DateTime 2006.Net Framework.Создание объектов Создание экземпляра объекта COM New-Object -comobject <ProgID> $a = New-Object –comobject "wscript.ps1 server1 benp Получаются в сценарии в массив $args $servername = $args[0] $username = $args[1] Разное Перенос строки ` Get-Process | Select-Object ` name.network" $a.$b=3.$c=9 Передача выходных данных по каналу другой команде | Get-Service | Get-Member .get_DayOfWeek() Пользовательский ввод Запись в консоль Для получения ввода от пользователя используйте Read-Host $a = Read-Host "Enter your name" Write-Host "Hello" $a Имя переменной $a или Write-Host $a -foregroundcolor "green" Передача аргументов командной строки Передаются в сценарий. ID Комментарии # # код отсюда не исполняется Объединение строк .username Создание экземпляра объекта .

$a++} Until ($a -gt 10) Цикл For Повторяет одинаковые шаги определенное количество раз For ($a=1. пока выполняется условие $a=1 Do {$a. $a++) {$a} Цикл ForEach Цикл по коллекции объектов Foreach ($i in Get-Childitem c:\windows) {$i.creationtime} Оператор If В зависимости от заданного условия выполняет тот или иной участок кода $a = "white" if ($a -eq "red") {"The colour is red"} elseif ($a -eq "white") {"The colour is white"} else {"Another colour"} Оператор Switch Другой способ выполнять определенный участок кода в зависимости от заданных условий $a = "red" switch ($a) { "red" {"The colour is red"} "white"{"The colour is white"} default{"Another colour"} } .Цикл Do While Повторяет набор команд. $i. $a –le 10. $a++} While ($a –lt 10) Цикл Do Until Повторяет набор команд до выполнения условия $a=1 Do {$a.name.

txt Или используйте > для вывода результатов работы сценария в простой текстовый файл .\test.Запись в простой файл Для простого текстового файла используйте Out-File или > $a = "Hello world" $a | out-file test.htm Запись в файл CSV Используйте Export-Csv и Select-Object для фильтрации выводимых данных $a = Get-Process $a| Select-Object Name. Затем выполните цикл по массиву $a = Get-Content "c:\servers.ps1 > test.Path.Company > test.Path.csv .Company | Export-Csv -path test.txt Чтение из файла Используйте Get-Content для создания массива строк.txt" foreach ($i in $a) {$i} Запись в файл HTML Используйте ConvertTo-Html и > $a = Get-Process $a | Convertto-Html -property Name.