PowerShell — оболочка и язык сценариев Microsoft¶
PowerShell — кроссплатформенная оболочка командной строки и язык сценариев, разработанный корпорацией Microsoft. Основана на платформе .NET и работает в средах Windows, Linux и macOS. Предназначена для администрирования систем, автоматизации рутинных задач и управления ресурсами локальных и удалённых компьютеров. В отличие от классической командной строки Windows (cmd.exe), PowerShell оперирует объектами .NET, а не текстовыми строками, что позволяет передавать данные между командами без потерь структуры.
¶История
Разработка PowerShell началась в 2002 году под руководством Джеффри Снайдера (Jeffrey Snover) в подразделении Windows Server. Первая публичная бета-версия (тогда под названием Monad) была представлена в 2006 году, официальный релиз PowerShell 1.0 состоялся в ноябре 2006 года как компонент Windows Server 2008 и Windows Vista.
Основные версии:
| Версия | Год | Ключевые изменения |
|---|---|---|
| 1.0 | 2006 | Первый релиз, базовые cmdlets |
| 2.0 | 2009 | Скриптовый язык, удалённое выполнение, Windows PowerShell ISE |
| 3.0 | 2012 | Сессии, работа с REST API, улучшенный парсинг |
| 4.0 | 2013 | Desired State Configuration (DSC) |
| 5.0 / 5.1 | 2016 | PowerShell Gallery, JEA, расширенные модули |
| 6.0 | 2018 | Открытый исходный код, кроссплатформенность (Windows, Linux, macOS) |
| 7.x | 2020 — н. в. | PowerShell 7 на .NET, параллельные конвейеры, улучшенная совместимость |
Начиная с версии 6.0 проект развивается как открытый исходный код на GitHub под лицензией MIT. Windows PowerShell 5.1 остаётся встроенным компонентом Windows 10 и Windows 11, тогда как PowerShell 7 устанавливается отдельно и сосуществует с ним.
¶Устройство и основные понятия
¶Cmdlets
Базовый элемент команд — cmdlet (произносится «командлет»). Это специализированные команды вида Verb-Noun (например, Get-Process, Set-ItemProperty, New-Item). Каждый cmdlet возвращает объект, который может быть передан следующей команде в конвейере (pipeline).
¶Конвейер
Конвейер передаёт объекты между cmdlets, а не текстовые строки. Это позволяет строить сложные цепочки обработки данных без промежуточного форматирования:
``powershell Get-Service | Where-Object { $_.Status -eq 'Running' } | Select-Object Name, DisplayName ``
¶Провайдеры и диски
PowerShell предоставляет единый доступ к различным хранилищам данных через провайдеры: файловая система, реестр Windows, переменные окружения, сертификаты, реестр IIS и другие. Все они отображаются в виде «дисков» (например, HKLM:\ для реестра, Cert:\ для сертификатов).
¶Скриптовый язык
Скрипты сохраняются в файлах с расширением .ps1. Язык поддерживает переменные (все начинаются со знака $), функции, циклы, обработку ошибок, модули и объектно-ориентированные конструкции .NET.
¶Система безопасности
По умолчанию на современных Windows-системах политика выполнения скриптов (Execution Policy) ограничивает запуск неподписанных скриптов. Политику можно менять (Set-ExecutionPolicy), но она не является полноценной защитой от вредоносного кода — скорее это инструмент предотвращения случайного запуска. Для защиты от нежелательного выполнения также используют AppLocker и Windows Defender Application Control.
¶Применение
- Администрирование Windows — управление пользователями, группами, реестром, службами, сетевыми настройками.
- Автоматизация DevOps — развёртывание конфигураций, управление Azure, AWS и другими облаками через специализированные модули (Az, AWS.Tools).
- Аудит и мониторинг — сбор логов, генерация отчётов, массовые операции над объектами Active Directory.
- Кроссплатформенное администрирование — управление Linux-серверами через SSH и удалённые сессии.
- Desired State Configuration — декларативное описание желаемого состояния системы и его применение.
¶PowerShell на Linux и macOS
Начиная с версии 6.0 PowerShell доступен на Linux (Ubuntu, CentOS, Red Hat, Debian, openSUSE) и macOS. Доступны большинство встроенных cmdlets, а также поддержка SSH-сессий для удалённого администрирования. На Linux-системах PowerShell устанавливается из репозиториев дистрибутивов или в виде пакета snap.
¶Ограничения
- Скрипты
.ps1не выполняются двойным щелчком в оболочке по умолчанию — файл открывается в редакторе, что снижает риск случайного запуска. - Синтаксис PowerShell существенно отличается от Bash, что требует времени на переучивание специалистов, привыкших к Unix-оболочкам.
- Некоторые модули (например, Active Directory) остаются эксклюзивными для Windows.
Источники:
- Microsoft Learn — документация по PowerShell
- Джеффри Снайдер, «Windows PowerShell 2.0: Технологии и решения»
- GitHub — репозиторий PowerShell (PowerShell/PowerShell)
- Материалы конференции Microsoft Ignite по PowerShell
