PowerShell
Оболочка командной строки и язык сценариев от Microsoft, где по конвейеру передаются не строки текста, а объекты .NET.
Что такое PowerShell
PowerShell — оболочка командной строки и язык сценариев, разработанный Microsoft для автоматизации администрирования. Главное отличие от CMD и Bash: по конвейеру передаётся не текст, а объекты .NET с полями и методами. Не нужно вырезать колонку из вывода через grep и awk — вы просто обращаетесь к свойству.
Важно про платформу: Windows PowerShell (версия 5.1) — часть Windows, работает только на ней и построен на .NET Framework. PowerShell 7 (раньше назывался PowerShell Core) — отдельный open-source продукт на .NET, ставится вручную и работает на Windows, Linux и macOS. Обе версии могут стоять рядом: powershell.exe — старая, pwsh — новая.
Объектный конвейер
# Пять процессов, жрущих больше всего памяти
Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5 Name, WorkingSet
# Остановить все процессы с именем chrome
Get-Process -Name chrome | Stop-Process -Force
# Службы, которые должны стартовать автоматически, но лежат
Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' }
$_ — текущий объект в конвейере. WorkingSet — реальное свойство объекта, а не позиция в текстовой строке, поэтому скрипт не сломается от смены локали или ширины колонок.
Команды называются Verb-Noun
Каждый командлет (cmdlet) — это Глагол-Существительное: Get-ChildItem, New-Item, Set-Location, Remove-Item. Список разрешённых глаголов фиксирован (Get-Verb), поэтому имя незнакомой команды часто угадывается. Для привычки есть алиасы: ls, cd, cat, rm работают, но в скриптах лучше писать полные имена.
PowerShell vs CMD vs Bash
| CMD | PowerShell | Bash | |
|---|---|---|---|
| Конвейер | текст | объекты .NET | текст |
| Платформы | Windows | Windows, Linux, macOS (PS 7) | Linux, macOS, WSL |
| Скрипты | .bat / .cmd | .ps1 |
.sh |
| Работа с JSON | нет | ConvertFrom-Json |
через jq |
| Удалённый доступ | — | WinRM, SSH | SSH |
Политика выполнения скриптов
Свежая Windows по умолчанию не запускает .ps1 — это защита, а не баг. Разрешить локальные скрипты:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
RemoteSigned — локальные скрипты работают, скачанные требуют подписи. Совет «поставь Unrestricted» из интернета снимает защиту целиком.
Где это нужно на сервере
Windows Server администрируют преимущественно через PowerShell: веб-сервер IIS, Active Directory, Hyper-V и терминальные серверы управляются командлетами. Remoting позволяет выполнять код на десятках машин сразу:
Invoke-Command -ComputerName srv01, srv02 -ScriptBlock { Get-Service -Name W3SVC }
Для смешанного парка Windows + Linux то же самое обычно делают через Ansible, у которого есть отдельный транспорт для WinRM.
Связанные термины
Готовы запустить GPU-задачу?
Запустить GPU-сервер