Scheduled Tasks are a cornerstone of automation on Windows servers—but configuring them manually through Task Scheduler is slow, error-prone, and completely unscalable. 😩
Whether you want to run a nightly cleanup script, trigger a compliance check every hour, or reboot a rogue app every Sunday, PowerShell is your friend. In this post, we’ll show you how to create, configure, and troubleshoot scheduled tasks entirely from the command line.
💡 Bonus: If you’re using Ohlala Operations, you can run these PowerShell commands across your EC2 instances directly—without RDP or GPOs.
⚙️ Step 1: Define the Action
Every scheduled task needs an action. Here’s how to define one that runs PowerShell with a specific script:
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\cleanup.ps1"
You can also run inline commands:
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Command `"Get-Process | Out-File C:\temp\procs.txt`""
⏰ Step 2: Define the Trigger
Want the task to run daily at 2 AM? Use a time-based trigger:
$trigger = New-ScheduledTaskTrigger -Daily -At 2am
Need more control? You can create weekly, at-logon, or one-time triggers:
# Every Sunday at 3 AM
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 3am
👤 Step 3: Set the Principal (Who Runs It)
By default, tasks run as the current user. But on a server, you typically want SYSTEM or a service account:
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
Replace "SYSTEM"
with a domain user if needed.
🧩 Step 4: Register the Task
Now put it all together:
Register-ScheduledTask -TaskName "NightlyCleanup" `
-Action $action `
-Trigger $trigger `
-Principal $principal `
-Description "Deletes old temp files every night at 2 AM"
This task is now ready and visible under Task Scheduler > Task Scheduler Library. 🎉
🧪 Step 5: Verify and Troubleshoot
List all tasks:
Get-ScheduledTask
Check your specific task:
Get-ScheduledTask -TaskName "NightlyCleanup" | Get-ScheduledTaskInfo
Check the event log if it’s failing silently:
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational |
Where-Object { $_.Message -like "*NightlyCleanup*" } |
Select-Object TimeCreated, Id, Message -First 10
🚀 Bonus: Run This Remotely with Ohlala
Using Ohlala Operations, you can run all of the above PowerShell commands remotely—across one or many EC2 instances—without needing RDP or interactive logins. 💻🌐
Simply open the Command Runner in the Ohlala UI, paste the commands, and execute. For example:
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\cleanup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 2am
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName "NightlyCleanup" -Action $action -Trigger $trigger -Principal $principal -Description "Deletes old temp files every night at 2 AM"
This gives you an easy way to deploy tasks across multiple servers from a single interface.
🛠️ In the future, we’ll integrate scheduled task creation directly into Ohlala Recipes to make this even faster and more repeatable.
✅ Wrap-Up
Creating scheduled tasks with PowerShell is simple, powerful, and automatable—which makes it a perfect fit for modern Windows server management. Skip the GUI, skip the clicks, and manage your tasks like code. 💪
Have a task you want to automate across your Windows fleet? Try it with Ohlala Operations and see how zero-RDP server automation feels.