Linux & Administration

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.

Связанные термины

  • CMD / командная строка — предшественник PowerShell в Windows
  • BAT-файлы — старый формат скриптов Windows
  • Bash — аналог PowerShell в мире Linux
  • CLI — общее понятие интерфейса командной строки
  • SSH — транспорт для удалённых сессий PowerShell 7
  • Ansible — автоматизация парка Windows- и Linux-машин

Готовы запустить GPU-задачу?

Запустить GPU-сервер