Автоматизація задач через PowerShell і Task Scheduler
Як створити і запланувати автоматичні задачі в Windows через Task Scheduler і PowerShell: резервне копіювання, очищення, запуск скриптів за розкладом.
Task Scheduler (Планувальник завдань) + PowerShell = автоматизація будь-яких рутинних задач: резервне копіювання, очищення тимчасових файлів, перевірка сервісів, відправка звітів.
Task Scheduler — графічний інтерфейс
Win + R → taskschd.msc
Або: Пошук → Планувальник завдань
Створити просте завдання
- Дія → Створити просте завдання
- Назва і опис
- Тригер: щодня / щотижня / при запуску / при вході
- Дія: Запустити програму
- Програма:
powershell.exe - Аргументи:
-ExecutionPolicy Bypass -File "C:\Scripts\backup.ps1"
Створення завдань через PowerShell
Набагато зручніше для автоматизації і масового розгортання.
Базовий приклад — запуск скрипта щодня
# Параметри завдання
$action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-ExecutionPolicy Bypass -NonInteractive -File C:\Scripts\cleanup.ps1"
$trigger = New-ScheduledTaskTrigger `
-Daily `
-At "03:00"
$settings = New-ScheduledTaskSettingsSet `
-RunOnlyIfNetworkAvailable $false `
-StartWhenAvailable `
-ExecutionTimeLimit (New-TimeSpan -Hours 1)
Register-ScheduledTask `
-TaskName "Daily Cleanup" `
-TaskPath "\MyTasks\" `
-Action $action `
-Trigger $trigger `
-Settings $settings `
-RunLevel Highest `
-Force
Запуск при вході користувача
$trigger = New-ScheduledTaskTrigger -AtLogOn
Запуск при запуску системи
$trigger = New-ScheduledTaskTrigger -AtStartup
Запуск кожні 30 хвилин
$trigger = New-ScheduledTaskTrigger `
-RepetitionInterval (New-TimeSpan -Minutes 30) `
-Once `
-At (Get-Date)
Запуск від іншого користувача (наприклад SYSTEM)
Register-ScheduledTask `
-TaskName "System Task" `
-Action $action `
-Trigger $trigger `
-User "SYSTEM" `
-RunLevel Highest `
-Force
Практичні скрипти для автоматизації
Автоматичне резервне копіювання
# backup.ps1
$source = "C:\Users\$env:USERNAME\Documents"
$dest = "D:\Backups\Documents_$(Get-Date -Format 'yyyy-MM-dd')"
Copy-Item -Path $source -Destination $dest -Recurse -Force
# Видалити резервні копії старші 30 днів
Get-ChildItem "D:\Backups" -Directory |
Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Recurse -Force
Write-Output "$(Get-Date): Backup completed to $dest" |
Out-File "D:\Backups\backup.log" -Append
Очищення тимчасових файлів
# cleanup.ps1
$paths = @(
$env:TEMP,
"C:\Windows\Temp",
"C:\Windows\SoftwareDistribution\Download"
)
foreach ($path in $paths) {
Get-ChildItem $path -Recurse -ErrorAction SilentlyContinue |
Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force -ErrorAction SilentlyContinue
}
Write-Output "$(Get-Date): Cleanup done" | Out-File "C:\Scripts\cleanup.log" -Append
Перевірка і перезапуск сервісу
# check-service.ps1
$serviceName = "wuauserv" # Windows Update
$service = Get-Service -Name $serviceName
if ($service.Status -ne "Running") {
Start-Service -Name $serviceName
Write-Output "$(Get-Date): $serviceName was stopped, restarted" |
Out-File "C:\Scripts\services.log" -Append
}
Звіт про дисковий простір
# disk-report.ps1
$report = Get-PSDrive -PSProvider FileSystem |
Select-Object Name,
@{N="Total GB"; E={[math]::Round($_.Used/1GB + $_.Free/1GB, 1)}},
@{N="Used GB"; E={[math]::Round($_.Used/1GB, 1)}},
@{N="Free GB"; E={[math]::Round($_.Free/1GB, 1)}},
@{N="Free %"; E={[math]::Round($_.Free/($_.Used+$_.Free)*100, 0)}}
$report | Out-File "C:\Scripts\disk-report.txt"
# Попередити якщо менше 10% вільного місця
$critical = $report | Where-Object { $_."Free %" -lt 10 }
if ($critical) {
# Можна додати відправку email або запис в EventLog
Write-EventLog -LogName Application -Source "DiskMonitor" `
-EventId 1001 -EntryType Warning `
-Message "Low disk space: $($critical | Out-String)"
}
Управління завданнями через PowerShell
# Список всіх завдань
Get-ScheduledTask | Select-Object TaskName, TaskPath, State
# Запустити завдання вручну
Start-ScheduledTask -TaskName "Daily Cleanup"
# Зупинити завдання
Stop-ScheduledTask -TaskName "Daily Cleanup"
# Вимкнути завдання
Disable-ScheduledTask -TaskName "Daily Cleanup"
# Увімкнути завдання
Enable-ScheduledTask -TaskName "Daily Cleanup"
# Видалити завдання
Unregister-ScheduledTask -TaskName "Daily Cleanup" -Confirm:$false
# Переглянути результат останнього запуску
Get-ScheduledTaskInfo -TaskName "Daily Cleanup"
Налаштування ExecutionPolicy для скриптів
Щоб PowerShell скрипти запускались без помилок:
# Дозволити запуск локальних скриптів
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
# Або в Task Scheduler вказуй аргумент:
# -ExecutionPolicy Bypass
Підсумок
Для простих задач — графічний Task Scheduler, для масового розгортання і складних налаштувань — Register-ScheduledTask через PowerShell. Стандартний набір для автоматизації: резервне копіювання о 3 ночі, очищення temp щотижня, перевірка сервісів кожні 30 хвилин.
⚡ Шукаєш потрібну команду?
→ PowerShell і CMD довідник — 40+ команд з пошуком за задачею. Введи "мережа", "диск" або "безпека" і одразу отримай готову команду.