Перейти к содержимому

3. PowerShell основы

Главное отличие PowerShell от CMD и bash: он работает не со строками, а с объектами .NET. Когда PowerShell выполняет команду, он возвращает объект со свойствами и методами, а не просто текст.

Это означает, что ты можешь делать вещи, которые в bash потребовали бы сложного парсинга текста.

Глаголы-существительные: система именования cmdlets

Заголовок раздела «Глаголы-существительные: система именования cmdlets»

PowerShell-команды называются cmdlets (читается «команд-леты») и следуют строгому соглашению: Глагол-Существительное.

Основные глаголы:

  • Get — получить данные
  • Set — установить/изменить
  • New — создать
  • Remove — удалить
  • Start — запустить
  • Stop — остановить
  • Invoke — выполнить
Окно терминала
Get-Process # список процессов
Get-Service # список служб
Get-ChildItem # список файлов
Set-Location # сменить директорию
New-Item # создать файл/директорию
Remove-Item # удалить
Start-Process # запустить программу
Stop-Process # остановить процесс
Окно терминала
Get-Command # все доступные команды
Get-Command -Verb Get # все команды с глаголом Get
Get-Command -Noun Process # все команды с существительным Process
Get-Command *network* # поиск по имени
Get-Command -Module PSReadLine # команды конкретного модуля
# Краткая форма
gcm *network*
Окно терминала
Get-Help Get-Process # справка по команде
Get-Help Get-Process -Examples # только примеры
Get-Help Get-Process -Detailed # подробная справка
Get-Help Get-Process -Online # открыть в браузере
Get-Help about_Variables # концептуальная справка
# Обновить справку (нужны права админа)
Update-Help
# Краткая форма
help Get-Process
man Get-Process

PowerShell имеет множество алиасов для совместимости:

Окно терминала
# Алиасы для привычных команд
ls # = Get-ChildItem
dir # = Get-ChildItem
cd # = Set-Location
pwd # = Get-Location
cp # = Copy-Item
mv # = Move-Item
rm # = Remove-Item
cat # = Get-Content
echo # = Write-Output
ps # = Get-Process
kill # = Stop-Process
man # = Get-Help
cls # = Clear-Host
# Посмотреть все алиасы
Get-Alias
Get-Alias ls # что означает алиас
Get-Alias -Definition Get-ChildItem # алиасы для команды
Окно терминала
# Получить объект
$process = Get-Process -Name notepad
# Свойства объекта
$process.Id # PID
$process.Name # имя
$process.CPU # использование CPU
$process.WorkingSet64 # память в байтах
# Все свойства и методы
$process | Get-Member
$process | Get-Member -MemberType Properties
$process | Get-Member -MemberType Methods
Окно терминала
# Показать только нужные колонки
Get-Process | Select-Object Name, CPU, Id
# Первые N объектов
Get-Process | Select-Object -First 5
# Последние N объектов
Get-Process | Select-Object -Last 5
# Уникальные значения
Get-Process | Select-Object -ExpandProperty Name | Sort-Object -Unique
Окно терминала
# Фильтровать объекты
Get-Process | Where-Object { $_.CPU -gt 10 }
Get-Process | Where-Object Name -eq "chrome"
Get-Service | Where-Object Status -eq "Running"
Get-ChildItem | Where-Object Length -gt 1MB
# Краткая форма
Get-Process | ? { $_.CPU -gt 10 }
Get-Service | ? { $_.Status -eq "Stopped" }
# Сложные условия
Get-Process | Where-Object { $_.CPU -gt 1 -and $_.WorkingSet64 -gt 100MB }
Окно терминала
Get-Process | Sort-Object CPU # по CPU (возрастание)
Get-Process | Sort-Object CPU -Descending # убывание
Get-Process | Sort-Object -Property @{E="CPU"; Descending=$true}, Name
Окно терминала
Get-Process | Format-Table Name, CPU, Id # таблица
Get-Process | Format-Table -AutoSize # авто-ширина
Get-Process | Format-List Name, CPU # список
Get-Process | Format-Wide Name # широкий формат
Get-Process | Out-GridView # GUI таблица!
Окно терминала
# Переменные начинаются с $
$name = "PowerShell"
$age = 18
$isAdmin = $true
# Строковая интерполяция (в двойных кавычках)
Write-Output "Привет, $name!"
Write-Output "Возраст: $($age + 1)" # выражение в $()
# Одинарные кавычки — без интерполяции
Write-Output 'Это $name — не переменная'
# Типы
$number = 42
$float = 3.14
$array = @(1, 2, 3, 4, 5)
$hash = @{ key = "value"; name = "John" }
Окно терминала
# 1. Посмотри версию PowerShell
$PSVersionTable
# 2. Найди все Running сервисы
Get-Service | Where-Object Status -eq "Running" | Select-Object Name, Status
# 3. Топ-5 процессов по CPU
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 | Format-Table Name, CPU, Id
# 4. Найди все команды для работы с файлами
Get-Command -Noun Item
# 5. Изучи объект процесса
$chrome = Get-Process chrome -ErrorAction SilentlyContinue
if ($chrome) {
$chrome | Get-Member -MemberType Properties | Select-Object Name, MemberType
}
# 6. Поиск по справке
Get-Help *process* | Select-Object Name

PowerShell — это мощный язык программирования плюс командная строка. Инвестиции в его изучение окупятся в любой Windows-среде!