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

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


I do not like or approve of the currently highest rated answer as then you have to know your credentials into a script to do this and can't do this from something like Packer or some other system/configuration automation. There is a better/proper way to do this which Aeyoun mentioned but didn't go into details about which is to properly set the principal to run as the system user.

$action = New-ScheduledTaskAction -Execute foo.exe -Argument "bar baz"$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([Timespan]::MaxValue)$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest$settings = New-ScheduledTaskSettingsSet -MultipleInstances ParallelRegister-ScheduledTask -TaskName "tasknamehere" -TaskPath "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal


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


The “Run whether user is logged in or not” option in the Task Scheduler GUI is equivalent to New-ScheduledTaskPrincipal -LogonType S4U.