PowerShell
PowerShell — це кросплатформений shell, scripting language і automation framework від Microsoft для адміністрування систем, автоматизації задач, DevOps, CI/CD, роботи з Windows, Linux, macOS, Azure, Microsoft 365, API, файлами, процесами, сервісами й structured data.
PowerShell відрізняється від багатьох shell тим, що передає між командами не просто текст, а об’єкти.
Коротко: PowerShell — це shell для автоматизації. Його сила — cmdlets, objects pipeline, modules, remoting і тісна інтеграція з Microsoft-екосистемою.
Офіційна документація Microsoft описує PowerShell як product documentation для встановлення, використання, прикладів scripts, deployment, PowerShell Gallery і module reference. [1]
Головна ідея
Головна ідея PowerShell — автоматизувати рутинні адміністративні й інженерні задачі через зрозумілу командну мову.
PowerShell використовують для:
- адміністрування Windows;
- керування файлами й процесами;
- автоматизації серверів;
- CI/CD;
- Azure automation;
- Microsoft 365 administration;
- роботи з REST API;
- обробки JSON, CSV, XML;
- керування сервісами;
- налаштування систем;
- deployment scripts;
- DevOps tasks;
- звітів і audit;
- security automation.
Проста аналогія: PowerShell — це не просто командний рядок. Це пульт керування системою, де команди повертають структуровані об’єкти, а не “кашу” з тексту.
PowerShell і Windows PowerShell
Є дві важливі лінії:
- Windows PowerShell 5.1 — стара версія, вбудована у Windows, працює на .NET Framework.
- PowerShell 7+ — сучасна кросплатформена версія, працює на сучасному .NET і запускається як
pwsh.
PowerShell 7 можна встановлювати поруч із Windows PowerShell 5.1.
Microsoft Learn пояснює, що PowerShell 7 є cross-platform, open-source і встановлюється side-by-side з Windows PowerShell 5.1. [2]
Актуальна версія
Станом на травень 2026 року актуальна LTS-гілка — PowerShell 7.6 LTS.
Microsoft Lifecycle показує, що PowerShell 7.6 LTS стартував 18 березня 2026 року й підтримується до 14 листопада 2028 року. PowerShell 7.5 підтримується до 10 листопада 2026 року, а PowerShell 7.4 LTS — також до 10 листопада 2026 року. [3]
На GitHub Releases також вказано релізи PowerShell 7.6.1 і 7.5.6. [4]
Для документації: у production краще писати конкретно: PowerShell 7.6 LTS або Windows PowerShell 5.1. Поведінка модулів і сумісність можуть відрізнятися.
pwsh
Сучасний PowerShell запускається командою:
pwsh
Windows PowerShell зазвичай запускається як:
powershell.exe
Це важливо в scripts, CI/CD і документації.
Якщо написано powershell.exe, це часто означає Windows PowerShell 5.1.
Якщо написано pwsh, це PowerShell 7+.
Cmdlets
Cmdlet — основна команда PowerShell.
Cmdlets мають стиль:
Verb-Noun
Приклади:
Get-Process Get-Service Get-ChildItem Set-Location New-Item Remove-Item Invoke-RestMethod ConvertTo-Json
Такий стиль робить команди більш передбачуваними.
Get-Command
Get-Command допомагає знаходити команди.
Приклад:
Get-Command *Service*
Це покаже команди, пов’язані із сервісами.
Корисно для пошуку cmdlets, functions, aliases і applications.
Get-Help
Get-Help показує довідку.
Приклад:
Get-Help Get-Process Get-Help Get-Process -Examples Get-Help Get-Process -Full
PowerShell має сильну вбудовану help-систему.
Добра практика — читати help перед запуском незнайомої команди.
Objects pipeline
Головна особливість PowerShell — pipeline об’єктів.
У класичному shell команди часто передають текст.
У PowerShell команди передають .NET objects.
Приклад:
Get-Process | Where-Object CPU -gt 100 | Sort-Object CPU -Descending
Тут Get-Process повертає об’єкти процесів, а не просто текстову таблицю.
Чому це важливо: у PowerShell не потрібно парсити колонки тексту. Можна звертатися до властивостей об’єкта: Name, Id, CPU, Path, Status.
Where-Object
Where-Object фільтрує об’єкти.
Приклад:
Get-Service | Where-Object Status -eq "Running"
Скорочено:
Get-Service | ? Status -eq "Running"
У документації краще писати повну форму, бо вона зрозуміліша.
Select-Object
Select-Object вибирає properties.
Приклад:
Get-Process | Select-Object Name, Id, CPU
Також можна брати перші або останні записи:
Get-Process | Select-Object -First 10
Sort-Object
Sort-Object сортує.
Приклад:
Get-Process | Sort-Object CPU -Descending
Це корисно для quick diagnostics, reports і audit scripts.
ForEach-Object
ForEach-Object виконує дію для кожного об’єкта pipeline.
Приклад:
Get-ChildItem *.log | ForEach-Object {
Write-Host $_.FullName
}
$_ означає поточний об’єкт pipeline.
Variables
Змінні в PowerShell починаються з $.
Приклад:
$name = "PowerShell" $count = 10 $isEnabled = $true
PowerShell змінні можуть містити:
- strings;
- numbers;
- arrays;
- hashtables;
- objects;
- script blocks;
- credentials;
- command results.
Arrays
Масив:
$items = @("one", "two", "three")
Доступ:
$items[0]
Додавання:
$items += "four"
Для великих масивів часте += може бути повільним. Краще використовувати collections або pipeline.
Hashtables
Hashtable:
$config = @{
Environment = "Production"
Timeout = 30
Enabled = $true
}
Доступ:
$config["Environment"] $config.Timeout
Hashtables часто використовують для параметрів, конфігурації, JSON-подібних структур і splatting.
Splatting
Splatting дозволяє передавати параметри через hashtable.
Приклад:
$params = @{
Path = "C:\Temp\report.txt"
Encoding = "utf8"
}
Get-Content @params
Splatting робить довгі команди читабельнішими.
Strings
PowerShell має single-quoted і double-quoted strings.
Приклад:
$name = "Anna" "Hello, $name" 'Hello, $name'
Double quotes підставляють змінні.
Single quotes залишають текст як є.
Functions
Функція:
function Get-Greeting {
param(
[string]$Name
)
"Hello, $Name"
}
Виклик:
Get-Greeting -Name "Anna"
PowerShell functions можуть поводитися як cmdlets, якщо правильно описати parameters.
Advanced functions
Advanced function використовує [CmdletBinding()].
Приклад:
function Get-UserReport {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$UserName
)
Write-Verbose "Generating report for $UserName"
}
Advanced functions підтримують common parameters, наприклад:
- -Verbose;
- -Debug;
- -ErrorAction;
- -WhatIf;
- -Confirm.
Parameters
PowerShell має сильну систему parameters.
Приклад:
param(
[Parameter(Mandatory)]
[string]$Path,
[int]$Limit = 100,
[switch]$Force
)
Типи параметрів допомагають робити scripts надійнішими.
Switch parameters
[switch] — boolean-like параметр.
Приклад:
param(
[switch]$Force
)
if ($Force) {
"Force mode enabled"
}
Виклик:
.\script.ps1 -Force
Error handling
PowerShell має error handling через try/catch/finally.
Приклад:
try {
Get-Content -Path $Path -ErrorAction Stop
}
catch {
Write-Error "Cannot read file: $_"
}
finally {
Write-Verbose "Done"
}
Важливо: не всі errors за замовчуванням terminating. Для catch часто потрібно -ErrorAction Stop.
$ErrorActionPreference
$ErrorActionPreference визначає поведінку non-terminating errors.
Приклад:
$ErrorActionPreference = "Stop"
У production scripts це може допомогти не пропустити помилки.
Але треба розуміти наслідки: script може зупинитися там, де раніше продовжував роботу.
Write-Output, Write-Host, Write-Error
PowerShell має різні output streams.
Write-Output— output pipeline.Write-Host— вивід на екран.Write-Error— error stream.Write-Verbose— verbose stream.Write-Warning— warning.Write-Debug— debug.
Практична порада: не використовуйте Write-Host для даних, які мають піти далі в pipeline. Для даних використовуйте output, для повідомлень — verbose або information streams.
Modules
Module — пакет PowerShell-коду.
Модуль може містити:
- functions;
- cmdlets;
- aliases;
- variables;
- classes;
- formats;
- types;
- nested modules.
Команди:
Get-Module Import-Module Az Find-Module Pester Install-Module Pester
Modules допомагають організувати scripts у reusable components.
PowerShell Gallery
PowerShell Gallery — офіційний репозиторій PowerShell-модулів і scripts.
Документація PowerShell містить окремий розділ Deploy і PowerShell Gallery. [5]
Перед встановленням модуля потрібно перевіряти:
- автора;
- popularity;
- source repository;
- license;
- останнє оновлення;
- залежності;
- security;
- чи trusted repository.
Install-Module
Встановлення модуля:
Install-Module -Name Pester -Scope CurrentUser
Імпорт:
Import-Module Pester
Оновлення:
Update-Module -Name Pester
У корпоративному середовищі встановлення модулів може бути обмежене політиками.
PowerShell Remoting
PowerShell Remoting дозволяє виконувати команди на віддалених машинах.
Приклад:
Invoke-Command -ComputerName Server01 -ScriptBlock {
Get-Service
}
Remoting корисний для:
- адміністрування серверів;
- масових змін;
- audit;
- deployment;
- troubleshooting;
- Windows Server;
- hybrid environments.
Remoting потребує правильної безпеки, автентифікації й мережевих налаштувань.
Enter-PSSession
Інтерактивна remote session:
Enter-PSSession -ComputerName Server01
Це дозволяє працювати на віддаленій машині майже як локально.
Вихід:
Exit-PSSession
Invoke-Command
Invoke-Command виконує script block локально або віддалено.
Приклад для кількох серверів:
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {
Get-Process
}
Це корисно для паралельного адміністрування.
Jobs
PowerShell jobs дозволяють виконувати задачі у фоні.
Приклад:
$job = Start-Job -ScriptBlock {
Get-Process
}
Receive-Job $job