PowerShell — кроссплатформенная командная оболочка и язык сценариев от Microsoft, основанный на .NET. В отличие от Bash, который оперирует текстовыми потоками, PowerShell работает с объектами .NET: каждая команда (cmdlet) возвращает структурированный объект, который можно передать следующей команде в пайплайне. PowerShell Core (6+) и PowerShell 7+ работают кроссплатформенно на Windows, Linux и macOS.
Как работает
PowerShell-скрипт (.ps1) — текстовый файл с последовательностью командлетов (глагол-существительное: Get-Process, Set-Service, Restart-Computer).
Типичные задачи автоматизации Windows Server:
- Active Directory — создание и изменение пользователей и групп:
New-ADUser,Add-ADGroupMember. - Управление сервисами — мониторинг и перезапуск:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Start-Service. - Файловая система — очистка логов, копирование, архивирование по критерию даты.
- Сетевая диагностика —
Test-NetConnection,Resolve-DnsName. - IIS — управление пулами приложений через
Import-Module WebAdministration. - Azure / Microsoft 365 — через модули Az и ExchangeOnlineManagement.
Политика выполнения (Execution Policy) управляет тем, какие скрипты могут запускаться: Restricted (по умолчанию — скрипты заблокированы), RemoteSigned (локальные выполняются, внешние требуют подписи), Unrestricted. Для сервера обычно устанавливают RemoteSigned: Set-ExecutionPolicy RemoteSigned -Scope LocalMachine.
Планирование запуска — через Task Scheduler (New-ScheduledTask) или systemd timer на Linux.
История
PowerShell разработан Джеффри Сноувером (Jeffrey Snover) в Microsoft и впервые выпущен в 2006 году как Windows PowerShell 1.0 для Windows XP SP2 / Server 2003. PowerShell 2.0 (2009) добавил remoting (WinRM). PowerShell 5.1 (2016) — последняя Windows-only версия, входит в Windows 10/Server 2016. PowerShell Core 6.0 (2018) — кроссплатформенный ребрендинг на базе .NET Core. PowerShell 7.x (2020+) — активно поддерживаемая ветка, работает на .NET 6/7/8.
На что обращать внимание
PowerShell Remoting (WinRM, порт 5985/5986) позволяет выполнять командлеты на удалённых серверах через Invoke-Command или Enter-PSSession. Для безопасности настраивайте WinRM только для HTTPS (5986), ограничивайте ACL. При работе с VPS Windows PowerShell — основной инструмент для администрирования без GUI. Для хранения секретов используйте модуль SecretManagement + SecretStore, а не хардкод паролей в скрипте. Активная аутентификация в удалённых сессиях может потребовать CredSSP или Kerberos, что нужно учитывать при настройке Kerberos-делегирования.
Типичные ошибки при работе с PowerShell
- Hardcode паролей в скриптах: используйте
Get-CredentialилиRead-Host -AsSecureString. - Запуск скриптов с
Set-ExecutionPolicy Unrestrictedна продакшне — риск выполнения вредоносных скриптов. - Игнорирование error handling: без
try/catchскрипт продолжает выполнение при ошибках.
PowerShell vs Bash vs Python для автоматизации хостинга
| Параметр | PowerShell | Bash | Python |
|---|---|---|---|
| Основная ОС | Windows (кросс-платформ с 7.0) | Linux/Mac | кросс-платформ |
| API Windows | нативный | через вызовы | через win32api |
| Объектная модель | объекты .NET | текстовые потоки | объекты Python |
| Hosting применение | Windows VPS, IIS | Linux VPS | универсально |
PowerShell Core 7.x работает на Ubuntu Server и RHEL через apt install powershell. Для администрирования Windows Server на VPS PowerShell незаменим: управление IIS, Active Directory, WinRM, Hyper-V. PSRemoting позволяет выполнять команды на удалённых Windows-серверах аналогично SSH.