Написание и запуск скриптов в PowerShell. Powershell уроки


POWER SHELL урок 1 | Windows IT Pro/RE

В наши дни с оболочкой 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.

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

В комплект поставки 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

 

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

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

Сведения категории 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.

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

Имена некоторых команд могут быть довольно длинными, а это не может не раздражать, если приходится раз за разом вводить команды с клавиатуры. К счастью, разработчики 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

 

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

Set-Alias cnt Get-Content

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

Перспективы

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

Роберт Шелдон ([email protected] ) — технический консультант и автор большого количества книг по технологиям Microsoft Windows и базам данных

www.osp.ru

POWER SHELL урок 1 | Windows IT Pro/RE

В наши дни с оболочкой 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.

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

В комплект поставки 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

 

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

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

Сведения категории 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.

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

Имена некоторых команд могут быть довольно длинными, а это не может не раздражать, если приходится раз за разом вводить команды с клавиатуры. К счастью, разработчики 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

 

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

Set-Alias cnt Get-Content

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

Перспективы

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

Роберт Шелдон ([email protected] ) — технический консультант и автор большого количества книг по технологиям Microsoft Windows и базам данных

www.osp.ru

Урок 1. Начало работы с командлетами AppFabric для Windows PowerShell

Время выполнения: 15 минут

Цель: подготовка среды Windows PowerShell к использованию командлетов Windows Server AppFabric для Windows PowerShell, предназначенных для настройки приложения «Служба заказов», управления им и наблюдения за ним.

Задача: в этом занятии будет загружена среда ApplicationServer module for Windows PowerShell и включено выполнение сценариев для Windows PowerShell. В этом учебном курсе следует использовать одну и ту же консоль Windows PowerShell во всех оставшихся занятиях.

Предварительные условия

Перед следующим шагом обратите внимание на следующие требования:

  • Система AppFabric должна быть уже установлена.
  • Необходима возможность запустить Windows PowerShell от имени учетной записи администратора.

Процедура

В этом занятии будут выполнены следующие шаги:

  1. запуск сеанса Windows PowerShell с учетными данными администратора;
  2. разрешение выполнения сценариев Windows PowerShell;
  3. загрузка ApplicationServer module for Windows PowerShell.

Запуск сеанса Windows PowerShell с учетными данными администратора

  1. Программа Powershell.exe расположена в каталоге C:\Windows\System32\WindowsPowerShell\v1.0. Откройте его в проводнике или найдите в средстве поиска, нажав кнопку Пуск и введя powershell.exe в поле поиска.
  2. Щелкните правой кнопкой мыши программу powershell.exe и выберите пункт Запуск от имени администратора.
  3. После запуска окна сеанса Windows PowerShell щелкните правой кнопкой мыши заголовок и выберите пункт Свойства.
  4. В окне Свойства Windows PowerShell убедитесь, что выбран режим Выделение мышью, и нажмите кнопку ОК.

Включение выполнения сценариев в Windows PowerShell

Большинство шагов в этом учебном курсе ориентировано на использование сеанса Windows PowerShell. Тем не менее для создания автоматического сценария можно использовать команды во всех занятиях. В некоторые занятиях выполнение сценариев используется для упрощения подхода. В этом разделе будет включено выполнение локального сценария только для текущего сеанса Windows PowerShell.

  1. Выполните следующую команду в окне Windows PowerShell для разрешения выполнения локальных неподписанных сценариев в Windows PowerShell. Set-ExecutionPolicy –ExecutionPolicy RemoteSigned –Scope Process
  2. В ответ на приглашение подтвердить изменение политики выполнения введите Y и нажмите клавишу ВВОД.
  3. Для проверки включения выполнения локальных сценариев выполните следующую команду в среде Windows PowerShell. Среда Windows PowerShell должна описать политику выполнения как RemoteSigned.

Параметр –Scope Process гарантирует, что политика активна только в текущем процессе Windows PowerShell и всех создаваемых дочерних процессах. Задание политики выполнения Windows PowerShell как RemoteSigned с помощью приведенной выше команды приводит к активации следующей политики для текущего сеанса Windows PowerShell:

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

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

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

Дополнительные сведения о политиках выполнения в Windows PowerShell 2.0 см. в разделе about_execution_policies; также можно выполнить следующую команду.

Get-help about_execution_policies

Загрузка модуля Windows PowerShell для AppFabric

  1. Выполните следующую команду, чтобы загрузить ApplicationServer module for Windows PowerShell с помощью командлета Import-Module для Windows PowerShell. Import-Module ApplicationServer Отсутствие ошибок указывают на то, что модуль был загружен успешно.
  2. Чтобы убедиться в том, что ApplicationServer module for Windows PowerShell загружается правильно, выполните следующую команду в окне Windows PowerShell. Get-Command –Module ApplicationServer Результатом этой команды должно быть перечисление всех команд, предоставляемых ApplicationServer module for Windows PowerShell, в виде таблицы.

Содержание занятия

В этом занятии среда Windows PowerShell была запущена с административными учетными данными, чтобы включить выполнение сценариев для последующих занятий. Также была загружена среда ApplicationServer module for Windows PowerShell и выполнена проверка команд, предоставляемых модулем. Эти команды будут использоваться в этом учебном курсе для настройки приложения «Служба заказов», наблюдения за ним и управления им.

Дальнейшие действия

См. также

msdn.microsoft.com

POWER SHELL урок 1 | Windows IT Pro/RE

В наши дни с оболочкой 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.

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

В комплект поставки 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

 

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

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

Сведения категории 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.

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

Имена некоторых команд могут быть довольно длинными, а это не может не раздражать, если приходится раз за разом вводить команды с клавиатуры. К счастью, разработчики 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

 

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

Set-Alias cnt Get-Content

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

Перспективы

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

Роберт Шелдон ([email protected] ) — технический консультант и автор большого количества книг по технологиям Microsoft Windows и базам данных

www.osp.ru

POWERSHELL урок 2 | Windows IT Pro/RE

В статье «PowerShell, урок 1» рассматривалась концепция составных команд и выполнение базовых команд PowerShell. Кроме того, я показал, как используются псевдонимы и как реализованные в PowerShell команды Get- применяются для получения справочной информации в процессе формирования команд. Так, можно использовать команду Get-ChildItem для считывания списка элементов папки или команду Get-Content — для считывания содержимого текстового файла. С помощью составных команд и их параметров можно выполнять множество действий, которые отображают системную информацию либо выполняют те или иные задачи.

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

Реализация конвейера

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

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

Публикуемый ниже пример поможет понять, как функционирует конвейер. Если вы запустите команду

Get-Service

то получите список служб, установленных в системе (см. экран 1). Обратите внимание, что команда возвращает состояние, имя и отображаемое имя каждой службы. Теперь предположим, что вы хотите получить список, где будут перечислены только выполняемые в данный момент службы. Можно передать выходные данные команды Get-Service команде Where-Object, которая выполнит фильтрацию выходных данных в соответствии с заданными критериями, как показано в инструкции

Get-Service | Where-Object {$_.status -eq ‘running’}

Таким образом, для объединения двух составных команд используется оператор конвейера. Команда Get-Service создает объект, который содержит данные, касающиеся служб. Далее этот объект передается по конвейеру команде Where-Object. Последняя принимает объект и использует содержащуюся в нем информацию как входные данные. Объект Where-Object выполняет фильтрацию этих данных в соответствии со значением свойства Status. Отметим, что в команду Where-Object входит выражение, заключенное в скобки ({ }). Если это выражение является истинным, Where-Object передает объект далее по конвейеру и отфильтровывает любой другой объект.

В данном случае выражение Where-Object констатирует, что значение свойства Status должно быть приравнено (как указано оператором -eq) к строке running. Status — это одно из свойств объекта, созданного командой Get-Service. Когда объект передается по конвейеру, можно обратиться к его свойствам, как это сделал я в выражении Where-Object. Чтобы обратиться подобным образом к свойству в конвейере, нужно использовать встроенную переменную $_. Эта переменная получает текущий объект в конвейере всякий раз, когда команда Where-Object перебирает полученные в конвейере результаты. Пользователь может ссылаться на свойства объекта, как в выражении $_.Status. Теперь полученные выходные данные по виду аналогичны данным, представленным на экране 2. Дополнительные сведения о команде Where-Object, о свойствах объектов и об операторах будут изложены в следующих уроках.

 

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

Теперь представим себе, что нам нужно перечислить только отображаемые имена всех запущенных служб. Можно по конвейеру передать выходные данные команды Where-Object команде Select-Object:

Get-Service | where {$_.status -eq ‘running’} | select displayname

В данной инструкции команда Select-Object получает объект от команды Where-Object. В этом случае инструкция использует псевдоним where для ссылки на команду Where-Object и псевдоним select для ссылки на команду Select-Object. В команде select указывается имя свойства (или свойств), которые предполагается отобразить. В рассматриваемом примере я указал имя displayname. Теперь результаты, полученные при выполнении инструкции, будут подобны тем, что показаны на экране 3.

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

Форматирование выходных данных

По умолчанию PowerShell форматирует выходные данные инструкции в зависимости от их типа. Например, следующая инструкция возвращает данные о процессе PowerShell:

Get-Process powershell

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

  • Команда Format-Table отображает данные в виде таблицы (экран 4). Этот формат применяется по умолчанию в большинстве составных команд, поэтому команду Table указывают не часто.

  • Команда Format-List отображает данные в виде списка.

  • Команда Format-Wide отображает данные в виде широкой таблицы, в которой для каждого объекта указывается лишь одно значение свойства.

  • Команда Format-Custom отображает данные в пользовательском формате, базирующемся на данных конфигурации, которые содержатся в файле формата .ps1xml. Для обновления файла формата можно использовать команду Update-FormatData. Дополнительные сведения об этом можно найти в справочном файле PowerShell «Update-FormatData».

Чтобы изменить формат выходных данных рассмотренной ранее инструкции, нужно передать ее по конвейеру команде Format-List:

Get-Process powershell | Format-List

Теперь мы получаем результаты, подобные показанным на экране 5. В формате списка демонстрируется лишь подмножество данных, отображаемых в формате таблицы. В разных форматах отображаются разные сведения. Как форматировать результаты, PowerShell определяет в зависимости от типа данных. Иными словами, возвращаемый тип формата, компоновка и свойства обусловлены типом объекта. Так, результаты, возвращаемые командой Get-ChildItem при считывании данных о файловой системе, будут отличаться от результатов, возвращаемых при считывании сведений о реестре, потому что речь идет о двух разных типах объектов, хотя при этом используется одна и та же команда. Для определения того, каким образом следует отображать результаты, PowerShell использует набор сложных файлов формата XML (файлов .ps1xml).

 

Управление выходными данными инструкций

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

  • Команда Out-Host направляет выходные данные на консоль PowerShell. Эта команда применяется по умолчанию, поэтому указывать ее не требуется.

  • Команда Out-Default передает выходные данные применяемой по умолчанию команде форматирования. Кроме того, Out-Default делегирует процесс вывода данных команде Out-Host. Специально указывать команду Out-Default не нужно.

  • Команда Out-File направляет выходные данные в указанный файл.

  • Команда Out-Null удаляет выходные данные и не направляет их на консоль PowerShell.

  • Команда Out-Printer направляет выходные данные на принтер.

  • Команда Out-String преобразует объект конвейера в строковый массив. Дополнительные сведения о каждой команде можно найти в справочных файлах оболочки PowerShell.

Для управления выходными данными инструкции нужно в конце конвейера указать соответствующую команду выходных данных. Так, следующая инструкция представляет сведения о процессе PowerShell в формате списка и затем направляет этот список в файл C:SysInfops.txt:

Get-Process powershell | Format-List | Out-File C:SysInfops.txt

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

Команда Out- File позволяет пользователю указывать, нужно ли присоединять выходные данные к концу файла или замещать этими данными все его содержимое. По умолчанию он выполняет полное замещение. Чтобы присоединить выходные данные к концу файла, в команде Out-File следует использовать переключатель -append:

Get-Process powershell | Format-List | Out-File C:SysInfops.txt ` –append

Сортировка выходных данных

Часто бывает необходимо не только отформатировать выходные данные, но и отсортировать их. Для выполнения этой операции используется команда Sort-Object. Эта команда принимает в качестве входных данных объекты, поступающие из конвейера, и сортирует их в соответствии с указанными пользователем критериями. Как уже отмечалось выше, PowerShell передает результаты по конвейеру в виде потока от одной команды к другой. Но в процессе сортировки данных команда Sort-Object выжидает до тех пор, пока не поступят все результаты (объекты), и лишь после этого сортирует их. В итоге процесс потоковой передачи останавливается до завершения операции сортировки. Если речь идет о небольшом результирующем наборе, проблемы не возникает, но при извлечении больших объемов данных производительность системы может снизиться.

Тем не менее команда Sort-Object может быть весьма полезной. Допустим, к примеру, что нам требуется получить список объектов, находящихся в папке C:Windows. Мы можем использовать команду Get- ChildItem в рамках следующей инструкции:

dir c:windows | where {$_.length -gt 500000} | sort -property length -descending

Данная инструкция передает выходной объект от команды Get-ChildItem (ссылка на который производится с помощью псевдонима dir) команде Where-Object (ссылка на который производится с помощью псевдонима where). Команда Where-Object определяет, что длина должна быть больше 500000 байт (как указывает переключатель -gt). Затем результаты перемещаются по конвейеру. Когда команда Sort-Object (к которой обращаются с помощью псевдонима sort) получает все объекты, она сортирует их в соответствии с заданными критериями.

В данном случае команда Sort-Object первым делом определяет, что сортировка должна производиться по свойству Length. Переключатель -descending указывает, что результаты нужно сортировать в порядке убывания, как показано на экране 6. Если мы не укажем переключатель -descending, результаты будут сортироваться в порядке возрастания. Кроме того, можно указать несколько свойств (разделенных запятыми), на которых будет основываться порядок сортировки. PowerShell сортирует данные сначала по первому указанному свойству, потом по второму и т. д.

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

Роберт Шелдон ([email protected] ) — технический консультант и автор большого количества книг по технологиям Microsoft Windows и базам данных

Как работать с длинными инструкциями PowerShell

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

Проиллюстрируем примером. Когда первая строка инструкции заканчивается знаком оператора, как в следующем примере

Get-Service | where {$_. status -eq ‘running’} | select displayname

PowerShell исходит из того, что продолжение инструкции перенесено на следующую строку. Результаты упомянутой инструкции подобны показанным на экране 3. Обратите внимание на символы многострочного приглашения (>>), с которых начинается каждая строка после первой. Когда PowerShell предполагает, что текущая строка будет продолжена на второй строке, перед последней указывается многострочное приглашение. И тогда после этого приглашения пользователь вводит на второй строке следующую строку кода. После того как оболочка PowerShell переходит в этот многострочный режим, она будет продолжать работу в данном режиме и предлагать пользователю многострочное приглашение. По завершении ввода последней строки нажмите клавишу «Ввод» во второй раз для выполнения команды и для возвращения к обычному приглашению.

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

Get-Service    | where {$_. status -eq ‘running’}    | select displayname

Теперь PowerShell воспринимает первую строку как завершенную и обрабатывает ее как целостную инструкцию. После этого PowerShell пытается обработать вторую строку, что приводит к появлению сообщения об ошибке. Использование пустого элемента конвейера не допускается. Выйти из положения можно, завершая строки символами обратной кавычки (`).

Get-Service `    | where {$_. status -eq ‘running’} `    | select displayname

Символ обратной кавычки извещает PowerShell о том, что инструкция будет продолжена на следующей строке. Теперь рассматриваемая инструкция возвращает те же данные, что и на экране 3.

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

Get-Service |    where {$_. status -eq ‘running’} |    select displayname;

Эта инструкция возвращает результаты, которые представлены на экране 3.

www.osp.ru

Изучение PowerShell - книги и ресурсы

Изучение PowerShell — книги и ресурсы

Данная статья открывает цикл записей, посвященных PowerShell. Да, пришло время командной строки!

Кратко — что такое PowerShell?

  • PowerShell — оболочка командной строки
  • команды PowerShell выполняются в конвейере
  • среда PowerShell может быть расширена, что позволяет применять различные технологии
  • и самое главное — освоив PowerShell, вы станете более квалифицированным администратором.

Почему PowerShell?

Стоит отметить два момента. В первую очередь — PowerShell действительно содержит язык сценариев; это очень компактный язык, в состав которого входит всего лишь порядка двух десятков ключевых слов. Но на самом деле PowerShell, как было сказано выше, — это оболочка командной строки, во многом сходная с cmd.exe или с оболочкой UNIX Bash.

Второй момент: Microsoft не поощряет практику использования оснащенных графическим интерфейсом консолей на серверах. Дело в том, что серверы могут обеспечивать эффективное функционирование графических интерфейсов лишь за счет ухудшения производительности сервера. Но использование графического интерфейса на клиентах, даже если эти клиенты подключены к серверу, вполне допускается и сегодня. Так в новых версиях Windows Server все функции доступны в первую очередь с помощью PowerShell и только потом (а некоторые и вовсе недоступны) с помощью графического интерфейса сервера.

Загрузить PowerShell можно с сайта TechNet — но в современных ОС MS Winodws он доступен «из коробки».

Для более легкого старта в изучении Windows PowerShell представляю вашему вниманию подборку различных материалов. Начнем список с видео курса из далекого 2009 года:

Далее — книги:

Интернет ресурсы:

Программы:

  • Script Browser для Windows PowerShell ISE. Данное дополнение позволяет с легкостью отыскивать необходимые скрипты в TechNet Script Center по заданным критериям и параметрам. По мимо этого содержит специальный модуль Script Analyzer, который после анализа предлагает улучшения/изменения, повышающие эффективность написанного скрипта. Этот модуль можно получить в комплекте Windows PowerShell ISE которая является частью OC Windows. Загвоздка в том, что Windows Server и PowerShell ISE требуют активации. Лицензия сама по себе платная, но не стоит отчаиваться. У Вас будет порядка 180 дней что бы испытать данный продукт. 
  • Dell PowerGUI — Позволяет упростить сборку собственных сценариев PowerShell до простого выбора необходимых командлетов, которые подходят для Вашей задачи, и перетаскивания их в нужные места. Идеально подходит для тех, кто являются новичком в работе с PowerShell, но имеете базовое понимание концепций. PowerGUI — простой в использовании редактор, который, вероятно, усовершенствует Ваше понимание сборки более сложных и усовершенствованных сценариев, особенно если Вы лучше всего усваиваете информацию визуально. 

Один из самых основных источников знаний — прекрасная справка программы:

Get-Help *

Надеюсь данный список ресурсов поможет Вам в изучении PowerShell. Какие книги и наработки использовали вы? Оставьте ответ в комментариях и удачи в освоении новых знаний! 😉

www.gotoadm.ru

Как писать и как запускать скрипты PowerShell

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

В использовании программы PowerShell нет ничего сложного. Просто следуйте всем инструкциям из этой статьи и у вас все получится

Если вы не являетесь знатоком в подобной тематике, только начинаете изучение командных строк и действий, доступных к выполнению в них, вам будет полезно узнать ответы на главные вопросы по пользованию таким приложением. Например, как запустить Windows PowerShell ISE Windows 10 и писать, работать со скриптами.

Как открыть PowerShell?

Это можно сделать несколькими следующими способами:

  • Через Пуск — вы найдёте приложение в общем списке компонентов под буквой W.
  • При помощи поиска в Панели задач — откройте её, и введите слово PowerShell для поиска.
  • Используя меню «Выполнить» — запустите его через комбинацию Win+R и напишите название утилиты, после чего она будет найдена в системе.
  • В коммандере задайте действие PowerShell — но, вы должны знать, что будете работать с приложением через уже запущенную строку, а не в отдельном окне.
  • В параметрах Windows выберите «Свойства панели задач» и меню «Пуск». Во вкладке «Навигация» поставьте флажок на строке «Заменить командную строку оболочкой PowerShell…». Теперь вы сможете включать утилиту комбинацией Win+X.

Как писать и запускать скрипты?

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

Писать скрипты в самом приложении можно так:

  • Запустите его.
  • Нажмите на пункт «Создать».
  • Или кликните на «Файл», и в появившемся списке выберите «Создать».
  • Напишите все команды, которые нужно выполнить, сохраните файл.

Скрипты ещё можно писать и редактировать в FAR Manager, но их нельзя использовать непосредственно в таком приложении, ведь оно отображает файлы этого типа через стандартную строку cmd. Однако прочие действия выполняются таким же образом, как и в «родной» утилите.

Запустить скрипт вы сможете таким образом:

  1. Зайдите в PowerShell от имени администратора.
  2. При помощи команд cd укажите месторасположение требуемого файла. Например, e: cd\ cd work .\ имя_файла. Ps1, или e: \work\ имя_файла.ps1
  3. В этом случае e: — имя жёсткого диска, где находится файл.
  4. Жмите Enter.

Программа обязательно покажет вам сообщение с текстом «Не удаётся загрузить файл ___ .Ps1, так как выполнение скриптов запрещено для этой системы…», когда вы будете первый раз запускать команду. Дело в том, что Windows оснащён защитой от вмешательства благодаря разработчикам, поэтому никто из пользователей по умолчанию не имеет доступа на выполнение таких действий. Но, это ограничение можно очень просто обойти.

Как? В тексте, возникающем вместе с ошибкой, будет рекомендация ввести команду get-help about_signing, чтобы получить больше информации. Вы можете выполнить эти указания, или использовать комбинацию Set-ExecutionPolicy remotesigned — после её ввода потребуется подтверждение, и ограничение будет снято.

Другие вопросы по пользованию

У многих возникает вопрос, как узнать версию PowerShell? Для этого выполните следующее:

  1. Откройте приложение.
  2. Введите $PSVersionTable.
  3. Если это ни к чему не привело, значит, у вас версия 1.0 — для неё есть команда $host.version.
  4. В ином случае появится подробная информация о том, какая версия приложения установлена на ПК.

Ещё один вопрос, на который стоит дать ответ — как удалить PowerShell? Для этого потребуются такие действия:

  • Зайдите через Панель управления в меню установки и удаления программ.
  • Найдите ветку Microsoft Windows
  • Удалите обновление для компонента WindowsPowerShell (TM), следуйте инструкциям системы.

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

nastroyvse.ru