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

Power Shell: что это и как с ним работать

В нашем "руководстве для чайников" рассказываем, что такое Power Shell, как использовать кросс-платформенное решение для автоматизации задач в Windows, Linux и macOS, писать первые сценарии и управлять конфигурациями.

Основы работы с Power Shell

«Повершелл» — это: 

  • оболочка командной строки (интерфейс);
  • скриптовый ЯП на основе .NET;
  • платформа управления конфигурацией.

Впервые «повершелл» как язык программирования был представлен на Professional Developers Conference (PDC) в 2003 году под кодовым названием Monad.

Обратите внимание, что Power Shell Windows и Power Shell — два отдельных продукта. Первый — версия, которая поставляется в MS Windows и в которой используется полная платформа .NET Framework (выполнение возможно только в Windows). Второй основан на .NET и доступен в Windows, Linux и macOS. 

Сегодня сферы применения «повершелла» выходят за рамки консоли на персональном компьютере. Инструмент используют для работы с виртуальными машинами, удаленными компьютерами и облачными ресурсами.

Установка и настройка

Как правило, в операционной системе Майкрософт Виндовс «повершелл» установлен по умолчанию. Пользователям остается только запустить инструмент. Сделать это можно несколькими способами:

  • через меню «Пуск»;
  • с использованием быстрых клавиш Win + R.

Чтобы запустить «повершелл» через «Пуск», необходимо нажать на кнопку в нижнем левом углу и найти сервис (пролистать вниз или использовать поиск).

Запуск Power Shell через меню «Пуск» на компьютере
Запуск Power Shell через меню «Пуск» на компьютере

При использовании горячих клавиш Win + R в нижнем левом углу автоматически появляется утилита «Выполнить». Надо ввести название инструмента и нажать «ОК», чтобы открыть инструмент. 

Запуск Power Shell через быстрые клавиши Win + R
Запуск Power Shell через быстрые клавиши Win + R

Появляется окно для ввода команд.

Как выглядит Windows Power Shell
Как выглядит Windows Power Shell

Если по каким-то причинам на устройстве нет Power Shell Windows, можно установить его с использованием инструментов:

  • Winget (Диспетчер пакетов Windows) — команда winget search MicrosoftPower Shell;
  • пакет MSI с GitHub;
  • MSI из командной строки;
  • ZIP-архивы двоичных файлов;
  • Store в ОС Windows (Store).

Для разработчиков корпорация Майкрософт публикует Docker-образы с предустановкой инструмента и опцией использования в контейнере. Запускать «повершелл» на удаленных машинах и серверах можно для коммерческой разработки.

Основные командлеты

Пользователь задает команды, состоящие из связки «Действие — Объект» («Глагол — Существительное»). Глагол определяет действие, а существительное — ресурс, в котором оно выполняется.

Эти команды называются командлеты Power Shell (от английского cmdlet) и не выносятся в отдельные исполняемые файлы.

Общее количество доступных cmdlet превышает 50 штук. В руководстве для чайников рассмотрим основные команды Power Shell.

Power Shell commandЧто делает
Get-JobВозвращает список фоновых заданий, которые выполняются в текущем сеансе
Get-CommandПолучает все команды, установленные на компьютере (командлеты, функции, фильтры, скрипты и приложения)
Get-HelpОтображает сведения о командах и концепциях Power Shell
Save-HelpСкачивает и сохраняет последние файлы справки в каталог файловой системы
Get-HistoryВозвращает журнал сеансов (список cmdlet, которые были использованы)
Set-StrictModeУстанавливает строгий режим для текущей области и всех дочерних областей
Start-JobЗапускает фоновое задание
Stop-JobОстанавливает фоновое задание
Test-PSSessionConfigurationFileПроверяет ключи и значения в файле конфигурации
Add-HistoryДобавляет записи в журнал сеанса
Clear-HistoryУдаляет записи из журнала сеанса
Debug-JobЗапускает отладку фонового или удаленного задания
Get-ExperimentalFeatureВозвращает экспериментальные функции из модулей или подсистемы Power Shell
Invoke-CommandВыполняет команды на локальных или удаленных машинах
Receive-JobПолучает результаты фоновых заданий
Set-PSDebugВключает функцию отладки сценариев, задает уровень трассировки и переключает строгий режим (выключен по умолчанию)

Например, нужно просмотреть справку о том, какие настройки доступны. Для этого необходимо указать в терминале:

Get-Help

Через несколько секунд появится раздел со справочной системой (краткое и подробное описание). 

Результат командлета Get-Help в Windows Power Shell
Результат командлета Get-Help в Windows Power Shell

Аналогично можно попробовать другие cmdlet. Мы решили проверить список текущих заданий. Вводим:

Get-Job

Дальше хотим узнать историю ранее заданных команд:

Get-History

Система показывает, что ранее мы запрашивали Get-Job. Эта опция удобна, когда нужно посмотреть происходящие в системе события и действия.

Результат командлета Get-History в Windows Power Shell
Результат командлета Get-History в Windows Power Shell

Затем мы решили посмотреть, какие командлеты, алиасы, функции, фильтры, скрипты и приложения установлены на компьютере. Запускаем:

Get-Command

Результат — длинный список в консоли.

Результат командлета Get-Command в Windows Power Shell
Результат командлета Get-Command в Windows Power Shell

Переменные и операторы

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

Переменная — это единица (ячейка) памяти, в которой хранится определенное значение. Мы можем записать в переменную:

  • числа,
  • строки,
  • массивы,
  • хэш-таблицы.

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

Синтаксис подразумевает, что названия переменных начинаются со знака доллара ($), например:

  • $b,
  • $GitVerse,
  • $my_GitVerse.

Для получения списка переменных используют:

Get-Variable

В результате ввода можно увидеть список доступных системных переменных — в перечне они без знака доллара.

Вывод системных переменных в Windows Power Shell с помощью командлета Get-Variable
Вывод системных переменных в Windows Power Shell с помощью командлета Get-Variable

Пользователь может создавать собственные переменные для решения ряда прикладных задач. Ниже приводим tutorial для изучения некоторых из них.

ЗадачаПример кода Тип данных
Сохранить число$GitVerse = 12    System.Int32
Сохранить строку$GitVerse = "Hi, we are GitVerse for developers" System.String
Сохранить результаты команды$GitVerseProcesses = Get-Process или $Today = (Get-Date).DateTimeFileInfo и DirectoryInfo 
Записать в одну переменную несколько объектов (например, число и строку)$GitVerse = 12, "Hi, we are GitVerse for developers"array of System.Int32, System.String

Переменные можно:

  • перезаписать (изменить значение) — например, задать $GitVerse = 12, а затем указать $GitVerse = 13 или $GitVerse ="ноль";
  • удалить значение — Clear-Variable -Name GitVerse;
  • назначить значение нескольким переменным — $a = $b = $c = 1928373;
  • удалить переменную — Remove-Variable -Name MyVariable.

Повершелл поддерживает разные виды операторов — tutorial для обучения представлен ниже:

Вид операторовКакие поддерживаютсяДля чего используются
Арифметические (Arithmetic_Operators)+, -*, /, %Вычисление значений в выражении 
Присваивания (Assignment_Operators)=, +=, /=-=*=, %=Назначение, добавление, изменение значений в переменных
Сравнения (Comparison_Operators)-eq, -ne-gt, -lt, -le, -ge, -match, -replace-notmatch, -is, -isnotПроверка типа, сравнение значений и условий тестирования
Логические (Logical_Operators)-and, -or, -xor, -not, !Подключение условных конструкций
Перенаправления (Redirection)>, , >>2>и2>>2>&1Отправка выходных данных в текстовый файл
Разделения и соединения-join, -splitРазбивка или объединение строк
Типов (Type_Operators)-is, -isnot, -asПоиск и изменение типов
Унарные (Unary_Operators)++ и --Увеличение и уменьшение значений

Доступны и специальные операторы:

  • группировки выражений и результатов — ( );
  • вложенных выражений — $( );
  • вложенных выражений массива @( );
  • хэш-таблицы — @{};
  • форматирования — -f;
  • индекса — [ ];
  • цепочки конвейеров && и ||, и так далее.

У операторов есть так называемый приоритет — то, в каком порядке они будут обрабатываться. Обработка происходит слева направо, в порядке приоритетности. Давайте рассмотрим задачку:

3+6/3*4

Результат математического расчета — 11. Это происходит из-за особенностей приоритета:

деление — 6/3 = 2;

умножение — 2*4 = 8;

сложение — 3 + 8 = 11.

Продвинутые возможности

Изучив базовые возможности Power Shell, можно переходить к продвинутым инструментам.

Среди них:

  • создание массивов — PS C:\> $GitVerse =1,2,3;
  • генерация хэш-таблиц / ассоциативных массивов — PS C:\> $GitVerse=@{Сайт="gitverse.ru"; Функции="Хостинг репозиториев"; Телеграм="gitversenews"};
  • создание функций — PS C:\> Function GitVerse{"Всем привет, это GitVerse!"}, а также многие другие. 

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

Сценарии и сценарные файлы

Разработчики предлагают интегрированную среду сценариев WindowsPower Shell ISE — Integrated Scripting Environment.

Она позволяет:

  • запускать commands;
  • тестировать скрипты;
  • выполнять отладку;
  • создавать скрипты.

ISE поддерживает:

  • автозаполнение;
  • подсветка синтаксических конструкций;
  • выполнение кода выборочно;
  • редактирование нескольких строк и др.

Integrated Scripting Environment доступен до версии 5.1 включительно и как компонент доставки в Windows. Для новых инструментов рекомендуют Visual Studio Code с расширением Power Shell.

Запускать Integrated Scripting Environment на устройствах под управлением Microsoft Windows можно через меню «Пуск».

Интегрированная среда сценариев Windows Power Shell ISE — Integrated Scripting Environment
Интегрированная среда сценариев Windows Power Shell ISE — Integrated Scripting Environment

Написанные в файл и сохраненные в папку сценарии не будут выполняться автоматически (политика безопасности). Для запуска нужно зайти от имени администратора и разрешить выполнение скриптов командой Set-ExecutionPolicy RemoteSigned. 

Работа с модулями

Модуль — это автономный набор функций и/или сгруппированный код с определенной функциональностью. Module поддерживает опцию повторного использования и переиспользования и может содержать:

  • cmdlet,
  • переменные,
  • функции и другие типы.

По умолчанию пользователю доступны базовые модули. Чтобы увидеть их список, достаточно ввести:

Get-Module

Вывод предустановленных модулей в Windows Power Shell с помощью командлета Get-Module
Вывод предустановленных модулей в Windows Power Shell с помощью командлета Get-Module

Также можно устанавливать дополнительные модули или писать собственные. 

Доступные commands:

  • Get-Module — вывести список модулей;
  • Get-Command -Module <module-name> — отобразить все команды в модуле;
  • Remove-Module <module-name> — удалить модуль.

Управление системными ресурсами

Скрипты, которые поддерживают функциональность:

  • мониторинг дискового пространства с уведомлением системного администратора;
  • очистка диска;
  • удаление временных файлов;
  • получение отчета о состоянии служб.

Для управления IT-инфраструктурой и инфраструктурой разработки используют службу настройки требуемого состояния — Desired State Configuration (DSC). Платформа содержит три элемента:

  • конфигурации;
  • ресурсы;
  • локальный диспетчер конфигураций (LCM).

Чтобы увидеть встроенные ресурсы, необходимо ввести:

Get-DSCResource

Вывод встроенных ресурсов в Windows Power Shell с помощью командлета Get-DSCResource
Вывод встроенных ресурсов в Windows Power Shell с помощью командлета Get-DSCResource

Появляется список встроенных ресурсов:

  • Archive,
  • Environment,
  • File,
  • Group,
  • GroupSet,
  • Log,
  • Package,
  • Service,
  • ServiceSet,
  • User, и так далее.

Например, Log в DSC предоставляет механизм записи сообщений в журнал событий (логирование), Package нужен для установки и удаления пакетов, User используется для управления локальными учетными записями.

Практические примеры использования

Долгое время Power Shell использовали только в Windows. В связи с этим сферы применения были ограничены автоматизацией задач в этой ОС.

Со временем Power Shell стал кроссплатформенным и получил поддержку сообщества. Инструмент можно использовать для решения разных задач:

  • управление облаком — получение сведений о доступных ресурсах, обновление, развертывание;
  • автоматизация задач для Active Directory и Exchange — оптимизация рутинных процессов вроде создания пользователей в Active Directory или генерации адресов электронной почты в Exchange;
  • CI/CD — поддержка процессов continuous integration и continuous delivery/continuous deployment (непрерывные интеграция и развертывание).

Если раньше Power Shell был инструментом системных администраторов, то сегодня его активно используют DevOps, Cloud Ops и разработчики frontend/backend.

Автоматизация рутинных задач

Для автоматизации рутинных задач разработчиков, системных администраторов и других IT-специалистов созданы библиотеки командлетов:

  1. Dynamics 365 Customer Engagement (on-premises) — онлайн-администрирование и развертывание сред с базами данных Microsoft Dataverse.
  2. Microsoft365 — автоматизация действий и задач, связанных с пользователем Win.
  3. MicrosoftAzure — включение компонентов Azure, сценарии настройки локальных шлюзов.
  4. Power Apps — автоматизация задач, связанных со средами и приложениями, для разработчиков и системных администраторов.

Нужно установить соответствующий модуль через Install-Module.

Установка модулей в Windows Power Shell с помощью командлета Install-Module
Установка модулей в Windows Power Shell с помощью командлета Install-Module

Например, в Microsoft365 можно использовать командлеты:

  • Get-MgSubscribedSku — посмотреть список лицензионных планов;
  • Get-MgUserLicenseDetail -UserId "<user sign-in name (UPN)>" — запросить сведения о лицензии конкретного пользователя;
  • Set-MgUserLicense -UserId "<Account>" -RemoveLicenses @("<AccountSkuId1>") -AddLicenses @{} — удалить все лицензии с учетки пользователя и так далее.

В Power Apps доступны: 

  • Get-AdminPowerAppEnvironment — возвращает данные об окружении;
  • Get-AdminPowerAppLicenses -OutputFilePath '<licenses.csv>' — экспортирует список назначенных пользовательских лицензий;
  • Get-AdminDeletedPowerAppsList -EnvironmentName 'EnvironmentName' — показать список удаленных приложений и так далее.

Также доступны простые скрипты для рутинных задач:

  • перезагрузка или выключение;
  • удаление лишних предустановленных приложений;
  • переименование группы файлов;
  • создание резервной копии;
  • мониторинг дискового пространства;
  • автообновление всех установленных модулей;
  • удаление временных файлов (Temp), и так далее.

Управление конфигурациями

Конфигурации — это сценарии Power Shell, которые позволяют быстро настраивать экземпляры ресурсов.

Пользователям доступны:

  • конфигурации DSC — это сценарии Power Shell, определяющие особый тип функции;
  • локальный диспетчер конфигураций (LCM) — подсистема Desired State Configuration, которая работает на каждом целевом узле.

По сути, конфигурация позволяет задать настройки. Например, можно создать Configuration, гарантирующую, что файл GitVerse.txt существует на машине (а в случае удаления система будет автоматически создавать файл при обновлении). Это нужно ввести в интегрированную среду сценариев или другой редактор код скрипта. Сам код при этом выглядит таким образом:

Configuration GitVerse {

    Import-DscResource -ModuleName PsDesiredStateConfiguration

    Node 'localhost' {

        File GitVerse {

            DestinationPath = "C:\Temp\GitVerse.txt"

            Ensure = "Present"

            Contents  = "Hello, we are GitVerse"

        }

    }

}

Главный контейнер конфигурации описывается с помощью зарезервированного ключевого слова Сonfiguration. Затем необходимо импортировать DscResource. Блок конкретного компьютера начинается с зарезервированного слова Node, после которого идет имя целевой машины (может задаваться в виде переменной). Далее в блоке Node разработчик задает настройки:

  • путь (DestinationPath);
  • ключ Ensure со значением Present (означает, что настройка должна быть включена);
  • контент или тип (Contents).

Файл с кодом необходимо сохранить как "GitVerse.ps1". Для применения конфигурации нужно скомпилировать код и сгенерировать MOF-файл. Затем запускаем:

C:\Scripts\GitVerse.ps1

Чтобы применить конфиг к целевому узлу, используют Start-DscConfiguration. Команда может выглядеть таким образом:

Start-DscConfiguration -Path C:\Scripts\GitVerse -Verbose -Wait

В будущем можно проверить конфигурацию, получить статус, опубликовать, протестировать ее.

Мониторинг и анализ

Инструмент представляет настройки для мониторинга и анализа. Доступны:

  • Get-TraceSource — мониторинг потока данных (трассировка);
  • Get-Counter — мониторинг производительности;
  • Register-EngineEvent — подписка на события и мониторинг хода выполнения заданий.
Мониторинг системы Windows Power Shell
Мониторинг системы Windows Power Shell

Для анализа системы нужны логи (log). Базовые командлеты для взаимодействия с журналами событий:

  • Get-EventLog — возвращает журнал событий или список журналов событий;
  • Write-EventLog — записывает события в журнал;
  • Get-WinEvent — возвращает журналы трассировки;
  • New-EventLog — создает новый журнал или источник событий;
  • Clear-EventLog — очищает журналы событий.

«Повершелл» может:

  • отслеживать изменения файлов журнала в режиме реального времени;
  • фильтровать записи по определенным ключевым словам;
  • отправлять автоматические уведомления на адрес электронной почты или по другим контактам и так далее. 

Нужную функциональность можно получить с помощью дополнительных скриптов и сценариев.

Оболочка Power Shell — не просто инструмент MS Windows. Сегодня его  используют для решения задач, связанных с удаленными виртуальными машинами (управление облаком, CI/CD).