I'm trying to create a few scheduled tasks using PowerShell prior to the TaskScheduler
module, which is not an option as this will be used to run a process on external client machines. Therefore I can't use cmd as I need to specify the credentials each time.
I have delved into the comobject a little but I don't really understand this. I would be more than happy to use this if I could figure out the triggers, basically I need it to run 6 days a week (excluding Sunday) at a specific time once a day.
I think ive got the action and arguments down but it's the trigger im struggling with understanding.
This is the block im working on which was liberated from here, so all credit there!
try {
[Object] $objScheduledTask = New-Object -ComObject("Schedule.Service")
if (!($objScheduledTask.Connected)) {
try {
$objScheduledTask.Connect($env:COMPUTERNAME)
$objScheduledTask_Folder = $objScheduledTask.GetFolder('\')
$objScheduledTask_TaskDefinition = $objScheduledTask.NewTask(0)
#Registration / Definitions
$objScheduledTask_RegistrationInfo = $objScheduledTask_TaskDefinition.RegistrationInfo
$objScheduledTask_RegistrationInfo.Description = 'My task name'
#Define Settings
$objScheduledTask_Settings = $objScheduledTask_TaskDefinition.Settings
$objScheduledTask_Settings.Enabled = $True
$objScheduledTask_Settings.StartWhenAvailable = $True
$objScheduledTask_Settings.Hidden = $False
#Triggers
$objScheduledTask_Triggers = $objScheduledTask_TaskDefinition.Triggers
$objScheduledTask_Trigger = $objScheduledTask_Triggers.Create(2)
$objScheduledTask_Trigger.StartBoundary = "2011-10-01T04:00:00"
$objScheduledTask_Trigger.DaysInterval = 1
$objScheduledTask_Trigger.Id = "DailyTriggerId"
$objScheduledTask_Trigger.Enabled = $True
#Action
$objScheduledTask_Action = $objScheduledTask_TaskDefinition.Actions.Create(0)
$objScheduledTask_Action.Path = 'task\to\execute.exe'
$objScheduledTask_Action.Arguments = ''
$objScheduledTask_Action.WorkingDirectory = 'C:\'
#Create Task
$objScheduledTask_Folder.RegisterTaskDefinition('Sample Scheduled Task Description', $objScheduledTask_TaskDefinition, 6, "System", $null , 5) | out-null
Write-Host "Scheduled Task Created Successfully" -ForegroundColor Green
} catch [System.Exception] {
Write-Host "Scheduled Task Creation Failed" -ForegroundColor Red
}
}
} catch [System.Exception]{
Write-Host "Scheduled Task Creation Failed" -ForegroundColor Red
Write-Host " EXCEPTION:" $_ -ForegroundColor Red
}
You need a weekly trigger instead of a daily trigger if you want to run a task on selected days per week. The DaysOfWeek
property specifies the days as a bitmask in an integer value.
$objScheduledTask_Triggers = $objScheduledTask_TaskDefinition.Triggers
$objScheduledTask_Trigger = $objScheduledTask_Triggers.Create(3)
$objScheduledTask_Trigger.StartBoundary = '2011-10-01T04:00:00'
$objScheduledTask_Trigger.WeeksInterval = 1 # run every week
$objScheduledTask_Trigger.DaysOfWeek = 126 # Mo-Sa
$objScheduledTask_Trigger.Id = 'DailyTriggerId'
$objScheduledTask_Trigger.Enabled = $true