Search code examples
powershellscheduled-taskspowershell-3.0windows-server-2012

Powershell: Set a Scheduled Task to run when user isn't logged in


I have been using the Powershell Scheduled Task Cmdlets to create a scheduled task on our servers.

How do I elect to 'Run whether a user is logged in or not using this API?

I've created action, trigger, principal and settings objects, and passed them to Register-ScheduledTask, as below:

$action = New-ScheduledTaskAction -Execute foo.exe -Argument "bar baz"
$trigger = New-ScheduledTaskTrigger -Once -At $startTime -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([Timespan]::MaxValue)
$principal = New-ScheduledTaskPrincipal -UserId "$($env:USERDOMAIN)\$($env:USERNAME)" -LogonType ServiceAccount
$settings = New-ScheduledTaskSettingsSet -MultipleInstances Parallel

Register-ScheduledTask -TaskName $taskName -TaskPath "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal

When I create a scheduled task like this, it defaults to 'Run only when the user is logged on.

This question shows how to do so using COM objects, and this one using schtasks.exe, but how do I do it using the *-ScheduledTask* cmdlets?


Solution

  • You need to remove $principal and register the task with a user and password:

    Register-ScheduledTask -TaskName $taskname `
                           -TaskPath "\my\path" `
                           -Action $action `
                           -Trigger $trigger `
                           -User "$env:USERDOMAIN\$env:USERNAME" `
                           -Password 'P@ssw0rd' `
                           -Settings $settings