Первые версии Linux- и Unix-дистрибутивов традиционно управлялись при помощи командной строки. Несмотря на то, что со временем были выпущены различные графические оболочки, такие как GNOME, KDE, Cinnamon, XFCE, Linux стал прочно ассоциироваться с управлением через терминал. В то же время операционные системы семейства Windows ассоциируются именно с использованием графического интерфейса. Однако, существует способ, при котором можно управлять ОС Windows из командной оболочки, — с помощью инструмента PowerShell. Сегодня мы рассмотрим синтаксис и основы работы с PowerShell.
Что такое PowerShell?
PowerShell — это мощная кросс-платформенная среда автоматизации и управления конфигурациями, разработанная корпорацией Microsoft. PowerShell объединяет в себе командную оболочку и язык сценариев, что позволяет выполнять административные задачи, автоматизировать процессы и управлять системой Windows.
История развития PowerShell: от Monad до современной версии
История PowerShell берет свои корни в начале 2000-х годов, когда Microsoft решила создать более мощную и продвинутую командную оболочку для Windows, взамен устаревшей cmd.
В 2002 году Microsoft предложила концепцию объектно-ориентированной оболочки, которая должна была заменить командный процессор Windows. Так родился проект Monad. Среди ключевых особенностей Monad можно выделить следующие:
- Использование объектов вместо простого текстового ввода/вывода, в отличие от Unix-оболочек.
- Единый подход к управлению локальными и удаленными системами.
- Глубокая интеграция с .NET Framework.
- Конвейерная (pipeline) обработка данных с передачей объектов, а не строк.
Впервые широкой публике Monad был представлен в 2003 году, а в 2005 году вышла первая публичная бета-версия. Однако после выхода операционной системы Windows Vista Microsoft решила сменить название c Monad на привычное нам сегодня PowerShell.
В ноябре 2006 года Microsoft выпустила Windows PowerShell под версией 1.0, которая включала в себя полную интеграцию с .NET Framework, поддержку Cmdlets (небольшие команды, работающие с объектами) и интеграцию с WMI (Windows Management Instrumentation). Однако PowerShell версии 1.0 еще не был предустановлен в Windows и поставлялся как отдельный компонент.
В 2009 году была выпущена версия 2.0, в которую были интегрированы такие функции, как удаленное выполнение команд и фоновое выполнение задач, добавлена поддержка модулей для расширения функционала и улучшен обработчик ошибок. Именно с версией 2.0 PowerShell был интегрирован в дистрибутивы Windows, начиная с Windows 7 и Windows Server 2008 R2.
С тех пор было выпущено еще 6 основных релизов:
- PowerShell 2.0 (2009)
- PowerShell 3.0 (2012)
- PowerShell 4.0 (2013)
- PowerShell 5.0 (2016)
- PowerShell Core 6.0 (2016–2020)
- PowerShell 7 (2020)
На момент написания статьи актуальной является версия 7.5.0.
Архитектура и принципы работы PowerShell
Архитектура PowerShell
Архитектура PowerShell основана на следующих компонентах:
- Командная оболочка
Представляет собой интерактивную командную строку, где пользователь может вводить команды для управления операционной системой и ее объектами.
- Язык сценариев
PowerShell использует свой собственный язык сценариев, который сочетает в себе возможности командной строки и полноценного языка программирования. Язык сценариев поддерживает переменные, циклы, условия, функции и модули.
- Платформа .NET
PowerShell построен на модульной платформе .NET, что позволяет ему взаимодействовать с объектами .NET и использовать их методы и свойства.
- Модули и провайдеры
Модули — это пакеты, содержащие команды и функции. Позволяют расширять функциональность PowerShell. Провайдеры — это компоненты, которые предоставляют доступ к данным в различных хранилищах (например, файловая система, реестр, переменные среды).
Принципы работы PowerShell
Принцип работы PowerShell основан на объектно-ориентированном подходе — в отличие от традиционных командных оболочек, которые работают с текстом, PowerShell работает с объектами. Каждая команда возвращает объект, который содержит свойства и методы. Это позволяет легко обрабатывать данные, передавать их между командами и использовать в скриптах.
Одной из мощных особенностей PowerShell является возможность передачи вывода одной команды (объектов) непосредственно в другую с помощью символа |. Благодаря этому можно строить цепочки команд, где каждая команда обрабатывает или преобразует объекты, которые передаются дальше по цепочке.
Отличия PowerShell от командной строки (CMD)
Несмотря на схожесть, PowerShell и командная строка (CMD) — это два разных инструмента. PowerShell значительно мощнее и функциональнее обычной командной строки Windows. Основные отличия заключаются в следующем:
- Функционал
CMD поддерживает минимальный и ограниченный набор команд. Также с помощью CMD можно запускать скрипты с расширением .bat. В свою очередь, PowerShell является объектно-ориентированной оболочкой и скриптовым языком и основан на модульной платформе .NET.
С помощью PowerShell можно выполнять как простые действия, связанные, например, с файлами и пакетами, так и сложные задачи управления реестром, службами, процессами и облачными ресурсами.
- Принцип работы
CMD работает с текстовыми командами (cd, dir, copy, del и т. д.) и обрабатывает строки с командами дальнейшей передачей в стандартный вывод.
PowerShell работает с объектами .NET, которые называются командлетами (cmdlets, например Get-Process, Get-Service, Stop-Process и т. д.), что позволяет передавать сложные структуры данных между командами без необходимости парсинга текста.
- Автоматизация и запуск скриптов
С помощью CMD можно запускать скрипты с расширением .bat, однако они ограничены в возможностях.
При помощи PowerShell можно запускать скрипты с расширением .ps1, которые могут выполнять сложные операции, а также работать с API, базами данных и облачными сервисами.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Установка PowerShell на Windows
Несмотря на то, что командная строка (cmd) и Powershell уже предустановлены во всех последних версиях Windows, PowerShell можно установить отдельно.
Отдельная установка может понадобиться, если предустановленная версия отличается от последней доступной актуальной версии.
Установить PowerShell в ОС Windows можно тремя разными способами:
- Через Microsoft Store (только для ОС Windows 10 и Windows 11).
- При помощи установочного файла с расширением
.msi. - С помощью утилиты
winget(wingetдолжен быть установлен отдельно).
Данный метод установки поддерживается только на Windows 10 и Windows 11. Процесс установки для двух дистрибутивов идентичен.
- Запускаем приложение Microsoft Store и в поиске вводим «powershell». Существует 2 версии PowerShell — Обычная (стабильная) и Preview. Версия Preview является тестовой и может содержать ошибки, однако она позволяет ознакомиться с новым функционалом, который еще не доступен в обычной (стабильной) версии.
Мы установим обычную стабильную версию:

- Для установки нажимаем на кнопку «Получить» и дожидаемся завершения установочного процесса:

Для запуска введите «powershell» в поиске Windows.
Также стоит обратить внимание, что при установке старая версия PowerShell не будет удалена. Чтобы отличить новую установленную версию от старой, достаточно посмотреть на имя приложения — новая версия называется PowerShell, а старая версия (она же предустановленная) называется Windows PowerShell:

Основы работы с PowerShell
Рассмотрим синтаксис PowerShell и работу с командлетами (cmdlets).
Командлеты (cmdlets)
В основу PowerShell заложена работа с командлетами.
Командлеты — это встроенные команды, используемые для выполнения различных задач, таких как управление файлами, процессами, службами, пользователями и сетевыми настройками.
Синтаксис командлетов следующий:
Например:
Get-Process— Получить список процессовGet-ChildItem -Path C:\Users— Отобразить файлы и директории в каталогеC:\Users.
При использовании командлетов в ответ они возвращают не просто текст, а объекты платформы .NET. Это предоставляет мощные возможности для обработки данных.
Переменные
Как и в любом другом языке программирования или командной оболочке, переменные в PowerShell предназначены для хранения различных объектов: строк, чисел, объектов, массивов, хэш-таблиц. Переменные обозначаются знаком $.
Рассмотрим переменные на практике. Объявим две переменные: одну с именем myvar1 и содержащую строковой тип данных, и вторую — с именем myvar2 и содержащую числовой тип данных:

Для вывода значения переменной используется оператор Write-Output:

PowerShell автоматически определяет тип данных, но при желании его можно задавать явно:

Помимо хранения строковых и числовых данных, в переменных можно хранить массивы и хэш-таблицы (они же словари).
Создадим переменную var-array, в которой будет храниться массив цифр от 1 до 5:
Чтобы вывести значения объектов, хранящихся в массиве, необходимо написать имя переменной и в квадратных скобках указать порядковый номер объекта. Как и в других языках программирования, счет объектов начинается с 0, поэтому для вывода цифры 1 необходимо ввести 0:

Создадим другую переменную с именем var-hash, в которой будет храниться хэш-таблица или словарь данных. Структура данных имеет вид: Ключ: Значение.
Для вывода значений необходимо указать имя переменной и ключ, например:

Также с переменными можно производить различные арифметические операции, например, сложение:

Операторы
В PowerShell присутствуют следующие операторы:
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Операторы массивов
Рассмотрим их на практике.
Арифметические операторы
Используются для математических вычислений. В таблице ниже перечислены все арифметические операторы, доступные в PowerShell:
|
Оператор |
Описание |
|
+ |
Сложение |
|
- |
Вычитание |
|
* |
Умножение |
|
/ |
Деление |
|
% |
Остаток от деления |

Операторы сравнения
Используются для проверки условий. В таблице ниже перечислены все операторы сравнения, доступные в PowerShell:
|
Оператор |
Описание |
|
-eq |
Равно |
|
-ne |
Не равно |
|
-gt |
Больше |
|
-ge |
Больше или равно |
|
-lt |
Меньше |
|
-le |
Меньше или равно |

Логические операторы
Применяются в условиях. В таблице ниже перечислены все логические операторы, доступные в PowerShell:
|
Оператор |
Описание |
|
-and |
Логическое И |
|
-or |
Логическое ИЛИ |
|
-not или ! |
Логическое НЕ |

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

Циклы
Циклы используются для повторного выполнения блока кода, пока выполняется определенное условие. В PowerShell есть несколько видов циклов:
for— классический цикл с итератором.foreach— перебирает элементы массива или коллекции.while— выполняется, пока условие истинно.do-while— выполняется хотя бы один раз, затем проверяет условие.do-until— выполняется, пока условие ложно.
Цикл for
Используется, когда известно количество итераций.

Цикл while
Выполняется, пока условие остается True (пока условие истинно).

Цикл foreach
Используется для перебора элементов массива.

Цикл do-while
Гарантирует хотя бы одну итерацию (сначала выполняет, потом проверяет).

Цикл do-until
Выполняется до тех пор, пока условие не станет True.

Функции
Функции в PowerShell позволяют объединять блоки кода и многократно их использовать. Они могут принимать параметры и возвращать значения.
Функции создаются с помощью ключевого слова function:

Функция с параметром

Функция с несколькими параметрами

Работа с файлами и директориями
PowerShell отлично подходит для работы с файлами и директориями. Рассмотрим некоторые полезные команды для работы в ОС Windows.
- Получение списка файлов

- Создание папки

- Создание файла

- Запись в файл

- Чтение файла

- Копирование файла

- Перемещение файла
Для выполнения команды ниже PowerShell необходимо запустить с правами администратора, иначе при выполнении будет ошибка.

- Удаление файла

Работа с процессами и службами
- Получение списка процессов

- Завершение процесса
Например, завершим процесс «Блокнот»:

- Получение списка служб

- Запуск службы
Для примера запустим службу wuauserv:

- Остановка службы

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

Скрипт выше проверяет, запущен ли процесс notepad («Блокнот»). Если процесс не найден, то запускает его и проверяет его статус каждые 10 секунд.
Удаление старых файлов
Удаление старых и неактуальных файлов может освободить место на диске. В примере ниже скрипт удаляет файлы, которые старше одного дня, в директории C:\TestFolder:

Запуск процесса по расписанию
Настроим автоматический запуск программы «Блокнот» каждый день в 9:00 утра:

Безопасность в PowerShell
PowerShell обладает встроенным функционалом по обеспечению безопасности. Рассмотрим его более подробно.
Политики выполнения (Execution Policies)
По умолчанию PowerShell блокирует выполнение скриптов. Чтобы проверить текущую политику, необходимо использовать команду:

Типы политик встроенных в PowerShell:
Restricted— Запрещено выполнять скрипты (по умолчанию).AllSigned— Разрешает только подписанные скрипты.RemoteSigned— Локальные скрипты выполняются, загруженные из сети должны быть подписаны.Unrestricted— Можно запускать любые скрипты, но при запуске загруженных файлов появляется предупреждение.Bypass— Полностью отключает защиту (НЕ рекомендуется).
Для изменения политики требуются права администратора. Команда для изменения следующая:

Подписание скриптов
Чтобы предотвратить запуск вредоносного кода в скриптах, в PowerShell присутствует возможность подписания скриптов.
Заранее создаем тестовый скрипт в директории C:\TestFolder со следующим содержимым:
Сохраняем файл с именем и расширением script.ps1.
Далее подписываем скрипт:
- Создаем самоподписанный сертификат:

- Выведем данные сертификата. В частности, нам необходим его Thumbprint (отпечаток), который пригодится далее.

- Теперь необходимо добавить сгенерированный сертификат в папку корневых сертификатов. Открываем «Диспетчер сертификатов» через PowerShell:

- Переходим в раздел «Personal» (сертификаты пользователя), кликаем по нужному сертификату правой кнопкой мыши и выбираем пункт «Export» (Экспорт):

- В открывшемся меню нажимаем на кнопку «Next». Выбираем параметр «Не экспортировать закрытый ключ»:

Выбираем формат Base-64:

Нажимаем «Next».
Дальше нажимаем на кнопку «Browse» и выбираем директорию, куда будет сохранен сертификат.
Нажимаем «Finish», чтобы завершить экспорт.
- Открываем сертификат и нажимаем на кнопку «Install Certificate...»:

Выбираем пункт для текущего пользователя:

Для установки в конкретное хранилище сертификатов выбираем пункт «Place all certificates in the following store»:

Выбираем «Trusted Root Certification Authorities»:

Завершаем установку сертификата нажатием на кнопку «Finish».
- При появлении окна с предупреждением нажимаем «Yes»:

- Подписываем скрипт
script.ps1, размещенный в директорииC:\TestFolder.Для этого вводим ранее полученный отпечаток после опцииThumbprint -eq.

- Проверяем, что скрипт был успешно подписан:

Подпись был успешно создана.
- Запустим скрипт:

Теперь попробуем запустить неподписанный скрипт при использовании политики AllSigned, разрешающей запуск только подписанных скриптов.
Меняем политику на AllSigned:
Создаем новый скрипт и попытаемся его запустить:

Система вернула ошибку, так как скрипт не подписан.
Надежные VDS/VPS для ваших проектов
477 ₽/мес
657 ₽/мес
Заключение
Сегодня мы познакомились с командной оболочкой PowerShell и ее синтаксисом. PowerShell — это мощный инструмент автоматизации в операционных системах Windows, который упрощает работу со множеством задач от создания резервных копий до планировщика задач и работы с файлами.
