PowerShell: Корисні скрипти, які знадобляться кожному
PowerShell уже давно перестав бути просто оболонкою для адміністрування Windows. Сьогодні це повноцінна платформа для автоматизації рутинних задач, управління інфраструктурою та інтеграції з різними сервісами. Незалежно від того, чи ви системний адміністратор, DevOps-інженер, або просто активно працюєте з Windows-системами, знання корисних скриптів PowerShell значно спрощує роботу та підвищує ефективність.
У цій статті ми розглянемо набір практичних скриптів, які допоможуть у повсякденних завданнях — від роботи з файлами та процесами до моніторингу системи та управління користувачами Active Directory. Кожен приклад супроводжується поясненням і кейсом застосування, щоб ви могли відразу інтегрувати їх у свій робочий процес.
Мета цього матеріалу - не просто надати готові команди, а пояснити, як вони працюють, щоб ви могли модифікувати та розширювати їх під власні потреби. Використовуючи наведені приклади, ви зможете економити час, уникати ручних помилок і швидко автоматизувати повторювані операції.
Основи роботи з PowerShell
Перед тим як переходити до практичних скриптів, важливо розуміти базові принципи PowerShell:
-
Об’єктна модель - PowerShell працює з об’єктами .NET, а не просто з текстом, що дозволяє легко фільтрувати, сортувати та трансформувати дані.
-
Команди Cmdlet - стандартні команди PowerShell, які виконують конкретні завдання, наприклад
Get-ProcessабоGet-Service. -
Пайплайн (Pipeline) - механізм передачі об’єктів між командами через
|, що дозволяє будувати складні сценарії обробки даних. -
Скрипти та модулі - для повторного використання логіки можна створювати скрипти
.ps1або пакувати функції у модулі.psm1.
Робота з файлами та папками
PowerShell надає потужні засоби для роботи з файловою системою. Наведемо кілька прикладів.
Пошук та фільтрація файлів
# Пошук всіх файлів .log старше 30 днів
Get-ChildItem -Path "C:\Logs" -Recurse -Filter "*.log" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) }
Пояснення:
-
Get-ChildItemрекурсивно проходить всі підпапки. -
Where-Objectфільтрує файли за датою останньої зміни.
Автоматичне видалення старих файлів
# Видалення файлів старше 30 днів
Get-ChildItem "C:\Temp" -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Force
Кейс:
Цей скрипт зручно використовувати для очищення тимчасових директорій або архівів логів, щоб уникнути заповнення диску.
Управління процесами та сервісами
PowerShell дозволяє отримувати інформацію про процеси, завершувати їх та керувати службами.
Перегляд ресурсів процесів
# Сортування процесів за використанням пам'яті
Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object -First 10
Пояснення:
Цей скрипт показує 10 процесів, які споживають найбільше оперативної пам’яті. Зручно для швидкої діагностики навантаження на сервер.
Управління службами
# Перезапуск служби Windows Update
Restart-Service -Name wuauserv -Force
Кейс:
Корисно при автоматичному вирішенні проблем зі службами, які зависли або працюють некоректно.
Робота з мережевими ресурсами
Перевірка доступності хостів
$hosts = @("server01", "server02", "192.168.1.10")
foreach ($host in $hosts) {
if (Test-Connection -ComputerName $host -Count 2 -Quiet) {
Write-Host "$host доступний"
} else {
Write-Host "$host недоступний"
}
}
Пояснення:
-
Test-Connection— аналог командиping. -
Скрипт перебирає список хостів і виводить їх статус.
Моніторинг відкритих портів
# Перевірка порту 443 на сервері
Test-NetConnection -ComputerName "example.com" -Port 443
Цей скрипт дозволяє швидко перевіряти доступність конкретного сервісу без встановлення сторонніх утиліт.
Автоматизація роботи з Active Directory
Для адміністрування користувачів та груп у AD PowerShell незамінний.
Створення нового користувача
New-ADUser -Name "Ivan Petrov" -GivenName "Ivan" -Surname "Petrov" `
-Path "OU=Employees,DC=example,DC=com" -AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force) `
-Enabled $true
Пояснення:
-
Створює нового користувача з заданим паролем і розташуванням у певному OU.
-
Використовує
ConvertTo-SecureStringдля безпечного зберігання пароля.
Масове оновлення груп
# Додаємо користувачів у групу
Import-Csv "users.csv" | ForEach-Object {
Add-ADGroupMember -Identity "IT-Staff" -Members $_.SamAccountName
}
Кейс:
Швидкий спосіб оновити права доступу великої кількості співробітників.
Логування та автоматизація завдань
PowerShell дозволяє створювати сценарії автоматичного логування та моніторингу.
Логування змін у файлах
$path = "C:\Data"
$log = "C:\Logs\FileChanges.log"
Register-ObjectEvent -InputObject (Get-Item $path) -EventName "Changed" -Action {
$event = $Event.SourceEventArgs
Add-Content $log "$(Get-Date) - $($event.FullPath) змінено"
}
Пояснення:
-
Використовуємо події файлової системи для реєстрації змін.
-
Лог можна потім аналізувати для аудиту або відновлення.
Планування скриптів через Task Scheduler
# Створення задачі для щоденного запуску скрипта
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\Scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 02:00
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "DailyBackup" -Description "Щоденне резервне копіювання"
Кейс:
Повністю автоматизоване резервне копіювання без ручного втручання.
Практичні кейси
-
Моніторинг серверів - об’єднання
Get-Process,Get-ServiceтаTest-NetConnectionдля автоматичного звіту про стан інфраструктури. -
Очищення тимчасових файлів - регулярний скрипт видалення старих
.logі.tmpфайлів для збереження дискового простору. -
Масові зміни в Active Directory - швидке оновлення груп і прав користувачів за допомогою CSV-файлів.
-
Аудит та логування - автоматичне відстеження змін у критичних каталогах для контролю безпеки.
Висновки
PowerShell — універсальний інструмент для автоматизації адміністративних та DevOps-завдань. Його перевага полягає в об’єктній моделі та гнучкості: ви можете створювати прості команди або складні сценарії, інтегруючи їх з Windows, AD, мережею та зовнішніми сервісами.
Використання наведених у статті скриптів дозволяє:
-
зменшити ручну роботу та ризик помилок;
-
оптимізувати ресурси серверів;
-
швидко отримувати діагностичну інформацію;
-
автоматизувати рутинні процеси в IT-інфраструктурі.
Освоєння PowerShell і регулярне впровадження скриптів у робочі процеси підвищує ефективність команди та робить адміністрування більш передбачуваним і контрольованим.