PowerShell Core
PowerShell Core — это кроссплатформенная версия оболочки командной строки и языка сценариев PowerShell, разработанная корпорацией Microsoft. В отличие от классической Windows PowerShell, построенной на платформе .NET Framework и работающей только в операционной системе Windows, PowerShell Core основана на .NET Core (позднее — .NET) и поддерживает операционные системы Windows, macOS и большинство дистрибутивов Linux. PowerShell Core распространяется как проект с открытым исходным кодом (под лицензией MIT) и является преемником Windows PowerShell, начиная с версии 6.0.
История
Предпосылки создания
Классическая Windows PowerShell, впервые выпущенная в 2006 году, была тесно интегрирована с Windows и .NET Framework. Она предоставляла мощные средства автоматизации для администраторов Windows, но была недоступна на других платформах. С ростом популярности облачных технологий и контейнеризации, а также с переходом Microsoft на политику «Microsoft ❤ Linux», возникла необходимость в кроссплатформенном инструменте управления.
Анонс и разработка
В 2015 году Microsoft объявила о переводе PowerShell в открытый исходный код и о создании кроссплатформенной версии на базе .NET Core. Репозиторий проекта был размещён на GitHub. Первая публичная предварительная версия PowerShell Core 6.0 стала доступна в 2016 году.
Релизы
- PowerShell Core 6.0 (январь 2018): первый стабильный релиз. Поддержка Windows, macOS, Linux (Ubuntu, CentOS, Red Hat, Debian, Fedora, openSUSE). Включал большинство командлетов из Windows PowerShell, но с ограничениями, связанными с отсутствием некоторых Windows-специфичных компонентов.
- PowerShell Core 6.1 (сентябрь 2018): улучшена совместимость, добавлены новые командлеты, исправлены ошибки.
- PowerShell Core 6.2 (март 2019): последний релиз ветки 6.x. Основное внимание уделено исправлению ошибок и повышению производительности.
- PowerShell 7.0 (март 2020): смена нумерации (пропуск версии 7.x для Windows PowerShell). Основан на .NET Core 3.1. Включил множество командлетов из Windows PowerShell 5.1, обеспечив почти полную обратную совместимость, за исключением модулей, зависящих от Windows. Получил статус LTS (Long-Term Support).
- PowerShell 7.1 (ноябрь 2020): основан на .NET 5. Включал экспериментальные возможности, такие как параллельное выполнение с помощью
ForEach-Object -Parallel. - PowerShell 7.2 (ноябрь 2021): основан на .NET 6 (LTS). Введены новые функции, включая улучшенную поддержку контейнеров и обновлённый механизм обновления.
- PowerShell 7.3 (ноябрь 2022): основан на .NET 7. Добавлена поддержка
PSResourceGetи улучшенная работа с модулями. - PowerShell 7.4 (ноябрь 2023): основан на .NET 8 (LTS). Включает множество улучшений производительности и исправлений.
- PowerShell 7.5 (январь 2025): основан на .NET 9. Продолжает развитие кроссплатформенной оболочки.
Архитектура и устройство
Отличия от Windows PowerShell
Основное архитектурное отличие — базовая платформа. Windows PowerShell использует .NET Framework (версии 4.x), который является компонентом Windows и не поддерживается на других ОС. PowerShell Core использует .NET (Core), который является кроссплатформенной средой выполнения. Это привело к следующим изменениям:
- Отсутствие некоторых Windows-специфичных модулей: модули, зависящие от Windows API (например,
ActiveDirectory,GroupPolicy,DnsClient), по умолчанию недоступны в PowerShell Core на Linux/macOS, но могут быть установлены на Windows. - Изменения в командлетах: некоторые командлеты были изменены для кроссплатформенной работы. Например, командлеты для работы с файловой системой (
Get-ChildItem,Set-Location) работают с разными разделителями путей. - Поддержка SSH: PowerShell Core поддерживает удалённое управление через SSH (Secure Shell) наряду с традиционным WinRM (Windows Remote Management).
Компоненты
PowerShell Core состоит из:
- Ядро PowerShell (PowerShell Engine): интерпретатор команд, парсер, рантайм.
- Командлеты (Cmdlets): встроенные команды, написанные на C#. В PowerShell Core их более 2000.
- Провайдеры (Providers): компоненты, предоставляющие доступ к различным хранилищам данных (файловая система, реестр Windows, сертификаты) как к дискам.
- Модули (Modules): пакеты, содержащие командлеты, функции, переменные и другие ресурсы. Модули могут быть как встроенными, так и сторонними.
- Язык сценариев: язык, основанный на синтаксисе C# и командной строке Unix. Поддерживает объектно-ориентированное программирование, функции, циклы, условные операторы, обработку ошибок и работу с .NET-объектами.
Работа с объектами
Ключевая особенность PowerShell — работа с объектами .NET, а не с текстовыми строками, как в традиционных оболочках (bash, cmd). Команды возвращают объекты, которые можно передавать по конвейеру (pipe) другим командам. Это позволяет выполнять сложные манипуляции с данными без необходимости парсинга текста.
Установка и развертывание
PowerShell Core распространяется несколькими способами:
- Установщики для платформ: для Windows — MSI-пакет, для macOS — PKG-пакет, для Linux — пакеты в форматах
.deb(Debian, Ubuntu) и.rpm(Red Hat, CentOS, Fedora). - Пакетные менеджеры:
winget(Windows),brew(macOS),apt(Debian/Ubuntu),yum/dnf(Red Hat/Fedora),snap(Linux). - Контейнеры: официальные образы Docker для Windows и Linux.
- Архивы: бинарные архивы для ручного развертывания.
- Магазин Microsoft Store: для Windows 10/11.
Применение
Администрирование систем
PowerShell Core используется для автоматизации задач администрирования на всех поддерживаемых платформах:
- Управление файлами и папками: создание, копирование, перемещение, удаление.
- Управление процессами и службами: запуск, остановка, мониторинг.
- Управление пользователями и группами: создание, изменение, удаление (на Windows — через Active Directory, на Linux — через локальные учетные записи).
- Сетевое администрирование: проверка соединения, настройка сетевых интерфейсов, работа с DNS.
- Управление конфигурациями: с помощью модуля
PSDesiredStateConfiguration(DSC) для декларативного управления состоянием систем.
Автоматизация в облачных средах
PowerShell Core является основным инструментом для управления облачными сервисами Microsoft Azure (через модуль Az), а также поддерживает AWS (через модуль AWSPowerShell.NetCore) и Google Cloud (через модуль GoogleCloud). Он широко используется в DevOps-процессах для развертывания инфраструктуры (Infrastructure as Code), управления контейнерами (Docker, Kubernetes) и автоматизации CI/CD-пайплайнов (в Azure DevOps, GitHub Actions, Jenkins).
Разработка и тестирование
Разработчики используют PowerShell Core для:
- Сборки и тестирования проектов: интеграция с MSBuild, dotnet CLI, CMake.
- Управления зависимостями: работа с NuGet, npm, pip.
- Создания сценариев для тестирования: модуль
Pesterдля написания unit-тестов на PowerShell. - Работы с API: командлеты
Invoke-RestMethodиInvoke-WebRequestдля взаимодействия с RESTful-сервисами.
Критика и ограничения
Несмотря на преимущества, PowerShell Core имеет ряд критических замечаний:
- Неполная совместимость: многие модули Windows PowerShell, особенно сторонние, не работают в PowerShell Core без адаптации. Это связано с различиями в платформах .NET.
- Производительность: на некоторых задачах PowerShell Core может уступать в скорости нативным утилитам Unix (например,
grep,awk,sed), особенно при обработке больших объёмов текстовых данных. - Сложность синтаксиса: для пользователей, привыкших к традиционным оболочкам (bash, zsh), синтаксис PowerShell может показаться громоздким и непривычным.
- Отсутствие некоторых функций: в версиях для Linux/macOS отсутствуют некоторые командлеты, связанные с Windows-специфичными функциями (например, управление реестром, службами Windows, WMI).
Интересные факты
- PowerShell Core — первый продукт Microsoft, который был полностью разработан в открытом репозитории на GitHub.
- Версия 7.0 получила статус LTS, что означает долгосрочную поддержку (5 лет) для корпоративных пользователей.
- В PowerShell Core можно использовать как команды в стиле Unix (например,
ls,cat,ps), так и традиционные командлеты PowerShell (например,Get-ChildItem,Get-Content,Get-Process). Это реализовано через псевдонимы (aliases). - PowerShell Core поддерживает работу с контейнерами Docker, включая запуск внутри контейнера и управление контейнерами из оболочки.
Источники
- Официальная документация Microsoft по PowerShell (learn.microsoft.com/powershell)
- Репозиторий PowerShell на GitHub (github.com/PowerShell/PowerShell)
- «PowerShell Core: The Next Generation» — книга Марка Миносси (Mark Minasi)
- «Learn PowerShell in a Month of Lunches» — книга Джеймса Петти (James Petty) и Трэвиса Плэнка (Travis Plunk)
- Статья «PowerShell Core 6.0: What’s New and Why It Matters» на сайте 4sysops
- Документация .NET Core и .NET (learn.microsoft.com/dotnet)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →