Microsoft Windows PowerShell

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:25, 29 декабря 2016.
PowerShell
1451916303 image0021.jpg
Спроектировано Jeffrey Snover, Bruce Payette, James Truher (et al.)
Разработчики Microsoft
Первый   появившийся 14 ноября, 2006 года
Стабильная версия 5.1.14393 / 2 August 2016 года; 5 years ago (2016-08-02)
Предварительный выпуск 6.0.0 Alpha 10 / 15 September 2016 года; 5 years ago (2016-09-15)
Платформа .NET Framework, .NET Core
OS Windows XP и боле поздние, OS X, CentOS, Ubuntu
Лицензия Лицензия MIT

Microsoft Windows PowerShell — это оболочка командной строки на основе задач, а также язык сценариев, предназначенный специально для системного администрирования. Созданная на основе .NET Framework, служба Windows PowerShell помогает ИТ-специалистам и опытным пользователям в управлении и автоматизации администрирования операционной системы Windows, а также приложений, работающих под управлением Windows.

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

Windows PowerShell содержит следующие функции.

  • Командлеты для выполнения обычных задач системного администрирования, таких как управление реестром, службами, процессами и журналами событий, а также использование инструментария управления Windows (WMI).
  • Язык сценариев на основе задач и поддержка существующих сценариев и программ командной строки.
  • Единый дизайн. Так как командлеты и хранилища системных данных используют обычный синтаксис и соглашения об именовании, можно легко предоставлять общий доступ к данным, а выходные данные одного командлета можно использовать в качестве входных данных в другой командлет без переформатирования или каких-либо операций.
  • Упрощенная навигация операционной системы на основе команд, которая позволяет пользователям перемещаться по реестру и другим хранилищам данных, используя те же техники, которые используются для навигации по файловой системе.
  • Обширные возможности операций с объектами. Объектами можно управлять напрямую или отправлять их в другие инструменты или базы данных.
  • Расширяемый интерфейс. Независимые поставщики программного обеспечения и корпоративные разработчики могут создавать пользовательские инструменты и служебные программы для администрирования программного обеспечения. [1]

История

Каждая выпущенная версия MS-DOS и Microsoft Windows для персональных компьютеров содержала утилиту, предоставляющую интерфейс командной строки. Это были COMMAND.COM (в системах, основанных на MS-DOS, включая Windows 9x) и cmd.exe (в системах семейства Windows NT). Это были обычные интерпретаторы командной строки, имевшие лишь несколько базовых команд. Для других задач требовались отдельные консольные приложения, которые вызывались из этих оболочек. Они также имели язык сценариев (пакетные файлы), при помощи которого можно было автоматизировать различные задачи. Однако эти интерпретаторы не годились для полноценной автоматизации — частично потому, что в них отсутствовали эквиваленты многих операций графического интерфейса, а также из-за слабой функциональности языка сценариев, не позволявшего описывать достаточно сложные алгоритмы. В Windows Server 2003 ситуация была улучшена, однако поддержка сценариев всё ещё считалась недостаточной.

Microsoft пыталась решить некоторые из этих недостатков с помощью Windows Script Host, вышедшего в 1998 году в составе Windows 98, и утилиты для работы с ним из командной строки cscript.exe. Он интегрируется с Active Script и позволяет писать сценарии на совместимых языках, таких, как JScript и VBScript, используя API, предоставляемое приложениями через Component Object Model (COM). Однако у этого решения свои недочёты. Windows Script Host не интегрирован с оболочкой, отсутствует встроенная документация. Различные версии Windows также предоставляют командные интерпретаторы специального назначения (такие, как netsh.exe и WMIC) со своими собственными наборами команд. Они не интегрированы с командной оболочкой и не дают возможностей для взаимодействия.

В 2003 Microsoft начала разработку новой оболочки, называемой Monad (также известной как Microsoft Shell или MSH). Monad должен был стать новой расширяемой оболочкой командой строки, со свежим дизайном, который позволял бы автоматизировать весь спектр административных задач. Microsoft опубликовала первую публичную бета-версию Monad 17 июня 2005 года. Вторая и третья бета-версии были выпущены 11 сентября 2005 и 10 января 2006 соответственно. 25 апреля 2006 года было объявлено, что Monad переименован в Windows PowerShell для позиционирования его в качестве значительной части их технологий управления. В это же время была выпущена версия Release Candidate 1 («кандидат на выпуск»). Release Candidate 2 последовал 26 сентября 2006 года. Финальная версия (Release to Web, RTW) была выпущена 14 ноября 2006 года для Windows XP SP2 и Windows 2003. Финальная версия для Windows Vista стала доступна только 30 января 2007 года.

Последний CTP выпуск Windows PowerShell версии 2.0 был выпущен в декабре 2008 года. Финальная версия второй версии PowerShell была выпущена в составе систем Windows 7 и Windows Server 2008 R2 одновременно с их выпуском. Для остальных систем (Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008), вторая версия PowerShell стала доступна в составе комплекта Windows Management Framework 27 октября 2009 года. Кроме Windows PowerShell второй версии, в этот комплект также входят WinRM версии 2.0 и BITS 4.0 (последний доступен только для Windows Vista и Windows 2008; в Windows 7 и Windows Server 2008 R2 он встроен).

Назначение

Windows PowerShell является ключевым инструментом управления, в отличие от Microsoft Management Console (MMC). Возможно, вы знаете, что консоль MMC сама по себе во многих случаях оказывается бесполезной. Для того, чтобы сделать ее полезной, необходимо добавлять оснастки. Оснастки дают специфические возможности управления продуктами и технологиями, например, возможность администрирования активной директории или Exchange Server.

Windows PowerShell действует по такому же принципу. Несмотря на то, что оболочка выполняет множество полезных функций, ее возможности предполагается расширять с помощью всевозможных оснасток и модулей. Windows PowerShell сама по себе не содержит эти оснастки и модули; они устанавливаются параллельно с тем продуктом, функцией или технологией, к которой они относятся. Другими словами, если вы хотите с помощью Windows PowerShell управлять службами Active Directory Domain Services, вам необходимо установить соответствующий модуль. Этот модуль устанавливается вместе с ролью Active Directory® Domain Services. Некоторые модули также могут быть установлены параллельно с удаленным сервером Windows Remote Server Administration Toolkit (RSAT), что делает возможным установить модули, имеющие отношение к серверу, на клиентской операционной системе, например, Windows 7.

Некоторые модули можно загрузить отдельно. Например, на сайте CodePlex Web (www.codeplex.com) можно найти ряд проектов, имеющих отношение к Windows PowerShell со сторонних открытых источников. Многие из этих проектов имеют вид оснастки или модуля. К ним относится, например, популярный проект Windows PowerShell Community Extensions, который можно скачать с www.codeplex.com/powershellcx. Отдельно стоит упомянуть, что некоторые оснастки и модули помимо требований Windows PowerShell могут иметь свои собственные системные требования. Например, модулям может потребоваться конкретная версия Windows или Microsoft .NET Framework. В документации к каждому модулю или оснастке должны быть указаны специфические системные требования, помимо базовых требований оболочки.

Командлеты

Командлеты именуются по правилу Глагол-Существительное, например, Get-ChildItem, благодаря чему их предназначение понятно из названия. Командлеты выводят результаты в виде объектов или их коллекций. Дополнительно командлеты могут получать входные данные в такой же форме и, соответственно, использоваться как получатели в конвейере. Хотя PowerShell позволяет передавать по конвейеру массивы и другие коллекции, командлеты всегда обрабатывают объекты поочередно. Для коллекции объектов обработчик командлета вызывается для каждого объекта в коллекции по очереди.

Экземпляры объектов создаются в PowerShell и запускаются им при вызове. Командлеты наследуются от Cmdlet или от PSCmdlet, причём последний используется тогда, когда командлету необходимо взаимодействовать с исполняемой частью PowerShell (англ. PowerShell runtime). В этих базовых классах оговорены некоторые методы — BeginProcessing(), ProcessRecord() и EndProcessing(), как минимум один из которых реализация командлета должна перезаписать для предоставления своей функциональности. Каждый раз при запуске командлета эти методы вызываются PowerShell по очереди. Сначала вызывается BeginProcessing(), затем, если командлету передаются данные по конвейеру, ProcessRecord() для каждого элемента, и в самом конце — EndProcessing(). Класс, реализующий Cmdlet, должен иметь один атрибут .NET — CmdletAttribute, в котором указываются глагол и существительное, составляющие имя командлета. Популярные глаголы представлены в виде перечисления.[2]

Версии

Первая версия PowerShell 1.0 появилась 14 ноября 2006 года и выпускалась в виде отдельного дистрибутива, который можно было установить на следующие версии операционных систем Windows: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 и Windows Vista.

В Windows Server 2008 PowerShell 1.0 поставлялся в виде компонента, который также нужно было устанавливать.

Начиная с Windows 7 и Windows Server 2008 R2, PowerShell поставляется как неотъемлемый компонент системы. Ниже представлена таблица соответствия версии PowerShell и версии операционной системы Windows:

PowerShell Windows
PowerShel l2.0 Windows 7, Windows Server 2008 R2
PowerShell 3.0 Windows 8, Windows Server 2012
PowerShell 4.0 Windows 8.1, Windows Server 2012 R2
PowerShell 5.0 Windows 10, Windows Server 2016

С каждой новой версией PowerShell становится все более мощным инструментом администрирования, для сравнения в первой PowerShell было около 130 командлетов, а в PowerShell 5.0 их уже более 600.[3]

PowerShell 1.0

PowerShell 1.0 появилась 14 ноября 2006 года и выпускалась в виде отдельного дистрибутива, который можно было установить на следующие версии операционных систем Windows: Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 и Windows Vista.

PowerShell 2.0

Microsoft выпустила PowerShell 2.0 в составе Windows 7 и Windows Server 2008 R2. Windows PowerShell 2.0 предустановлен в этих системах. Исключением является режим установки Windows Server 2008 R2 в режиме Core, где PowerShell 2.0 можно доустановить вручную. Для более старых платформ он доступен в составе Windows Management Framework. PowerShell 2.0 вносит некоторые изменения в язык сценариев и API для встраивания, в дополнение к новым 240 командлетам.

Неполный список новых возможностей, включённых в PowerShell 2.0:

  • PowerShell Remoting. Используя WS-Management, PowerShell 2.0 позволяет вызывать сценарии и командлеты на удалённых машинах (в том числе и на нескольких одновременно), отслеживать состояние их выполнения и получать результаты в виде объектов (через сериализацию-десериализацию). Также возможно устанавливать интерактивные сессии и сессии с ограниченной функциональностью.
  • Фоновые работы. Возможность вызывать последовательности команд асинхронно. Работы можно запускать на локальной машине или на нескольких удалённых машинах. Работы не могут использовать интерактивные командлеты.
  • Транзакции. Позволяют разработчикам командлетов и поставщиков реализовывать транзакционные операции. PowerShell 2.0 включает командлеты для инициализации, подтверждения и отката транзакций и возможности для управления транзакциями и использования их в командлетах и поставщиках.
  • Advanced Functions. Возможность разрабатывать полноценные командлеты, используя только сам PowerShell.
  • SteppablePipelines. Позволяет пользователю контролировать вызов функций BeginProcessing(), ProcessRecord() и EndProcessing() при вызове командлета.
  • Модули. Позволяют авторам сценариев и администраторам организовывать сценарии PowerShell и помещать их в самодостаточные модули. Код из модуля выполняется в своем собственном, независимом контексте и не влияет на окружение вне модуля. Используя сценарий, модули могут объявлять ограниченное окружение. Модули могут содержать публичные и приватные функции и переменные.
  • Язык данных. Подмножество языка PowerShell, которое позволяет отделять определения данных от исполняемого кода сценариев и даёт возможность импортировать в сценарий локализованные строки в процессе выполнения.
  • Отладка сценариев. Возможность устанавливать точки прерывания (англ. breakpoints) в сценариях или функциях PowerShell. Точки прерывания могут быть установлены на строки, столбцы, команды или операции чтения и/или записи переменных. Присутствуют командлеты для установки и контроля точек прерывания в сценариях.
  • Eventing (событирование). Эта возможность позволяет слушать, перенаправлять, и выполнять действия при возникновении событий управления или системы. Благодаря событированию хосты PowerShell могут быть оповещены о изменениях состояния в управляемых объектах. Также позволяет сценариям подписываться на ObjectEvents, PSEvents и WmiEvents и обрабатывать их синхронно и асинхронно.
  • Windows PowerShell Integrated Scripting Environment (ISE). PowerShell 2.0 включает графическую оболочку для языка, в которую входят встроенный отладчик, подсветка синтаксиса, автозавершение команд. Оболочка позволяет запускать несколько независимых консолей PowerShell с полной поддержкой Юникода в интерфейсе с закладками. Благодаря поддержке удалённого выполнения некоторые консоли могут выполняться и на других компьютерах. Кроме того, ISE позволяет выполнять только выделенные части сценариев, содержит встроенный редактор и позволяет расширять и дополнять свой интерфейс с помощью PowerShell.
  • BITS Transfer — встроенная поддержка передачи файлов по сети с приоритизацией, многопоточностью, возобновлением и асинхронной работой на основе технологии Background Intelligent Transfer Service.
  • Множество новых командлетов, включая, например, Out-GridView, позволяющий вывести результаты конвейера в графическую таблицу (на основе WPF), с возможностями сортировки и мгновенного поиска.
  • Новые операторы -Split, -Join и оператор подстановки (@).
  • Обработка ошибок с Try-Catch-Finally. В отличие от других .NET языков, в PowerShell можно указывать несколько типов исключений для одного блока catch.
  • Блочные комментарии. PowerShell 2.0 поддерживает блочные комментарии (плюс к уже имеющимся построчным #) с использованием <# и #> в качестве ограничителей.
  • Новые API добавили разные возможности, от большего контроля над парсером PowerShell до способности создавать ограниченные сессии (англ. restricted runspace), в которых можно выполнять лишь ограниченный набор инструкций и команд PowerShell.

PowerShell 3.0

PowerShell 3.0 интегрирован с Windows 8 и с Windows Server 2012. Microsoft также сделала PowerShell 3.0, доступное для Windows 7 с пакетом обновления 1 для Windows Server 2008 с пакетом обновления 1, а также для Windows Server 2008 R2 с пакетом обновления 1.

Windows PowerShell 3.0 включает новые функции:

  • Рабочие процессы Windows PowerShell
  • Windows PowerShell Web Access
  • Новые возможности в интегрированной среде скриптов Windows PowerShell
  • Поддержка Microsoft .NET Framework 4.0
  • Поддержка среды предустановки Windows
  • Отключенные сеансы
  • Надежная связь для сеансов
  • Система обновляемой справки
  • Усовершенствованная справка в Интернете
  • Интеграция с CIM
  • Файлы конфигурации сеанса
  • Интеграция запланированных заданий и планировщика задач
  • Усовершенствования в языке Windows PowerShell
  • Новые основные командлеты
  • Усовершенствования в существующих основных командлетах и поставщиках
  • Удаленный импорт и обнаружение модулей
  • Усовершенствованное завершение нажатием клавиши TAB
  • Автоматическая загрузка модулей
  • Улучшение работы с модулями
  • Упрощенное обнаружение команд
  • Улучшенная поддержка ведения журнала, диагностики и групповой политики
  • Усовершенствования, связанные с форматированием и выходными данными
  • Усовершенствованное взаимодействие с узлом консоли
  • Новые API-интерфейсы командлетов и размещения
  • Повышение производительности
  • Поддержка запуска от имени и общего узла
  • Улучшения в обработке специальных символов

PowerShell 4.0

PowerShell 4.0 интегрируется с ОС Windows 8.1 и Windows Server 2012 R2. Microsoft также сделала PowerShell 4.0 для Windows 7 SP1, Windows Server 2008 R2 SP1 и Windows Server 2012.

Некоторые новые возможности в PowerShell 4.0:

  • Новые возможности в Windows PowerShell
  • Новые возможности в интегрированной среде скриптов Windows PowerShell
  • Новые возможности в рабочих процессах Windows PowerShell
  • Новые возможности в веб-службах Windows PowerShell
  • Новые возможности в Windows PowerShell Web Access
  • Исправления важных ошибок в Windows PowerShell 4.0

PowerShell 5.0

Новые функции в Windows PowerShell 5.0:

  • Новые возможности в Windows PowerShell
  • Новые возможности для настройки требуемого состояния Windows PowerShell
  • Новые возможности в интегрированной среде скриптов Windows PowerShell
  • Новые возможности в веб-службах Windows PowerShell
  • Исправления важных ошибок в Windows PowerShell 5.0[4]

Сценарии, функции и модули

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

По умолчанию выполнение сценариев в Windows запрещено. Для того чтобы посмотреть политику выполнения сценариев выполните командлет Get-ExecutionPolicy. В результате он вернет действующую политику, например:

  • Restricted – блокируется выполнение любых сценариев (значение по умолчанию);
  • AllSigned – разрешено выполнение сценариев, которые имеют цифровую подпись;
  • RemoteSigned – разрешено выполнение локальных сценариев, все скачанные сценарии должны иметь цифровую подпись;
  • Unrestricted - разрешено выполнение любых сценариев

Для разрешения выполнения сценариев необходимо использовать командлет Set-ExecutionPolicy с одним из вышеперечисленных параметров. В сценарии можно передавать параметры, делать их обязательными или задавать значение по умолчанию. В Windows PowerShell предусмотрен механизм создания собственных функций, которые также как и встроенные командлеты можно будет использовать в оболочке PowerShell. Для этого необходимо указать ключевое слово Function и затем в фигурных скобках {} написать алгоритм работы этой функции, т.е. набор команд (например, какая-нибудь часто используемая процедура: создать пользователя с определенными правами, очистить определенные каталоги и так далее). Потом необходимо сохранить все это в сценарий, но только уже с расширением .psm1, так как этот файл будет являться уже модулем. Это еще не все, этот файл необходимо поместить в каталог, в котором PowerShell ищет модули. Таких каталогов несколько (специальный каталог в профиле пользователя, каталог, где установлен PowerShell), их можно посмотреть в переменных окружения PowerShell.


Источники

  1. Microsoft [Электронный ресурс]: Работа со сценариями в Windows PowerShell / Дата обращения: 17.12.2016. — Режим доступа: https://technet.microsoft.com/ru-ru/library/bb978526.aspx
  2. Википедия [Электронный ресурс]: Windows PowerShell / Дата обращения: 17.12.2016. — Режим доступа: https://ru.wikipedia.org/wiki/Windows_PowerShell
  3. Info-Comp [Электронный ресурс]: Основы Windows PowerShell / Дата обращения: 17.12.2016. — Режим доступа: http://info-comp.ru/sisadminst/546-windows-powershell-basics.html#PowerShellVersions
  4. Microsoft [Электронный ресурс]: Новые возможности Windows PowerShell / Дата обращения: 17.12.2016. — Режим доступа: https://msdn.microsoft.com/ru-ru/powershell/scripting/whats-new/what-s-new-in-windows-powershell-50

Ссылки

  • Франк Кох. Windows PowerShell(Введение в технологии языка сценариев для пользователей без базовых знаний). — С. 44. — http://window.edu.ru/resource/459/61459/files/Windows_Powershell%20-%20RU.pdf
  • Techdays [Электронный ресурс]: Доклад о возможностях PowerShell и основах написания сценариев / Дата обращения: 17.12.2016. — Режим доступа: https://www.techdays.ru/videos/1187.html
  • habrahabr [Электронный ресурс]: Jump Start в PowerShell (часть I) / Дата обращения: 17.12.2016. — Режим доступа: https://habrahabr.ru/post/242425/
  • habrahabr [Электронный ресурс]: Jump Start в PowerShell (часть II) / Дата обращения: 17.12.2016. — Режим доступа: https://habrahabr.ru/post/242445/
  • computerinfo [Электронный ресурс]: Что такое PowerShell? / Дата обращения: 17.12.2016. — Режим доступа: http://computerinfo.ru/chto-takoe-powershell/