Перейти до вмісту

PowerShell

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні
Версія від 20:13, 8 травня 2026, створена R (обговорення | внесок) (Створена сторінка: {{SEO|title=PowerShell — shell, scripting language, automation, objects pipeline, modules, remoting, DevOps і адміністрування Windows/Linux/macOS|description=PowerShell — Wiki-стаття про кросплатформений shell і scripting language від Microsoft для автоматизації, адміністрування, DevOps, CI/CD, Azure, Microsoft 365, Windows Server, Linux/macOS, objects pipeline, cmdlets, module...)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)

SEO title: PowerShell — shell, scripting language, automation, objects pipeline, modules, remoting, DevOps і адміністрування Windows/Linux/macOS SEO description: PowerShell — Wiki-стаття про кросплатформений shell і scripting language від Microsoft для автоматизації, адміністрування, DevOps, CI/CD, Azure, Microsoft 365, Windows Server, Linux/macOS, objects pipeline, cmdlets, modules, remoting, jobs, error handling, security, execution policy, secrets, logging, testing, Pester, PowerShell Gallery, PowerShell 7.6 LTS і Windows PowerShell 5.1. SEO keywords: PowerShell, PowerShell 7.6, PowerShell 7, Windows PowerShell, PowerShell Core, Microsoft PowerShell, PowerShell scripting, PowerShell automation, cmdlets, objects pipeline, PowerShell modules, PowerShell remoting, PowerShell Gallery, Pester, PowerShell DSC, Azure PowerShell, Microsoft Graph PowerShell, Windows administration, DevOps PowerShell, CI/CD PowerShell, PowerShell security, execution policy, PowerShell scripts, pwsh Alternative to: ручне адміністрування серверів; batch scripts; cmd.exe; VBScript; ручні операції в Windows GUI; повторювані DevOps-задачі без автоматизації; shell без object pipeline; адміністрування Microsoft 365 без скриптів; ручне керування файлами, сервісами й реєстром


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-модулів і 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