
Рассматривается объектно-ориентированная оболочка командной строки Microsoft PowerShell и ее возможности для автоматизации повседневных задач пользователей и администраторов. Описываются основные элементы и конструкции языка PowerShell, инструменты для написания и отладки сценариев. Приведена информация о работе с файловой системой и структурированными данными (CSV, JSON). Рассмотрены приемы управления процессами, службами и серверами автоматизации. Обсуждаются вопросы взаимодействия с веб-ресурсами при помощи HTTP-запросов. Даны примеры построения GUI для сценариев PowerShell с помощью Windows Forms и Windows Presentation Foundation. Представлены кроссплатформенные возможности PowerShell в macOS и Linux.
Во втором издании детально описаны кроссплатформенные возможности PowerShell и использование этой технологии в Linux.
Для начинающих системных администраторов и опытных пользователей
- Работа с оболочкой Windows PowerShell в Windows Terminal
- Продвинутая настройка командной строки
- Описание языка PowerShell
- Работа с файловой системой, структурированными данными и веб-ресурсами
- Управление процессами, службами и серверами автоматизации
- Построение GUI для сценариев Windows PowerShell
- Кроссплатформенные возможности PowerShell в macOS и Linux
Книгу “Современный PowerShell. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Предисловие…………………………………………………………………………………………… 11
Для кого предназначена эта книга?…………………………………………………………………………………………. 12
Структура книги………………………………………………………………………………………………………………………… 12
Принятые в книге соглашения…………………………………………………………………………………………………… 14
Часть I. Знакомимся с PowerShell…………………………………………. 17
Глава 1. Командная строка и автоматизация работы…………………………….. 19
Зачем нужна командная строка и скрипты?……………………………………………………………………………. 20
Особенности языков сценариев для операционной системы…………………………………………………. 20
Инструменты автоматизации в UNIX-подобных системах……………………………………………………. 22
Особенности автоматизации в Windows………………………………………………………………………………….. 23
Командный интерпретатор cmd.exe…………………………………………………………………………………. 25
Сервер сценариев Windows Script Host…………………………………………………………………………….. 26
Оболочка и среда выполнения сценариев PowerShell…………………………………………………….. 30
Итоги…………………………………………………………………………………………………………………………………………… 34
Глава 2. Терминал, консоль и командная оболочка……………………………….. 35
Терминалы в Windows……………………………………………………………………………………………………………….. 37
Стандартная консоль Windows…………………………………………………………………………………………. 38
Windows Terminal……………………………………………………………………………………………………………….. 39
Установка и запуск…………………………………………………………………………………………………… 40
Работа с вкладками…………………………………………………………………………………………………… 41
Разделение окна на несколько панелей………………………………………………………………….. 42
Палитра команд………………………………………………………………………………………………………… 43
Запуск терминала с аргументами командной строки……………………………………………. 43
Итоги…………………………………………………………………………………………………………………………………………… 44
Глава 3. Первые шаги в PowerShell. Основные понятия………………………… 45
Запуск оболочки PowerShell……………………………………………………………………………………………………… 45
Работают ли знакомые команды?…………………………………………………………………………………………….. 46
Вычисление выражений……………………………………………………………………………………………………………. 48
Типы команд PowerShell…………………………………………………………………………………………………………….. 49
Командлеты………………………………………………………………………………………………………………………… 50
Имена и структура командлетов……………………………………………………………………………… 50
Общие параметры командлетов………………………………………………………………………………. 53
Поиск командлетов…………………………………………………………………………………………………… 54
Функции………………………………………………………………………………………………………………………………. 55
Сценарии…………………………………………………………………………………………………………………………….. 56
Внешние исполняемые файлы…………………………………………………………………………………………… 56
Псевдонимы команд…………………………………………………………………………………………………………………… 56
Диски PowerShell………………………………………………………………………………………………………………………… 60
Провайдеры PowerShell……………………………………………………………………………………………………… 61
Навигация по дискам PowerShell………………………………………………………………………………………. 62
Просмотр содержимого дисков и каталогов……………………………………………………………………. 64
Создание дисков…………………………………………………………………………………………………………………. 65
Итоги…………………………………………………………………………………………………………………………………………… 66
Глава 4. Работа в оболочке PowerShell……………………………………………………. 68
Редактирование в командной строке PowerShell…………………………………………………………………….. 68
Автоматическое завершение команд……………………………………………………………………………………….. 71
Ввод команды в нескольких строках……………………………………………………………………………………….. 73
Справочная система PowerShell……………………………………………………………………………………………….. 73
Получение справки о командлетах………………………………………………………………………………….. 74
Справочная информация, не связанная с командлетами……………………………………………….. 79
История команд в сеансе работы……………………………………………………………………………………………… 81
Протоколирование действий в сеансе работы………………………………………………………………………… 83
Настройка оформления командной строки PowerShell…………………………………………………………… 85
Заголовок командного окна………………………………………………………………………………………………. 86
Приглашение командной строки………………………………………………………………………………………. 88
Настройка пользовательских профилей………………………………………………………………………………….. 89
Политики выполнения сценариев…………………………………………………………………………………………….. 91
Итоги…………………………………………………………………………………………………………………………………………… 93
Глава 5. Работа с объектами………………………………………………………………….. 94
Конвейеризация объектов в PowerShell……………………………………………………………………………………. 94
Просмотр структуры объектов (командлет Get-Member)……………………………………………………….. 96
Фильтрация объектов (командлет Where-Object)……………………………………………………………………. 98
Использование блока кода………………………………………………………………………………………………… 98
Использование оператора сравнения…………………………………………………………………………….. 100
Сортировка объектов (командлет Sort-Object)……………………………………………………………………… 101
Выделение объектов и свойств (командлет Select-Object)…………………………………………………… 103
Выполнение произвольных действий над объектами в конвейере
(командлет ForEach-Object)……………………………………………………………………………………………………. 106
Группировка объектов (командлет Group-Object)………………………………………………………………… 107
Измерение характеристик объектов (командлет Measure-Object)………………………………………. 108
Обращение к статическим методам и полям…………………………………………………………………………. 109
Итоги…………………………………………………………………………………………………………………………………………. 111
Глава 6. Управление выводом команд…………………………………………………. 112
Форматирование выводимой информации……………………………………………………………………………. 113
Перенаправление выводимой информации…………………………………………………………………………… 115
Сохранение данных в файл…………………………………………………………………………………………….. 116
Печать данных…………………………………………………………………………………………………………………. 117
Подавление вывода………………………………………………………………………………………………………….. 118
Табличный вывод данных в графическое окно…………………………………………………………….. 118
Вывод в формате HTML………………………………………………………………………………………………………….. 120
Дополнительные потоки в PowerShell…………………………………………………………………………………….. 123
Перенаправление в файл…………………………………………………………………………………………………. 124
Перенаправление в выходной поток Output………………………………………………………………….. 125
Итоги…………………………………………………………………………………………………………………………………………. 126
Часть II. PowerShell как язык программирования………… 127
Глава 7. Переменные, массивы и хеш-таблицы……………………………………. 129
Числовые и символьные литералы…………………………………………………………………………………………. 129
Числовые литералы…………………………………………………………………………………………………………. 129
Символьные строки………………………………………………………………………………………………………….. 130
Строки в одинарных и двойных кавычках…………………………………………………………… 130
Строки типа here-string……………………………………………………………………………………………. 132
Переменные PowerShell……………………………………………………………………………………………………………. 133
Переменные оболочки PowerShell…………………………………………………………………………………… 134
Пользовательские переменные……………………………………………………………………………………….. 136
Типы переменных……………………………………………………………………………………………………. 136
Приведение типов……………………………………………………………………………………………………. 138
Дополнительные атрибуты переменных………………………………………………………………. 139
Константы……………………………………………………………………………………………………………….. 139
Переменные среды Windows……………………………………………………………………………………………. 140
Массивы в PowerShell………………………………………………………………………………………………………………. 141
Обращение к элементам массива……………………………………………………………………………………. 142
Операции с массивом………………………………………………………………………………………………………. 143
Увеличение длины массива. Объединение массивов…………………………………………… 144
Удаление элементов……………………………………………………………………………………………….. 145
Действие оператора присваивания……………………………………………………………………….. 145
Сохранение в массиве вывода командлетов………………………………………………………… 146
Удаление массива…………………………………………………………………………………………………… 146
Хеш-таблицы (ассоциативные массивы)……………………………………………………………………………….. 147
Операции с хеш-таблицей……………………………………………………………………………………………….. 148
Итоги…………………………………………………………………………………………………………………………………………. 150
Глава 8. Операторы и управляющие инструкции………………………………… 152
Арифметические операторы…………………………………………………………………………………………………… 152
Оператор сложения………………………………………………………………………………………………………….. 153
Оператор умножения……………………………………………………………………………………………………….. 155
Операторы вычитания, деления и остатка от деления…………………………………………………. 156
Операторы присваивания……………………………………………………………………………………………………….. 157
Операторы сравнения……………………………………………………………………………………………………………… 158
Сравнения с использованием массивов…………………………………………………………………………. 159
Операторы проверки на соответствие шаблону…………………………………………………………… 160
Шаблоны с подстановочными символами…………………………………………………………… 160
Шаблоны с регулярными выражениями……………………………………………………………….. 161
Логические операторы…………………………………………………………………………………………………….. 162
Управляющие инструкции языка PowerShell…………………………………………………………………………. 163
Инструкция If … Elseif … Else…………………………………………………………………………………………… 163
Цикл While………………………………………………………………………………………………………………………… 164
Цикл Do … While……………………………………………………………………………………………………………….. 165
Цикл For……………………………………………………………………………………………………………………………. 165
Цикл Foreach…………………………………………………………………………………………………………………….. 166
Инструкция Foreach вне конвейера команд…………………………………………………………. 166
Инструкция Foreach внутри конвейера команд…………………………………………………… 167
Вопросы производительности……………………………………………………………………………….. 168
Метки циклов, инструкции Break и Continue…………………………………………………………………. 168
Инструкция Switch……………………………………………………………………………………………………………. 169
Виды проверок внутри Switch……………………………………………………………………………….. 169
Проверка массива значений…………………………………………………………………………………… 172
Итоги…………………………………………………………………………………………………………………………………………. 174
Глава 9. Функции, фильтры, сценарии и модули…………………………………. 175
Функции в PowerShell……………………………………………………………………………………………………………….. 175
Обработка аргументов с помощью переменной $args…………………………………………………. 176
Формальные параметры функций………………………………………………………………………………….. 178
Позиционные и именованные параметры…………………………………………………………….. 178
Ограничение параметров по типу…………………………………………………………………………. 180
Значения по умолчанию для параметров…………………………………………………………….. 181
Дополнительные атрибуты и валидация параметров…………………………………………. 182
Параметры-переключатели…………………………………………………………………………………… 184
Описание параметров в операторе Param()…………………………………………………………. 185
Передача параметров с помощью сплаттинга переменных………………………………………… 186
Возвращаемые значения…………………………………………………………………………………………………. 187
Функции внутри конвейера команд………………………………………………………………………………… 189
Функции в качестве командлетов. Расширенные функции…………………………………………… 190
Три фазы работы функции в конвейере………………………………………………………………… 190
Доступ к общим параметрам и дополнительным потокам.
Расширенные функции……………………………………………………………………………………………. 192
Сценарии PowerShell………………………………………………………………………………………………………………… 194
Создание сценария…………………………………………………………………………………………………………… 194
Запуск сценария из PowerShell………………………………………………………………………………………… 195
Запуск сценария из внешней программы……………………………………………………………………….. 196
Передача аргументов в сценарии…………………………………………………………………………………… 197
Выход из сценариев. Код возврата………………………………………………………………………………… 198
Области видимости функций………………………………………………………………………………………………….. 198
Глобальная область видимости……………………………………………………………………………………… 199
Оператор Dot-Source……………………………………………………………………………………………………….. 199
Области видимости переменных……………………………………………………………………………………………. 200
Модули PowerShell…………………………………………………………………………………………………………………… 202
Модули-сценарии…………………………………………………………………………………………………………….. 202
Репозиторий сценариев PowerShell Gallery…………………………………………………………………….. 204
Итоги…………………………………………………………………………………………………………………………………………. 207
Глава 10. Обработка ошибок при выполнении команд………………………… 209
Объект ErrorRecord и поток ошибок………………………………………………………………………………………. 210
Сохранение объектов, соответствующих ошибкам……………………………………………………………… 213
Мониторинг возникновения ошибок………………………………………………………………………………………. 216
Режимы обработок ошибок…………………………………………………………………………………………………….. 217
Обработка критических ошибок (исключений)…………………………………………………………………….. 218
Инструкция Trap………………………………………………………………………………………………………………. 219
Инструкция Try/Catch/Finally…………………………………………………………………………………………. 221
Итоги…………………………………………………………………………………………………………………………………………. 221
Часть III. Автоматизируем рутину…………………………………………. 223
Глава 11. Работа с файловой системой и оболочкой Windows………………. 225
Навигация в файловой системе………………………………………………………………………………………………. 225
Получение списка файлов и каталогов………………………………………………………………………………….. 225
Определение размера каталогов……………………………………………………………………………………………. 229
Создание файлов и каталогов………………………………………………………………………………………………… 229
Создание нескольких файлов………………………………………………………………………………………….. 230
Пересоздание файла………………………………………………………………………………………………………… 231
Создание файла в несуществующем каталоге………………………………………………………………. 231
Чтение содержимого файлов…………………………………………………………………………………………………… 232
Запись файлов………………………………………………………………………………………………………………………….. 233
Копирование файлов и каталогов………………………………………………………………………………………….. 234
Копирование каталога с файлами………………………………………………………………………………….. 235
Копирование вложенных каталогов………………………………………………………………………………. 235
Копирование файлов по маске……………………………………………………………………………………….. 236
Конкатенация файлов……………………………………………………………………………………………………… 237
Переименование и перемещение файлов и каталогов………………………………………………………….. 238
Переименование группы файлов…………………………………………………………………………………….. 238
Перемещение файлов……………………………………………………………………………………………………….. 238
Удаление файлов и каталогов………………………………………………………………………………………………… 239
Поиск текста в файлах…………………………………………………………………………………………………………….. 240
Замена текста в файлах…………………………………………………………………………………………………………… 242
Работа с файлами-ярлыками………………………………………………………………………………………………….. 243
Доступ к COM-объектам из PowerShell…………………………………………………………………………… 243
Объект WScript.Shell………………………………………………………………………………………………………… 244
Создание ярлыка на рабочем столе……………………………………………………………………………….. 245
Удаление некорректных ярлыков…………………………………………………………………………………… 246
Итоги…………………………………………………………………………………………………………………………………………. 247
Глава 12. Обработка структурированных данных……………………………….. 248
Работа с данными в формате CSV………………………………………………………………………………………….. 248
Чтение из CSV-файла……………………………………………………………………………………………………….. 248
Запись в CSV-файл…………………………………………………………………………………………………………… 251
Обработка данных без обращения к файлу…………………………………………………………………… 252
Обработка данных в JSON-формате………………………………………………………………………………………. 253
Итоги…………………………………………………………………………………………………………………………………………. 255
Глава 13. Управление процессами, службами и серверами автоматизации 256
Управление процессами………………………………………………………………………………………………………….. 256
Просмотр списка процессов……………………………………………………………………………………………. 257
Определение библиотек, используемых процессом……………………………………………………… 260
Остановка процессов……………………………………………………………………………………………………….. 261
Запуск процессов……………………………………………………………………………………………………………… 262
Изменение приоритетов выполнения процесса…………………………………………………………….. 264
Завершение не отвечающих процессов…………………………………………………………………………. 264
Управление службами…………………………………………………………………………………………………………….. 264
Просмотр списка служб…………………………………………………………………………………………………… 265
Остановка и приостановка служб………………………………………………………………………………….. 266
Запуск и перезапуск служб……………………………………………………………………………………………… 267
Изменение параметров службы………………………………………………………………………………………. 268
Работа с серверами автоматизации……………………………………………………………………………………….. 269
Объектные модели Microsoft Word и Excel…………………………………………………………………….. 269
Взаимодействие с Microsoft Word…………………………………………………………………………………… 271
Взаимодействие с Microsoft Excel…………………………………………………………………………………… 271
Итоги…………………………………………………………………………………………………………………………………………. 272
Глава 14. HTTP-запросы к веб-ресурсам………………………………………………. 273
Командлет Invoke-WebRequest……………………………………………………………………………………………….. 273
Анализ HTML-страниц……………………………………………………………………………………………………. 273
Содержимое ответа от сервера и HTTP-заголовки……………………………………………… 275
Сохранение веб-ресурсов………………………………………………………………………………………. 277
Поиск HTML-элементов на странице……………………………………………………………………. 278
Выполнение POST-запросов……………………………………………………………………………………………. 280
Командлет Invoke-RestMethod………………………………………………………………………………………………… 282
Итоги…………………………………………………………………………………………………………………………………………. 284
Часть IV. Пишем сценарии……………………………………………………….. 285
Глава 15. Разработка сценариев PowerShell………………………………………….. 287
Переход от команд к сценариям…………………………………………………………………………………………….. 287
Среды для разработки сценариев………………………………………………………………………………………….. 288
PowerShell ISE…………………………………………………………………………………………………………………… 288
Запуск сценариев и фрагментов…………………………………………………………………………….. 288
Справочная система……………………………………………………………………………………………….. 290
Редактирование текста…………………………………………………………………………………………… 292
Отладка сценариев…………………………………………………………………………………………………. 295
Visual Studio Code…………………………………………………………………………………………………………….. 297
Другие редакторы и среды разработки…………………………………………………………………………. 302
Рекомендации по разработке сценариев……………………………………………………………………………….. 303
Общая структура сценария…………………………………………………………………………………………….. 303
Имена и псевдонимы команд и параметров…………………………………………………………………… 305
Расширенные и базовые функции…………………………………………………………………………………… 306
Комментарии……………………………………………………………………………………………………………………. 307
Справка, основанная на комментариях…………………………………………………………………………. 307
Расположение и форматирование кода…………………………………………………………………………. 309
Регистр символов в именах…………………………………………………………………………………….. 310
Скобки в коде…………………………………………………………………………………………………………… 310
Отступы, пробелы и пустые строки………………………………………………………………………. 311
Точка с запятой как разделитель строк и значений…………………………………………….. 312
Обратный апостроф для многострочных команд………………………………………………… 312
Производительность сценариев и продуктивность разработчика……………………………………… 313
Пример: статистика по объектам файловой системы (cmd и PowerShell)…………………… 314
Итоги…………………………………………………………………………………………………………………………………………. 315
Глава 16. Отладка функций и сценариев……………………………………………… 316
Вывод диагностических сообщений………………………………………………………………………………………. 316
Командлет Set-PSDebug………………………………………………………………………………………………………….. 318
Трассировка выполнения команд…………………………………………………………………………………… 319
Пошаговое выполнение команд……………………………………………………………………………………… 321
Вложенная командная строка………………………………………………………………………………………… 322
Управление точками останова (командлеты *-PSBreakPoint)……………………………………………. 324
Создание точки останова для сценария………………………………………………………………………… 325
Создание точки останова для команды…………………………………………………………………………. 329
Создание точки останова для переменной……………………………………………………………………. 329
Просмотр точек останова……………………………………………………………………………………………….. 330
Удаление точек останова………………………………………………………………………………………………… 332
Итоги…………………………………………………………………………………………………………………………………………. 333
Глава 17. Графический интерфейс для сценариев………………………………… 334
Построение GUI с помощью Windows Forms…………………………………………………………………………. 334
Построение GUI с помощью Windows Presentation Foundation……………………………………………. 338
Итоги…………………………………………………………………………………………………………………………………………. 344
Часть V. Выходим за пределы мира Windows…………………….. 345
Глава 18. Работа командных оболочек в Windows и Linux……………………. 347
Универсальные механизмы командной строки…………………………………………………………………….. 348
Исполняемые файлы в Windows……………………………………………………………………………………………… 349
Поиск файла, соответствующего команде…………………………………………………………………….. 350
Исполняемые файлы в Linux…………………………………………………………………………………………………… 351
Поиск файла, соответствующего команде…………………………………………………………………….. 352
Стандартные команды в Windows и Linux…………………………………………………………………………….. 353
Итоги…………………………………………………………………………………………………………………………………………. 355
Глава 19. История и традиции интерфейса командной строки
в Windows и Linux…………………………………………………………………………………. 356
Мейнфреймы и команды в системах пакетной обработки…………………………………………………… 357
Командная оболочка в UNIX и Linux…………………………………………………………………………………….. 359
Мини-компьютеры и UNIX……………………………………………………………………………………………… 360
Распространение UNIX……………………………………………………………………………………………………. 363
Первые свободные UNIX-подобные системы………………………………………………………………… 364
Появление и распространение Linux……………………………………………………………………………… 365
Командная оболочка в Microsoft DOS и Windows………………………………………………………………… 367
CP/M — первая операционная система для микрокомпьютеров………………………………… 367
Командный интерпретатор CCP…………………………………………………………………………………….. 369
Микрокомпьютеры, язык BASIC и фирма Microsoft……………………………………………………… 370
IBM, Microsoft и операционная система DOS……………………………………………………………….. 372
Командный интерпретатор command.com……………………………………………………………………. 375
Windows на базе MS-DOS………………………………………………………………………………………………… 376
Windows NT и командный интерпретатор cmd.exe………………………………………………………. 377
Культура командной строки в Linux и Windows…………………………………………………………………… 380
Итоги…………………………………………………………………………………………………………………………………………. 381
Глава 20. Linux-оболочки в Windows. Кросс-платформенный PowerShell 382
Linux внутри Windows……………………………………………………………………………………………………………… 382
UNIX от Microsoft — операционная система Xenix……………………………………………………… 382
Поддержка POSIX внутри Windows NT………………………………………………………………………….. 383
«Microsoft любит Linux» — новый девиз Microsoft……………………………………………………….. 384
Подсистема WSL — Linux, встроенный в Windows………………………………………………………. 384
Инициализация WSL и установка дистрибутива Linux………………………………………. 384
Запуск командной оболочки Linux и отдельных команд……………………………………. 385
Кросс-платформенная оболочка PowerShell в Linux…………………………………………………………….. 387
Установка и запуск оболочки…………………………………………………………………………………………. 387
Отличия от Windows PowerShell………………………………………………………………………………………. 389
PowerShell — универсальный инструмент автоматизации?………………………………………………… 391
Работа в режиме интерактивной командной строки…………………………………………………….. 391
PowerShell как среда выполнения сценариев…………………………………………………………………. 393
Итоги…………………………………………………………………………………………………………………………………………. 394
Что дальше? PowerShell для профессионалов……………………………………….. 395
Приложение 1. Что означают эти символы?…………………………………………. 397
Приложение 2. Дополнительная настройка командной строки…………….. 401
Модуль PSReadLine…………………………………………………………………………………………………………………. 401
Интеграция с Git: модуль posh-git…………………………………………………………………………………………… 404
Оформление приглашения командной строки: модуль Oh My Posh…………………………………… 407
Установка шрифтов Powerline…………………………………………………………………………………………. 407
Установка модуля Oh My Posh……………………………………………………………………………………….. 408
Оформление списков файлов и каталогов: модуль Terminal-Icons……………………………………… 411
Предметный указатель…………………………………………………………………………. 413
Попов Андрей Владимирович, специалист ИТ-поддержки и преподаватель с 25-летним стажем, автор нескольких книг по технологиям сценариев Windows, в том числе «Введение в Windows PowerShell» о первой версии оболочки и среды выполнения Microsoft PowerShell.
