3. PowerShell основы
Почему PowerShell — это другой уровень?
Заголовок раздела «Почему 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 — найти команды»Get-Command # все доступные командыGet-Command -Verb Get # все команды с глаголом GetGet-Command -Noun Process # все команды с существительным ProcessGet-Command *network* # поиск по имениGet-Command -Module PSReadLine # команды конкретного модуля
# Краткая формаgcm *network*Get-Help — документация
Заголовок раздела «Get-Help — документация»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-Processman Get-ProcessАлиасы — короткие имена
Заголовок раздела «Алиасы — короткие имена»PowerShell имеет множество алиасов для совместимости:
# Алиасы для привычных командls # = Get-ChildItemdir # = Get-ChildItemcd # = Set-Locationpwd # = Get-Locationcp # = Copy-Itemmv # = Move-Itemrm # = Remove-Itemcat # = Get-Contentecho # = Write-Outputps # = Get-Processkill # = Stop-Processman # = Get-Helpcls # = Clear-Host
# Посмотреть все алиасыGet-AliasGet-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 MethodsSelect-Object — выбрать свойства
Заголовок раздела «Select-Object — выбрать свойства»# Показать только нужные колонки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 -UniqueWhere-Object — фильтрация
Заголовок раздела «Where-Object — фильтрация»# Фильтровать объекты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 }Sort-Object — сортировка
Заголовок раздела «Sort-Object — сортировка»Get-Process | Sort-Object CPU # по CPU (возрастание)Get-Process | Sort-Object CPU -Descending # убываниеGet-Process | Sort-Object -Property @{E="CPU"; Descending=$true}, NameFormat-* — форматирование вывода
Заголовок раздела «Format-* — форматирование вывода»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 процессов по CPUGet-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 SilentlyContinueif ($chrome) { $chrome | Get-Member -MemberType Properties | Select-Object Name, MemberType}
# 6. Поиск по справкеGet-Help *process* | Select-Object NamePowerShell — это мощный язык программирования плюс командная строка. Инвестиции в его изучение окупятся в любой Windows-среде!