Основы работы с 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.
Чтобы запустить «повершелл» через «Пуск», необходимо нажать на кнопку в нижнем левом углу и найти сервис (пролистать вниз или использовать поиск).
При использовании горячих клавиш Win + R в нижнем левом углу автоматически появляется утилита «Выполнить». Надо ввести название инструмента и нажать «ОК», чтобы открыть инструмент.
Появляется окно для ввода команд.
Если по каким-то причинам на устройстве нет 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
Через несколько секунд появится раздел со справочной системой (краткое и подробное описание).
Аналогично можно попробовать другие cmdlet. Мы решили проверить список текущих заданий. Вводим:
Get-Job
Дальше хотим узнать историю ранее заданных команд:
Get-History
Система показывает, что ранее мы запрашивали Get-Job. Эта опция удобна, когда нужно посмотреть происходящие в системе события и действия.
Затем мы решили посмотреть, какие командлеты, алиасы, функции, фильтры, скрипты и приложения установлены на компьютере. Запускаем:
Get-Command
Результат — длинный список в консоли.
Переменные и операторы
Как и в других языках программирования, пользователям доступны переменные и операторы. А еще — массивы, условия, циклы, хеш-таблицы, функции и классы.
Переменная — это единица (ячейка) памяти, в которой хранится определенное значение. Мы можем записать в переменную:
- числа,
- строки,
- массивы,
- хэш-таблицы.
Также можно записать в переменную объекты, представляющие процессы, службы, журналы событий и компьютеры.
Синтаксис подразумевает, что названия переменных начинаются со знака доллара ($), например:
- $b,
- $GitVerse,
- $my_GitVerse.
Для получения списка переменных используют:
Get-Variable
В результате ввода можно увидеть список доступных системных переменных — в перечне они без знака доллара.
Пользователь может создавать собственные переменные для решения ряда прикладных задач. Ниже приводим tutorial для изучения некоторых из них.
Задача | Пример кода | Тип данных |
Сохранить число | $GitVerse = 12 | System.Int32 |
Сохранить строку | $GitVerse = "Hi, we are GitVerse for developers" | System.String |
Сохранить результаты команды | $GitVerseProcesses = Get-Process или $Today = (Get-Date).DateTime | FileInfo и 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 можно через меню «Пуск».
Написанные в файл и сохраненные в папку сценарии не будут выполняться автоматически (политика безопасности). Для запуска нужно зайти от имени администратора и разрешить выполнение скриптов командой Set-ExecutionPolicy RemoteSigned.
Работа с модулями
Модуль — это автономный набор функций и/или сгруппированный код с определенной функциональностью. Module поддерживает опцию повторного использования и переиспользования и может содержать:
- cmdlet,
- переменные,
- функции и другие типы.
По умолчанию пользователю доступны базовые модули. Чтобы увидеть их список, достаточно ввести:
Get-Module
Также можно устанавливать дополнительные модули или писать собственные.
Доступные commands:
- Get-Module — вывести список модулей;
- Get-Command -Module <module-name> — отобразить все команды в модуле;
- Remove-Module <module-name> — удалить модуль.
Управление системными ресурсами
Скрипты, которые поддерживают функциональность:
- мониторинг дискового пространства с уведомлением системного администратора;
- очистка диска;
- удаление временных файлов;
- получение отчета о состоянии служб.
Для управления IT-инфраструктурой и инфраструктурой разработки используют службу настройки требуемого состояния — Desired State Configuration (DSC). Платформа содержит три элемента:
- конфигурации;
- ресурсы;
- локальный диспетчер конфигураций (LCM).
Чтобы увидеть встроенные ресурсы, необходимо ввести:
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-специалистов созданы библиотеки командлетов:
- Dynamics 365 Customer Engagement (on-premises) — онлайн-администрирование и развертывание сред с базами данных Microsoft Dataverse.
- Microsoft365 — автоматизация действий и задач, связанных с пользователем Win.
- MicrosoftAzure — включение компонентов Azure, сценарии настройки локальных шлюзов.
- Power Apps — автоматизация задач, связанных со средами и приложениями, для разработчиков и системных администраторов.
Нужно установить соответствующий модуль через 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 — подписка на события и мониторинг хода выполнения заданий.
Для анализа системы нужны логи (log). Базовые командлеты для взаимодействия с журналами событий:
- Get-EventLog — возвращает журнал событий или список журналов событий;
- Write-EventLog — записывает события в журнал;
- Get-WinEvent — возвращает журналы трассировки;
- New-EventLog — создает новый журнал или источник событий;
- Clear-EventLog — очищает журналы событий.
«Повершелл» может:
- отслеживать изменения файлов журнала в режиме реального времени;
- фильтровать записи по определенным ключевым словам;
- отправлять автоматические уведомления на адрес электронной почты или по другим контактам и так далее.
Нужную функциональность можно получить с помощью дополнительных скриптов и сценариев.
Оболочка Power Shell — не просто инструмент MS Windows. Сегодня его используют для решения задач, связанных с удаленными виртуальными машинами (управление облаком, CI/CD).