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

PowerShell: відмінності між версіями

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні
Створена сторінка: {{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...
 
Немає опису редагування
 
Рядок 583: Рядок 583:


Receive-Job $job
Receive-Job $job
</pre>
Jobs корисні для довгих операцій, але в сучасних сценаріях також використовують runspaces, ThreadJob або CI/CD runners.
== Scheduled jobs і Task Scheduler ==
PowerShell scripts часто запускають за розкладом.
На Windows можна використовувати:
* Task Scheduler;
* Scheduled Jobs;
* Scheduled Tasks;
* Azure Automation;
* CI/CD schedules.
Для scheduled scripts важливо логувати результат і помилки, бо користувач не бачить інтерактивний вивід.
== Working with files ==
PowerShell має cmdlets для файлів:
<pre>
Get-ChildItem
Get-Content
Set-Content
Add-Content
Copy-Item
Move-Item
Remove-Item
New-Item
Test-Path
</pre>
Приклад:
<pre>
Get-ChildItem -Path C:\Logs -Filter *.log |
    Where-Object LastWriteTime -lt (Get-Date).AddDays(-30)
</pre>
== CSV ==
PowerShell дуже зручний для CSV.
Приклад:
<pre>
$data = Import-Csv .\users.csv
$data | Where-Object Department -eq "Sales"
$data | Export-Csv .\sales-users.csv -NoTypeInformation
</pre>
CSV часто використовується для звітів, імпорту/експорту й адміністрування.
== JSON ==
PowerShell добре працює з JSON.
Приклад:
<pre>
$response = Invoke-RestMethod -Uri "https://api.example.com/users"
$response.users | Select-Object id, name
</pre>
Конвертація:
<pre>
$data | ConvertTo-Json -Depth 10
$json | ConvertFrom-Json
</pre>
PowerShell GitHub repository описує PowerShell як оптимізований для structured data, зокрема JSON, CSV, XML, REST APIs і object models. <ref>https://github.com/PowerShell/PowerShell</ref>
== XML ==
PowerShell може працювати з XML.
Приклад:
<pre>
[xml]$xml = Get-Content .\config.xml
$xml.configuration.appSettings.add
</pre>
XML досі часто зустрічається в Windows, legacy systems і enterprise configs.
== REST API ==
PowerShell зручний для REST API.
Команди:
<pre>
Invoke-RestMethod
Invoke-WebRequest
</pre>
Приклад:
<pre>
$body = @{
    name = "Test"
    active = $true
} | ConvertTo-Json
Invoke-RestMethod `
    -Uri "https://api.example.com/items" `
    -Method Post `
    -Body $body `
    -ContentType "application/json"
</pre>
REST API + PowerShell — популярна пара для інтеграцій і automation.
== Azure PowerShell ==
'''Azure PowerShell''' — модулі для керування Azure.
Основний модуль:
<pre>
Az
</pre>
Приклади:
<pre>
Connect-AzAccount
Get-AzResourceGroup
Get-AzVM
</pre>
Azure PowerShell використовується для:
* resource management;
* automation;
* deployment;
* audit;
* reporting;
* governance.
== Microsoft Graph PowerShell ==
Microsoft Graph PowerShell SDK використовується для Microsoft 365 і Graph API.
Сценарії:
* users;
* groups;
* devices;
* Teams;
* SharePoint;
* Entra ID;
* reports;
* permissions;
* automation.
PowerShell дуже поширений у Microsoft 365 administration.
== Active Directory ==
Windows PowerShell часто використовується для Active Directory.
Приклади:
<pre>
Get-ADUser
New-ADUser
Set-ADUser
Get-ADGroupMember
</pre>
AD cmdlets зазвичай доступні через RSAT/ActiveDirectory module.
У сучасних cloud environments часто використовують Microsoft Graph і Entra ID modules.
== Desired State Configuration ==
'''PowerShell DSC''' — Desired State Configuration.
Ідея: описати бажаний стан системи, а не вручну виконувати всі кроки.
DSC використовується для:
* configuration management;
* server baseline;
* compliance;
* repeatable environments;
* infrastructure automation.
DSC має окрему історію версій і сценаріїв, тому для production потрібно перевіряти актуальну документацію під конкретну платформу.
== Pester ==
'''Pester''' — популярний testing framework для PowerShell.
Приклад:
<pre>
Describe "Calculator" {
    It "adds numbers" {
        Add-Numbers 2 3 | Should -Be 5
    }
}
</pre>
Pester корисний для:
* unit tests;
* script tests;
* module tests;
* infrastructure tests;
* CI/CD;
* regression tests.
Для серйозної автоматизації PowerShell scripts теж потрібно тестувати.
== Script Analyzer ==
'''PSScriptAnalyzer''' — статичний аналізатор PowerShell-коду.
Він допомагає знаходити:
* style issues;
* potential bugs;
* security problems;
* deprecated patterns;
* best practice violations.
Приклад:
<pre>
Invoke-ScriptAnalyzer -Path .\MyScript.ps1
</pre>
== Execution Policy ==
'''Execution Policy''' — механізм, який контролює запуск scripts у Windows PowerShell/PowerShell.
Приклади:
<pre>
Get-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
</pre>
Execution Policy не є повноцінною security boundary.
Це радше safety feature, яка допомагає запобігти випадковому запуску небажаних scripts.
<div style="background:#fff0f0;border-left:6px solid #eb5757;padding:14px 18px;margin:16px 0;border-radius:8px;">
'''Важливо:''' не слід радити “просто поставити Unrestricted” як стандартне рішення. Краще розуміти політику, підпис scripts і корпоративні правила.
</div>
== Code signing ==
PowerShell scripts можна підписувати.
Code signing допомагає підтвердити, що script походить із довіреного джерела й не був змінений.
Це важливо для:
* enterprise;
* production scripts;
* security policies;
* regulated environments;
* deployment automation.
== Secrets ==
PowerShell часто працює з secrets:
* passwords;
* tokens;
* API keys;
* certificates;
* connection strings;
* credentials.
Не варто зберігати secrets у plain text scripts.
Краще використовувати:
* SecretManagement module;
* SecretStore;
* Azure Key Vault;
* Windows Credential Manager;
* environment variables;
* CI/CD secret storage;
* managed identities.
== Credentials ==
PowerShell має тип <code>PSCredential</code>.
Приклад:
<pre>
$cred = Get-Credential
</pre>
Це краще, ніж просити користувача вводити password у plain text.
Але credential handling усе одно потребує обережності.
== Logging ==
PowerShell automation має логувати результат.
Підходи:
* transcript;
* structured logs;
* Start-Transcript;
* Write-Information;
* custom log files;
* Windows Event Log;
* SIEM integration;
* CI/CD logs.
Приклад:
<pre>
Start-Transcript -Path .\run.log
# commands
Stop-Transcript
</pre>
Для scheduled scripts logging особливо важливий.
== Security logging і audit ==
У корпоративному середовищі PowerShell повинен бути видимим для security teams.
Важливі механізми:
* script block logging;
* module logging;
* transcription;
* constrained language mode;
* AMSI;
* event logs;
* Defender integration;
* SIEM forwarding.
PowerShell потужний, тому його потрібно контролювати й моніторити.
== Cross-platform PowerShell ==
PowerShell 7 працює на:
* Windows;
* Linux;
* macOS.
Офіційний GitHub repository описує PowerShell як cross-platform automation and configuration tool/framework for Windows, Linux and macOS. <ref>https://github.com/PowerShell/PowerShell</ref>
Але не всі modules однаково працюють на всіх платформах.
Наприклад, Windows-specific modules можуть залежати від Windows APIs.
== PowerShell у Linux/macOS ==
На Linux/macOS PowerShell корисний для:
* cloud automation;
* JSON/API scripts;
* DevOps;
* CI/CD;
* Azure;
* Microsoft 365;
* cross-platform tooling;
* automation around files;
* reporting.
Але для класичних Unix tasks Bash, zsh, Python або Go можуть бути природнішими.
== PowerShell і Bash ==
PowerShell і Bash мають різну філософію.
{| class="wikitable"
! Shell !! Основна ідея
|-
| '''PowerShell''' || pipeline об’єктів, cmdlets, .NET objects, Microsoft ecosystem
|-
| '''Bash''' || текстовий pipeline, Unix tools, простота для POSIX-систем
|}
PowerShell сильний для structured data й Microsoft automation.
Bash сильний для Unix scripting і текстових команд.
== PowerShell і Python ==
PowerShell і Python часто доповнюють одне одного.
{| class="wikitable"
! Інструмент !! Сильні сторони
|-
| '''PowerShell''' || system administration, Microsoft ecosystem, shell automation
|-
| '''Python''' || general-purpose programming, data, AI, backend, scripting
|}
PowerShell краще для адміністрування Windows/Microsoft 365/Azure.
Python краще для складнішої програмної логіки, data science і AI.
== PowerShell і C#/.NET ==
PowerShell побудований на .NET і може працювати з .NET objects.
Це дозволяє:
* викликати .NET classes;
* працювати з assemblies;
* створювати objects;
* використовувати .NET APIs;
* писати binary modules на C#.
Для швидкої автоматизації — PowerShell.
Для великого production-сервісу або library — C# може бути кращим.
== PowerShell у DevOps ==
PowerShell часто використовується в DevOps.
Сценарії:
* CI/CD scripts;
* deployment;
* infrastructure automation;
* Azure pipelines;
* GitHub Actions;
* build scripts;
* release scripts;
* packaging;
* environment setup;
* secrets retrieval;
* smoke tests.
PowerShell особливо зручний у Windows і Azure environments.
== PowerShell у GitHub Actions ==
У GitHub Actions можна використовувати PowerShell.
Приклад:
<pre>
- name: Run PowerShell script
  shell: pwsh
  run: |
    $PSVersionTable
    ./build.ps1
</pre>
Важливо явно вказувати <code>pwsh</code>, якщо потрібен PowerShell 7.
== PowerShell в Azure Pipelines ==
Azure Pipelines має PowerShell tasks.
Сценарії:
* build;
* test;
* deploy;
* Azure automation;
* artifact packaging;
* release validation.
Для cross-platform agents краще використовувати <code>pwsh</code>, а не Windows PowerShell.
== PowerShell і ERP-системи ==
PowerShell не є ERP-системою.
Він не веде облік, не проводить документи й не керує складом сам по собі.
У контексті [[K2 ERP]] PowerShell може бути корисним для:
* deployment scripts;
* backup scripts;
* automation around Windows services;
* log collection;
* scheduled exports;
* API calls;
* monitoring checks;
* CI/CD;
* адміністративних задач;
* integration scripts;
* генерації технічних звітів.
Але PowerShell не повинен обходити бізнес-логіку ERP, права доступу або audit.
== PowerShell і API K2 ERP ==
PowerShell може викликати REST API.
Приклад сценарію:
* отримати token;
* викликати endpoint;
* зберегти JSON;
* сформувати CSV-звіт;
* надіслати результат адміністратору.
Такі scripts корисні для адміністрування, але критичні операції мають бути захищені правами доступу й логуванням.
== PowerShell і звітність ==
PowerShell можна використовувати для технічної звітності:
* список файлів;
* стан сервісів;
* audit users;
* disk usage;
* installed modules;
* статус backup;
* API responses;
* CSV exports.
Для бізнес-звітності ERP краще використовувати спеціалізований reporting layer, але PowerShell може допомогти з технічними export/import задачами.
== Безпека PowerShell scripts ==
PowerShell scripts можуть бути дуже потужними, тому потрібна обережність.
Правила:
* не запускати незнайомі scripts без перевірки;
* не вставляти команди з інтернету без розуміння;
* не зберігати passwords у коді;
* використовувати least privilege;
* логувати важливі дії;
* підписувати production scripts;
* обмежувати доступ до modules;
* перевіряти dependencies;
* використовувати code review.
== Least privilege ==
'''Least privilege''' означає: script має мати тільки ті права, які йому справді потрібні.
Не варто запускати все від Administrator, якщо достатньо звичайного користувача.
Для automation краще створювати окремі service accounts із мінімальними правами.
== Idempotency ==
'''Idempotency''' — властивість script, коли повторний запуск не ламає систему й не створює дублікати.
Приклад:
* якщо папка вже існує — не помилка;
* якщо сервіс уже запущений — не запускати зайве;
* якщо користувач уже створений — оновити або пропустити.
Idempotent scripts безпечніші для deployment і configuration.
== Dry run і WhatIf ==
PowerShell підтримує <code>-WhatIf</code> для багатьох destructive commands.
Приклад:
<pre>
Remove-Item .\old-files\* -WhatIf
</pre>
У власних advanced functions можна підтримувати <code>ShouldProcess</code>, щоб додати <code>-WhatIf</code> і <code>-Confirm</code>.
Це важливо для безпечної автоматизації.
== Типові помилки в PowerShell ==
Поширені помилки:
* запускати scripts без розуміння;
* ігнорувати errors;
* не використовувати <code>-ErrorAction Stop</code> там, де потрібен catch;
* зберігати passwords у plain text;
* використовувати <code>Write-Host</code> замість pipeline output;
* плутати Windows PowerShell 5.1 і PowerShell 7;
* не вказувати encoding;
* не тестувати scripts;
* не логувати scheduled tasks;
* не перевіряти modules із Gallery;
* використовувати aliases у production scripts;
* не використовувати <code>-WhatIf</code> перед destructive діями.
== Хороші практики ==
Під час роботи з PowerShell варто:
# Використовувати PowerShell 7.6 LTS для нових cross-platform scripts.
# Явно вказувати <code>pwsh</code> у CI/CD.
# Писати повні cmdlet names, а не aliases.
# Додавати <code>param()</code> і типи параметрів.
# Використовувати <code>[CmdletBinding()]</code> для складних functions.
# Обробляти помилки через <code>try/catch</code>.
# Не зберігати secrets у scripts.
# Використовувати SecretManagement або vault.
# Логувати scheduled і production runs.
# Тестувати modules через Pester.
# Аналізувати код через PSScriptAnalyzer.
# Використовувати <code>-WhatIf</code> для destructive operations.
# Дотримуватися least privilege.
# Перевіряти версію PowerShell і modules.
# Документувати scripts і приклади запуску.
== Коли PowerShell особливо корисний ==
PowerShell особливо корисний для:
* Windows administration;
* Microsoft 365;
* Azure;
* DevOps;
* CI/CD;
* server automation;
* file operations;
* registry operations;
* service management;
* CSV/JSON/XML processing;
* REST API automation;
* scheduled tasks;
* audit reports;
* deployment scripts;
* troubleshooting;
* інтеграцій.
== Коли PowerShell може бути невдалим вибором ==
PowerShell може бути невдалим вибором, якщо:
* потрібна велика backend-система;
* потрібен web API як production service;
* потрібна AI/data science екосистема;
* задача краще вирішується SQL;
* потрібен portable Unix shell script;
* команда не знає PowerShell;
* потрібна складна application architecture;
* script стає настільки великим, що краще перейти на C#, Python або Go.
== Практичний висновок ==
PowerShell — один із найсильніших інструментів для automation, адміністрування й DevOps, особливо в Microsoft-екосистемі.
Сильні сторони:
* objects pipeline;
* cmdlets;
* modules;
* PowerShell Gallery;
* remoting;
* cross-platform PowerShell 7;
* Windows PowerShell 5.1 compatibility;
* JSON/CSV/XML;
* REST API;
* Azure і Microsoft 365;
* Pester;
* PSScriptAnalyzer;
* CI/CD;
* automation scripts;
* .NET integration.
Обмеження:
* не замінює повноцінну backend-мову для великих сервісів;
* Windows PowerShell і PowerShell 7 мають різну сумісність;
* modules можуть бути platform-specific;
* scripts можуть бути небезпечними без review;
* execution policy не є повним захистом;
* секрети потрібно зберігати правильно;
* production automation потребує тестів, логів і least privilege.
PowerShell найкраще використовувати там, де потрібна швидка, контрольована й повторювана автоматизація: від локальних scripts до enterprise DevOps і Microsoft cloud administration.
== Пояснення термінів ==
* '''PowerShell''' — shell, scripting language і automation framework.
* '''Windows PowerShell''' — стара версія PowerShell 5.1 на .NET Framework.
* '''PowerShell 7''' — сучасна cross-platform версія PowerShell.
* '''pwsh''' — виконуваний файл PowerShell 7+.
* '''Cmdlet''' — команда PowerShell у форматі Verb-Noun.
* '''Pipeline''' — передача результатів однієї команди в іншу.
* '''Objects pipeline''' — pipeline, який передає об’єкти, а не лише текст.
* '''Module''' — пакет PowerShell-команд і функцій.
* '''PowerShell Gallery''' — репозиторій PowerShell-модулів і scripts.
* '''Remoting''' — віддалене виконання PowerShell-команд.
* '''Invoke-Command''' — cmdlet для виконання script block локально або віддалено.
* '''Enter-PSSession''' — інтерактивна remote session.
* '''Job''' — фонова задача PowerShell.
* '''Execution Policy''' — політика запуску scripts.
* '''Code signing''' — цифровий підпис scripts.
* '''Pester''' — testing framework для PowerShell.
* '''PSScriptAnalyzer''' — статичний аналізатор PowerShell-коду.
* '''DSC''' — Desired State Configuration.
* '''PSCredential''' — тип для зберігання credentials.
* '''SecretManagement''' — підхід і модулі для роботи з secrets.
* '''Splatting''' — передача параметрів через hashtable.
* '''Hashtable''' — key-value структура.
* '''ScriptBlock''' — блок PowerShell-коду як значення.
* '''WhatIf''' — режим попереднього перегляду дії без виконання.
* '''Least privilege''' — принцип мінімально необхідних прав.
* '''Idempotency''' — повторний запуск script не створює небажаних змін.
== Дивіться також ==
* [[C Sharp]]
* [[Go]]
* [[Python]]
* [[Розробка в K2 ERP]]
* [[Тестування коду]]
* [[API K2 ERP]]
* [[Інтеграції K2 ERP]]
* [[Звітність K2 ERP]]
* [[GitHub Copilot]]
* [[Cursor]]
* [[Tabnine]]
* [[Retrieval-Augmented Generation]]
* [[Великі мовні моделі]]
* [[GPT]]
* [[Claude Models]]
* [[Штучний інтелект]]
* [[Генеративний AI]]
== Джерела ==
* [https://learn.microsoft.com/en-us/powershell/ Microsoft Learn — PowerShell Documentation]
* [https://github.com/PowerShell/PowerShell PowerShell GitHub Repository]
* [https://github.com/PowerShell/PowerShell/releases PowerShell GitHub Releases]
* [https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows?view=powershell-7.6 Microsoft Learn — Install PowerShell 7 on Windows]
* [https://learn.microsoft.com/uk-ua/powershell/scripting/how-to-use-docs?view=powershell-7.6 Microsoft Learn — How to use PowerShell documentation]
* [https://learn.microsoft.com/en-us/lifecycle/products/powershell Microsoft Lifecycle — PowerShell]
* [https://github.com/MicrosoftDocs/PowerShell-Docs/blob/main/reference/docs-conceptual/install/PowerShell-Support-Lifecycle.md PowerShell Support Lifecycle]
* [https://devblogs.microsoft.com/powershell/announcing-powershell-7-5-ga/ Microsoft PowerShell Blog — PowerShell 7.5 GA]
* [https://www.powershellgallery.com/ PowerShell Gallery]
* [https://pester.dev/ Pester]
* [https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-hashtable Microsoft Learn — Everything you wanted to know about hashtables]
* [https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-scriptblock Microsoft Learn — Everything you wanted to know about script blocks]
* [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki — Help:Formatting]
* [https://www.mediawiki.org/wiki/Help:Links MediaWiki — Help:Links]
[[Категорія:Програмування]]
[[Категорія:PowerShell]]
[[Категорія:Windows]]
[[Категорія:Microsoft]]
[[Категорія:Automation]]
[[Категорія:DevOps]]
[[Категорія:CI/CD]]
[[Категорія:Azure]]
[[Категорія:Microsoft 365]]
[[Категорія:Адміністрування]]
[[Категорія:Shell]]
[[Категорія:Scripting]]
[[Категорія:Інтеграції]]
[[Категорія:Безпека]]
[[Категорія:Пояснення термінів]]

Поточна версія на 20:18, 8 травня 2026

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

Jobs корисні для довгих операцій, але в сучасних сценаріях також використовують runspaces, ThreadJob або CI/CD runners.

Scheduled jobs і Task Scheduler

PowerShell scripts часто запускають за розкладом.

На Windows можна використовувати:

  • Task Scheduler;
  • Scheduled Jobs;
  • Scheduled Tasks;
  • Azure Automation;
  • CI/CD schedules.

Для scheduled scripts важливо логувати результат і помилки, бо користувач не бачить інтерактивний вивід.

Working with files

PowerShell має cmdlets для файлів:

Get-ChildItem
Get-Content
Set-Content
Add-Content
Copy-Item
Move-Item
Remove-Item
New-Item
Test-Path

Приклад:

Get-ChildItem -Path C:\Logs -Filter *.log |
    Where-Object LastWriteTime -lt (Get-Date).AddDays(-30)

CSV

PowerShell дуже зручний для CSV.

Приклад:

$data = Import-Csv .\users.csv
$data | Where-Object Department -eq "Sales"
$data | Export-Csv .\sales-users.csv -NoTypeInformation

CSV часто використовується для звітів, імпорту/експорту й адміністрування.

JSON

PowerShell добре працює з JSON.

Приклад:

$response = Invoke-RestMethod -Uri "https://api.example.com/users"
$response.users | Select-Object id, name

Конвертація:

$data | ConvertTo-Json -Depth 10
$json | ConvertFrom-Json

PowerShell GitHub repository описує PowerShell як оптимізований для structured data, зокрема JSON, CSV, XML, REST APIs і object models. [6]

XML

PowerShell може працювати з XML.

Приклад:

[xml]$xml = Get-Content .\config.xml
$xml.configuration.appSettings.add

XML досі часто зустрічається в Windows, legacy systems і enterprise configs.

REST API

PowerShell зручний для REST API.

Команди:

Invoke-RestMethod
Invoke-WebRequest

Приклад:

$body = @{
    name = "Test"
    active = $true
} | ConvertTo-Json

Invoke-RestMethod `
    -Uri "https://api.example.com/items" `
    -Method Post `
    -Body $body `
    -ContentType "application/json"

REST API + PowerShell — популярна пара для інтеграцій і automation.

Azure PowerShell

Azure PowerShell — модулі для керування Azure.

Основний модуль:

Az

Приклади:

Connect-AzAccount
Get-AzResourceGroup
Get-AzVM

Azure PowerShell використовується для:

  • resource management;
  • automation;
  • deployment;
  • audit;
  • reporting;
  • governance.

Microsoft Graph PowerShell

Microsoft Graph PowerShell SDK використовується для Microsoft 365 і Graph API.

Сценарії:

  • users;
  • groups;
  • devices;
  • Teams;
  • SharePoint;
  • Entra ID;
  • reports;
  • permissions;
  • automation.

PowerShell дуже поширений у Microsoft 365 administration.

Active Directory

Windows PowerShell часто використовується для Active Directory.

Приклади:

Get-ADUser
New-ADUser
Set-ADUser
Get-ADGroupMember

AD cmdlets зазвичай доступні через RSAT/ActiveDirectory module.

У сучасних cloud environments часто використовують Microsoft Graph і Entra ID modules.

Desired State Configuration

PowerShell DSC — Desired State Configuration.

Ідея: описати бажаний стан системи, а не вручну виконувати всі кроки.

DSC використовується для:

  • configuration management;
  • server baseline;
  • compliance;
  • repeatable environments;
  • infrastructure automation.

DSC має окрему історію версій і сценаріїв, тому для production потрібно перевіряти актуальну документацію під конкретну платформу.

Pester

Pester — популярний testing framework для PowerShell.

Приклад:

Describe "Calculator" {
    It "adds numbers" {
        Add-Numbers 2 3 | Should -Be 5
    }
}

Pester корисний для:

  • unit tests;
  • script tests;
  • module tests;
  • infrastructure tests;
  • CI/CD;
  • regression tests.

Для серйозної автоматизації PowerShell scripts теж потрібно тестувати.

Script Analyzer

PSScriptAnalyzer — статичний аналізатор PowerShell-коду.

Він допомагає знаходити:

  • style issues;
  • potential bugs;
  • security problems;
  • deprecated patterns;
  • best practice violations.

Приклад:

Invoke-ScriptAnalyzer -Path .\MyScript.ps1

Execution Policy

Execution Policy — механізм, який контролює запуск scripts у Windows PowerShell/PowerShell.

Приклади:

Get-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Execution Policy не є повноцінною security boundary.

Це радше safety feature, яка допомагає запобігти випадковому запуску небажаних scripts.

Важливо: не слід радити “просто поставити Unrestricted” як стандартне рішення. Краще розуміти політику, підпис scripts і корпоративні правила.

Code signing

PowerShell scripts можна підписувати.

Code signing допомагає підтвердити, що script походить із довіреного джерела й не був змінений.

Це важливо для:

  • enterprise;
  • production scripts;
  • security policies;
  • regulated environments;
  • deployment automation.

Secrets

PowerShell часто працює з secrets:

  • passwords;
  • tokens;
  • API keys;
  • certificates;
  • connection strings;
  • credentials.

Не варто зберігати secrets у plain text scripts.

Краще використовувати:

  • SecretManagement module;
  • SecretStore;
  • Azure Key Vault;
  • Windows Credential Manager;
  • environment variables;
  • CI/CD secret storage;
  • managed identities.

Credentials

PowerShell має тип PSCredential.

Приклад:

$cred = Get-Credential

Це краще, ніж просити користувача вводити password у plain text.

Але credential handling усе одно потребує обережності.

Logging

PowerShell automation має логувати результат.

Підходи:

  • transcript;
  • structured logs;
  • Start-Transcript;
  • Write-Information;
  • custom log files;
  • Windows Event Log;
  • SIEM integration;
  • CI/CD logs.

Приклад:

Start-Transcript -Path .\run.log
# commands
Stop-Transcript

Для scheduled scripts logging особливо важливий.

Security logging і audit

У корпоративному середовищі PowerShell повинен бути видимим для security teams.

Важливі механізми:

  • script block logging;
  • module logging;
  • transcription;
  • constrained language mode;
  • AMSI;
  • event logs;
  • Defender integration;
  • SIEM forwarding.

PowerShell потужний, тому його потрібно контролювати й моніторити.

Cross-platform PowerShell

PowerShell 7 працює на:

  • Windows;
  • Linux;
  • macOS.

Офіційний GitHub repository описує PowerShell як cross-platform automation and configuration tool/framework for Windows, Linux and macOS. [7]

Але не всі modules однаково працюють на всіх платформах.

Наприклад, Windows-specific modules можуть залежати від Windows APIs.

PowerShell у Linux/macOS

На Linux/macOS PowerShell корисний для:

  • cloud automation;
  • JSON/API scripts;
  • DevOps;
  • CI/CD;
  • Azure;
  • Microsoft 365;
  • cross-platform tooling;
  • automation around files;
  • reporting.

Але для класичних Unix tasks Bash, zsh, Python або Go можуть бути природнішими.

PowerShell і Bash

PowerShell і Bash мають різну філософію.

Shell Основна ідея
PowerShell pipeline об’єктів, cmdlets, .NET objects, Microsoft ecosystem
Bash текстовий pipeline, Unix tools, простота для POSIX-систем

PowerShell сильний для structured data й Microsoft automation.

Bash сильний для Unix scripting і текстових команд.

PowerShell і Python

PowerShell і Python часто доповнюють одне одного.

Інструмент Сильні сторони
PowerShell system administration, Microsoft ecosystem, shell automation
Python general-purpose programming, data, AI, backend, scripting

PowerShell краще для адміністрування Windows/Microsoft 365/Azure.

Python краще для складнішої програмної логіки, data science і AI.

PowerShell і C#/.NET

PowerShell побудований на .NET і може працювати з .NET objects.

Це дозволяє:

  • викликати .NET classes;
  • працювати з assemblies;
  • створювати objects;
  • використовувати .NET APIs;
  • писати binary modules на C#.

Для швидкої автоматизації — PowerShell.

Для великого production-сервісу або library — C# може бути кращим.

PowerShell у DevOps

PowerShell часто використовується в DevOps.

Сценарії:

  • CI/CD scripts;
  • deployment;
  • infrastructure automation;
  • Azure pipelines;
  • GitHub Actions;
  • build scripts;
  • release scripts;
  • packaging;
  • environment setup;
  • secrets retrieval;
  • smoke tests.

PowerShell особливо зручний у Windows і Azure environments.

PowerShell у GitHub Actions

У GitHub Actions можна використовувати PowerShell.

Приклад:

- name: Run PowerShell script
  shell: pwsh
  run: |
    $PSVersionTable
    ./build.ps1

Важливо явно вказувати pwsh, якщо потрібен PowerShell 7.

PowerShell в Azure Pipelines

Azure Pipelines має PowerShell tasks.

Сценарії:

  • build;
  • test;
  • deploy;
  • Azure automation;
  • artifact packaging;
  • release validation.

Для cross-platform agents краще використовувати pwsh, а не Windows PowerShell.

PowerShell і ERP-системи

PowerShell не є ERP-системою.

Він не веде облік, не проводить документи й не керує складом сам по собі.

У контексті K2 ERP PowerShell може бути корисним для:

  • deployment scripts;
  • backup scripts;
  • automation around Windows services;
  • log collection;
  • scheduled exports;
  • API calls;
  • monitoring checks;
  • CI/CD;
  • адміністративних задач;
  • integration scripts;
  • генерації технічних звітів.

Але PowerShell не повинен обходити бізнес-логіку ERP, права доступу або audit.

PowerShell і API K2 ERP

PowerShell може викликати REST API.

Приклад сценарію:

  • отримати token;
  • викликати endpoint;
  • зберегти JSON;
  • сформувати CSV-звіт;
  • надіслати результат адміністратору.

Такі scripts корисні для адміністрування, але критичні операції мають бути захищені правами доступу й логуванням.

PowerShell і звітність

PowerShell можна використовувати для технічної звітності:

  • список файлів;
  • стан сервісів;
  • audit users;
  • disk usage;
  • installed modules;
  • статус backup;
  • API responses;
  • CSV exports.

Для бізнес-звітності ERP краще використовувати спеціалізований reporting layer, але PowerShell може допомогти з технічними export/import задачами.

Безпека PowerShell scripts

PowerShell scripts можуть бути дуже потужними, тому потрібна обережність.

Правила:

  • не запускати незнайомі scripts без перевірки;
  • не вставляти команди з інтернету без розуміння;
  • не зберігати passwords у коді;
  • використовувати least privilege;
  • логувати важливі дії;
  • підписувати production scripts;
  • обмежувати доступ до modules;
  • перевіряти dependencies;
  • використовувати code review.

Least privilege

Least privilege означає: script має мати тільки ті права, які йому справді потрібні.

Не варто запускати все від Administrator, якщо достатньо звичайного користувача.

Для automation краще створювати окремі service accounts із мінімальними правами.

Idempotency

Idempotency — властивість script, коли повторний запуск не ламає систему й не створює дублікати.

Приклад:

  • якщо папка вже існує — не помилка;
  • якщо сервіс уже запущений — не запускати зайве;
  • якщо користувач уже створений — оновити або пропустити.

Idempotent scripts безпечніші для deployment і configuration.

Dry run і WhatIf

PowerShell підтримує -WhatIf для багатьох destructive commands.

Приклад:

Remove-Item .\old-files\* -WhatIf

У власних advanced functions можна підтримувати ShouldProcess, щоб додати -WhatIf і -Confirm.

Це важливо для безпечної автоматизації.

Типові помилки в PowerShell

Поширені помилки:

  • запускати scripts без розуміння;
  • ігнорувати errors;
  • не використовувати -ErrorAction Stop там, де потрібен catch;
  • зберігати passwords у plain text;
  • використовувати Write-Host замість pipeline output;
  • плутати Windows PowerShell 5.1 і PowerShell 7;
  • не вказувати encoding;
  • не тестувати scripts;
  • не логувати scheduled tasks;
  • не перевіряти modules із Gallery;
  • використовувати aliases у production scripts;
  • не використовувати -WhatIf перед destructive діями.

Хороші практики

Під час роботи з PowerShell варто:

  1. Використовувати PowerShell 7.6 LTS для нових cross-platform scripts.
  2. Явно вказувати pwsh у CI/CD.
  3. Писати повні cmdlet names, а не aliases.
  4. Додавати param() і типи параметрів.
  5. Використовувати [CmdletBinding()] для складних functions.
  6. Обробляти помилки через try/catch.
  7. Не зберігати secrets у scripts.
  8. Використовувати SecretManagement або vault.
  9. Логувати scheduled і production runs.
  10. Тестувати modules через Pester.
  11. Аналізувати код через PSScriptAnalyzer.
  12. Використовувати -WhatIf для destructive operations.
  13. Дотримуватися least privilege.
  14. Перевіряти версію PowerShell і modules.
  15. Документувати scripts і приклади запуску.

Коли PowerShell особливо корисний

PowerShell особливо корисний для:

  • Windows administration;
  • Microsoft 365;
  • Azure;
  • DevOps;
  • CI/CD;
  • server automation;
  • file operations;
  • registry operations;
  • service management;
  • CSV/JSON/XML processing;
  • REST API automation;
  • scheduled tasks;
  • audit reports;
  • deployment scripts;
  • troubleshooting;
  • інтеграцій.

Коли PowerShell може бути невдалим вибором

PowerShell може бути невдалим вибором, якщо:

  • потрібна велика backend-система;
  • потрібен web API як production service;
  • потрібна AI/data science екосистема;
  • задача краще вирішується SQL;
  • потрібен portable Unix shell script;
  • команда не знає PowerShell;
  • потрібна складна application architecture;
  • script стає настільки великим, що краще перейти на C#, Python або Go.

Практичний висновок

PowerShell — один із найсильніших інструментів для automation, адміністрування й DevOps, особливо в Microsoft-екосистемі.

Сильні сторони:

  • objects pipeline;
  • cmdlets;
  • modules;
  • PowerShell Gallery;
  • remoting;
  • cross-platform PowerShell 7;
  • Windows PowerShell 5.1 compatibility;
  • JSON/CSV/XML;
  • REST API;
  • Azure і Microsoft 365;
  • Pester;
  • PSScriptAnalyzer;
  • CI/CD;
  • automation scripts;
  • .NET integration.

Обмеження:

  • не замінює повноцінну backend-мову для великих сервісів;
  • Windows PowerShell і PowerShell 7 мають різну сумісність;
  • modules можуть бути platform-specific;
  • scripts можуть бути небезпечними без review;
  • execution policy не є повним захистом;
  • секрети потрібно зберігати правильно;
  • production automation потребує тестів, логів і least privilege.

PowerShell найкраще використовувати там, де потрібна швидка, контрольована й повторювана автоматизація: від локальних scripts до enterprise DevOps і Microsoft cloud administration.

Пояснення термінів

  • PowerShell — shell, scripting language і automation framework.
  • Windows PowerShell — стара версія PowerShell 5.1 на .NET Framework.
  • PowerShell 7 — сучасна cross-platform версія PowerShell.
  • pwsh — виконуваний файл PowerShell 7+.
  • Cmdlet — команда PowerShell у форматі Verb-Noun.
  • Pipeline — передача результатів однієї команди в іншу.
  • Objects pipeline — pipeline, який передає об’єкти, а не лише текст.
  • Module — пакет PowerShell-команд і функцій.
  • PowerShell Gallery — репозиторій PowerShell-модулів і scripts.
  • Remoting — віддалене виконання PowerShell-команд.
  • Invoke-Command — cmdlet для виконання script block локально або віддалено.
  • Enter-PSSession — інтерактивна remote session.
  • Job — фонова задача PowerShell.
  • Execution Policy — політика запуску scripts.
  • Code signing — цифровий підпис scripts.
  • Pester — testing framework для PowerShell.
  • PSScriptAnalyzer — статичний аналізатор PowerShell-коду.
  • DSC — Desired State Configuration.
  • PSCredential — тип для зберігання credentials.
  • SecretManagement — підхід і модулі для роботи з secrets.
  • Splatting — передача параметрів через hashtable.
  • Hashtable — key-value структура.
  • ScriptBlock — блок PowerShell-коду як значення.
  • WhatIf — режим попереднього перегляду дії без виконання.
  • Least privilege — принцип мінімально необхідних прав.
  • Idempotency — повторний запуск script не створює небажаних змін.

Дивіться також

Джерела