В наши дни с оболочкой Windows PowerShell знакомы уже едва ли не все администраторы. Многие загружали ее, экспериментировали с ней и решали нестандартные задачи, которые иногда выполняют в командной оболочке Windows через cmd.exe. Однако PowerShell — нечто гораздо большее, чем просто DOS-подобная командная оболочка. Это среда для работы с командной строкой и выполнения сценариев, построенная на основе Microsoft .NET Common Language Runtime (CLR) и .NET Framework. В среде PowerShell вы работаете с объектами .NET. Структуры папок, которые вы видите, или службы, к которым обращаетесь, в сущности, являются экземплярами объектов, которые представляют эти папки и службы; в этом и состоит отличие рассматриваемого продукта от других командных оболочек, которые способны только обрабатывать тексты. Таким образом, PowerShell по своей мощности и эффективности намного превосходит традиционные командные оболочки.

Чтобы помочь читателям воспользоваться всеми достоинствами данного инструмента, я подготовил серию статей, разъясняющих, как решать различные задачи с помощью PowerShell. На первом «уроке» я расскажу о том, как приступить к использованию PowerShell и как выполнять базовые команды. Кроме того, я разъясню, как получать справочную информацию в среде PowerShell при создании этих команд и как использовать в командах псевдонимы.

Первые шаги

Сейчас PowerShell не поставляется с Windows, но начиная с версии Windows Server 2008 положение изменится. Ссылки на ресурсы, где можно загрузить PowerShell, а также сведения об этой оболочке доступны на Web-странице Windows PowerShell (www.microsoft.com/powershell ). Перед загрузкой PowerShell необходимо установить на своей системе среду .NET Framework 2.0. Процесс установки PowerShell не занимает много времени и не представляет трудностей. Нужно только позаботиться о том, чтобы устанавливаемая версия PowerShell была совместима с используемой операционной системой. Microsoft выпускает версии для Windows Server 2008 beta 3, Windows Vista, Windows XP SP2 и Windows Server 2003. При подготовке данной статьи я пользовался версией PowerShell для Windows XP.

По завершении установки оболочки PowerShell можно сразу приступать к работе. Для запуска PowerShell в меню Start требуется выбрать пункт All Programs, затем выделить пункты Windows PowerShell 1.0 и Windows PowerShell. При появлении окна PowerShell в командной строке отображается текущая рабочая папка (на моей системе это каталог C). Теперь можно приступать к написанию и выполнению команд PowerShell.

Работа с командами

Разработчики PowerShell оснастили эту оболочку особым языком сценариев, построенным в соответствии со стандартом .NET Framework. Команда PowerShell, cmdlet подобна функции в том плане, что она выполняет конкретную задачу, например извлекает содержимое папки или обновляет запись реестра.

В оболочку PowerShell встроено свыше 100 команд. Можно создавать дополнительные команды, но при этом следует пользоваться языком стандарта .NET, таким как Visual Basic .NET или C#. В статьях о PowerShell речь будет идти только о встроенных командах. Каждый вариант команды представляет собой комбинацию «глагол-существительное»; объясняется это тем, что специалисты Microsoft хотели использовать единообразную схему именования и тем самым облегчить изучение, а также расширение оболочки PowerShell. Глагол указывает на действие, которое предстоит совершить, а существительное — на тип объекта, на который будет направлено действие. К примеру, команда Get-ChildItem считывает список элементов текущего рабочего каталога или контейнера, например реестра. Для выполнения команды нужно ввести ее в командной строке PowerShell и нажать клавишу ввода. Результаты отображаются под командной строкой. Вот и все, что требуется знать о выполнении элементарных команд.

Наверное, не во всех случаях известно, существует ли команда для решения задачи, которую предстоит выполнить, а иногда бывает трудно удержать в памяти имя той или иной команды. Список всех команд можно просмотреть, выполнив команду Get-Command. На экране 1 отображена часть этого списка; там можно увидеть имена команд и синтаксис, но не описание того, что именно делает соответствующая команда. Для получения этих сведений можно воспользоваться командой Get-Help.

Экран 1. Получение списка составных команд

Команды для получения справки

В комплект поставки PowerShell входит набор справочных файлов, к которым пользователь может обращаться напрямую из командного окна PowerShell с помощью команды Get-Help. Для получения справочной информации о той или иной команде нужно задействовать команду Get-Help с параметром -name. Вслед за этим параметром необходимо указать имя команды, информацию о которой требуется получить. Подобно параметрам команд процессора cmd.exe, параметры команд PowerShell предоставляют сведения, необходимые командам для выполнения их работы. Но в отличие от параметров команд в среде cmd.exe (которые могут начинаться с дефиса, косой черты или вообще не иметь предваряющего символа), параметры команд PowerShell всегда начинаются с дефиса, что служит еще одним подтверждением последовательности схемы именования, применяемой в PowerShell.

Теперь посмотрим, как все это работает. Обратимся к примеру. Одна из типичных задач системного администратора заключается в том, чтобы читать текстовые файлы. Просмотрев список команд, представленный командой Get-Command, вы приходите к выводу, что эту задачу может выполнить команда Get-Content, но уверенности у вас нет. Для отображения справочной информации о команде Get-Content нужно выполнить следующую команду:

Get-Help -name Get-Content

Как показано на экране 2, эта команда возвращает описание команды и сведения о синтаксисе. Команда возвращает содержимое элемента, которое в данном случае указывает на любой тип файла в системе. В прошлом администратору, возможно, пришлось бы воспользоваться командой For для работы с пакетными файлами или объектом File-SystemObject в сценарии Windows Script Host (WSH), но в среде PowerShell необходимо просто выполнять команду Get-Content. Чтобы получить более подробную информацию о синтаксисе, нужно добавить к команде параметр -full.

Get-Help -name Get-Content -full

Экран 2. Получение подсказки о команде Get-Content 

Отметим, что параметр -full не принимает соответствующего значения. Параметры этого типа называются параметрами-переключателями, поскольку они как бы переключают линию поведения команд.

На экране 3 показана часть сведений, возвращенных этой командой. Администратору нужно будет прокрутить на своем компьютере окно или изменить его размеры так, чтобы можно было просмотреть все содержимое. В разделе PARAMETERS содержится информация, необходимая для того, чтобы включать в команду параметры. Обратите внимание на две важные категории информации для каждого параметра: Required и Position.

Экран 3. Получение полной версии файла подсказки о Get-Content

Сведения категории Required указывают на то, является данный параметр обязательным или факультативным. Когда переменная Required имеет значение true, параметр нужно включать в команду. Если же переменной Required задано значение false, данный параметр является факультативным.

Значение категории Position позволяет судить о том, нужно ли присваивать параметру имя или на него можно ссылаться по его позиции. Когда переменной Position присвоено значение named, из этого следует, что при ссылке на данный параметр необходимо указывать его имя. Когда же значение переменной Position выражено числом, на параметр можно ссылаться по его имени или просто указывать значение параметра в его корректной позиции.

К примеру, как показано на экране 3, при выполнении команды Get-Content требуется указывать параметр -path. Однако значение этого параметра можно указывать в первой позиции без ввода имени параметра, как в следующем примере:

Get-Content c:sample.txt

Если значение параметра содержит пробелы, такое значение следует заключать в кавычки.

В разделе PARAMETERS за именем каждого параметра следуют сведения, заключенные в угловые скобки (< >). Эти сведения указывают на тип данных, к которому должно относиться значение параметра. Как показано на экране 3, значение параметра -path должно быть строковым. Если за строкой слов следует набор скобок ([ ]), это означает, что в качестве значения параметра можно использовать строковый массив.

В случае использования параметров-переключателей, которые не принимают значений, данные будут иметь тип read. С таким типом данных определяется, к примеру, параметр -force команды Get-Content. Данный параметр отменяет ограничения, которые могли бы воспрепятствовать выполнению команды. Отмена происходит лишь в тех случаях, когда параметр включается в команду.

Следует отметить еще одну функцию PowerShell, имеющую отношение к параметрам, это функция автоматического завершения ввода комбинации «параметр-имя». Пользователь должен только ввести достаточное число букв, составляющих имя параметра, чтобы его можно было отличить от других параметров. Так, команда

Get-Content c:sample.txt -force

эквивалентна команде

Get-Content c:sample.txt -fo

Наряду со сведениями о параметрах, необходимыми для построения команд, справочный файл для команды Get-Content включает примеры, иллюстрирующие использование команды, полезные рекомендации в разделе Notes и ресурсы, где размещается дополнительная информация. Приятно отметить, что справочные файлы предусмотрены для всех команд — существуют даже справочные файлы с описанием общих концепций.

Получение справок по концепциям

В комплект поставки PowerShell входит набор справочных файлов, содержащих обзоры различных концепций. Каждый файл начинается с символов «about_» и заканчивается именем раздела. Для просмотра алфавитного списка разделов about запустите команду

Get-Help about*

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

Get-Help about_flow_control

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

Экран 4. Получение подсказки по управлению потоками данных

Использование псевдонимов

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

Чтобы просмотреть псевдонимы, доступные в ходе текущего сеанса, нужно запустить команду Get-Alias. Под текущим сеансом подразумевается текущее соединение с процессором PowerShell. При запуске PowerShell пользователь начинает новый сеанс работы; этот сеанс продолжается до тех пор, пока пользователь не закроет PowerShell, прерывая тем самым соединение. В дополнение ко всем встроенным псевдонимам и ассоциированным с ними командам, Get-Alias отображает все псевдонимы, созданные в ходе текущего сеанса, а также псевдонимы, заданные в профилях, которые представляют собой определяемые пользователем настройки конфигурации, загружаемые в PowerShell каждый раз при запуске оболочки. Профили мы рассмотрим в одной из следующих статей.

Если нужно просмотреть псевдонимы, ассоциированные с той или иной командой, точнее определите команду Get-Alias. К примеру, чтобы просмотреть псевдонимы, ассоциированные с Get-ChildItem, выполните команду

Get-Alias |
   Where-Object {$_.definition `
   –match «Get-ChildItem»}

Эта команда включает в себя несколько элементов, о которых я подробно расскажу на следующих уроках. Пока же необходимо знать только следующее: выходные данные команды Get-Alias направляются в команду Where-Object, где отфильтровываются все результаты, не соответствующие Get-ChildItem. Если вы хотите познакомиться с псевдонимами, выделенными для другой команды, замените имя Get-ChildItem именем этой команды.

Как показано на экране 5, PowerShell включает три псевдонима для обращения к команде Get-ChildItem, это gci, ls и dir. Вместо имени команды можно использовать любой из них. Таким образом, каждая из четырех следующих команд выдает список содержимого каталога C:Windows:

Get-ChildItem c:windows
dir c:windows
ls c:windows
gci c:windows

Экран 5. Получение псевдонимов для Get-ChildItem 

Для создания псевдонима в рамках текущего сеанса пользуйтесь командой Set-Alias. К примеру, чтобы создать псевдоним cnt для обращения к Get-Content, выполните команду

Set-Alias cnt Get-Content

После этого всякий раз, когда потребуется выполнить команду Get-Content, вы сможете использовать псевдоним cnt. Этим псевдонимом можно будет пользоваться до завершения сеанса (т.е. до закрытия оболочки PowerShell). Учтите, что при определении псевдонима возможность включения параметров не предусмотрена; можно использовать только имя команды. Если же вы хотите определить ссылку на команду и на ее параметры, следует создать специальную функцию.

Перспективы

Итак, на первом уроке я познакомил вас с фундаментальными компонентами, необходимыми для того, чтобы приступить к исследованию и использованию команд PowerShell, которые состоят из одной или из нескольких команд. В следующих статьях я расскажу о том, как использовать эти команды, а также о том, как создавать сценарии, позволяющие применять все имеющиеся в PowerShell возможности. Пока же просто начните работать с командами. С помощью справочного файла PowerShell создавайте команды и изучайте отдельные концепции. Экспериментируйте с различными параметрами и учитесь создавать, а также использовать псевдонимы. Пройдет совсем немного времени — и вы будете готовы задействовать PowerShell при выполнении своих повседневных задач.

Роберт Шелдон (contact@rhsheldon.com ) — технический консультант и автор большого количества книг по технологиям Microsoft Windows и базам данных