PowerShell — оболочка и язык команд Microsoft¶
PowerShell — оболочка командной строки и язык сценариев от корпорации Microsoft, работающая на платформах Windows, Linux и macOS. Основана на .NET-платформе, в отличие от классической Windows Command Prompt (cmd.exe), использует объектно-ориентированный подход: команды (cmdlets) возвращают объекты .NET, а не текстовые строки, что позволяет обрабатывать данные средствами фильтрации, сортировки и форматирования без промежуточного разбора текста.
¶История
Разработка PowerShell началась в 2002 году под руководством Джеффри Снайдера (Jeffrey Snover) в подразделении Windows Server. Первая публичная бета-версия, известная как Monad, была представлена в 2004 году; в 2006 году проект получил название Windows PowerShell 1.0 и вошёл в состав Windows Vista и Windows Server 2008.
Дальнейшее развитие:
| Версия | Год | Основные изменения |
|---|---|---|
| 1.0 | 2006 | Первый стабильный выпуск |
| 2.0 | 2009 | Скриптовый язык расширен, добавлена поддержка удалённого управления |
| 3.0 | 2012 | Дескрипторы, работа с REST-сервисами, улучшенная автоматизация |
| 4.0 | 2013 | Desired State Configuration (DSC) |
| 5.0 / 5.1 | 2015–2016 | Защита скриптов (Just Enough Administration), расширенные модули |
| 6.0 | 2018 | Открытый исходный код (GitHub), кроссплатформенность, переход на .NET Core |
| 7.x | 2019 — н. в. | Единая кроссплатформенная ветка PowerShell Core, поддержка Windows PowerShell 5.1 сохранена |
С 2016 года PowerShell является проектом с открытым исходным кодом и распространяется под лицензией MIT.
¶Основные понятия
- Cmdlet — базовая команда PowerShell, имеет вид
Глагол-Существительное(например,Get-Process,Set-ItemProperty). Каждый cmdlet реализует определённый сценарий работы с данными. - Пайплайн (pipeline) — передача объектов от одной команды к другой через символ
|. В отличие от текстовых пайплайнов UNIX-оболочек, здесь передаются полноценные объекты. - Сессия — экземпляр оболочки с загруженными модулями и переменными окружения.
- Модуль — набор cmdlets, функций и ресурсов, подключаемый к сессии командой
Import-Module. - Хранилище провайдеров — представление файловой системы, реестра Windows, сертификатов и других хранилищ в едином виде, что позволяет работать с ними одинаковыми командами (
Get-ChildItem,Set-Content).
¶Синтаксис и возможности
Скрипты PowerShell сохраняются с расширением .ps1. Язык поддерживает переменные с префиксом $, условные конструкции if/else, циклы foreach и while, обработку ошибок через try/catch/finally, а также создание собственных функций. Типизация мягкая, но присутствует: значения автоматически приводятся к нужным типам .NET.
Пример простого скрипта:
``powershell Get-Process | Where-Object { $_.CPU -gt 100 } | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU ``
Команда выбирает пять процессов с наибольшим потреблением процессорного времени.
¶Управление Windows
PowerShell является основным средством автоматизации администрирования Windows. С его помощью управляются Active Directory, службами Windows, реестром, файловыми системами, виртуализацией Hyper-V, облаком Azure. Модуль Active Directory предоставляет более 100 cmdlets для управления доменными объектами.
В Windows 10 и Windows 11 PowerShell предустановлен как Windows PowerShell 5.1 (на базе .NET Framework) и, начиная с Windows 11, — PowerShell 7 (PowerShell Core) как отдельный пакет.
¶Кроссплатформенность
С версии 6.0 PowerShell работает на Linux (Ubuntu, CentOS, Red Hat, Debian, SUSE) и macOS. Это позволяет использовать единый язык сценариев в гибридных средах, автоматизировать развёртывание приложений и управлять серверами разного типа. На Linux поддерживаются основные cmdlets для работы с файловой системой, процессами и сетью, однако часть Windows-специфичных возможностей (реестр, COM-объекты) недоступна.
¶PowerShell и безопасность
Из-за широкого распространения PowerShell активно используется в кибератаках: для выполнения вредоносного кода, скачивания файлов, обхода антивирусной защиты. В ответ Microsoft внедрила механизмы AppLocker, Constrained Language Mode, подпись скриптов и политики исполнения (Execution Policy). Существуют также сторонние решения для аудита и мониторинга PowerShell-активности, например, модули Script Block Logging и Module Logging, встроенные в Windows.
¶Альтернативы
- Bash и другие UNIX-оболочки — традиционные командные оболочки Linux/macOS, работающие с текстовыми потоками.
- cmd.exe — классическая оболочка Windows, уступающая PowerShell по возможностям автоматизации.
- Python — широко используется для скриптовой автоматизации, но не является оболочкой командной строки в строгом смысле.
¶Источники
- Документация Microsoft Learn: «PowerShell»
- Снайдер Д. «Windows PowerShell Cookbook»
- Снайдер Д. «Windows PowerShell in Action»
- Проект PowerShell на GitHub (github.com/PowerShell/PowerShell)
