This topic contains 4 replies, has 5 voices, and was last updated by
May 13, 2016 at 3:55 am #39034ParticipantPoints: 1Rank: Member
I'm creating a Scheduled task from SCCM as follows
$Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-NonInteractive -NoLogo -NoProfile -File '$env:windir\UserCustomisations.ps1'"
$Trigger = New-ScheduledTaskTrigger -AtLogOn
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'CBC User Customisations' -Description 'Created by SCCM Build. Runs at logon under users own credential to run user specific customisations'
This is fine BUT I want it to run under user context at logon time. I found an article about changing (manually) the run as to the "users" group and that appears to work, but what I can't do is to get that name into the Powershell cmd. I've tried saying -user 'Users' and 'Builtin\Users' but PS just throw up an error – I assume because its looking for a user rather than a group. Any thoughts ??
May 21, 2016 at 9:20 pm #39472KeymasterPoints: 1,673Rank: Community Hero
As near as I can tell, the PowerShell cmdlets just weren't coded with this capability. You might just try using good ol' SchTasks.exe. It'll run fine in PowerShell.
January 30, 2017 at 1:59 pm #63000ParticipantPoints: 21Rank: Member
Here's a quick example that will create a scheduled task that will run notepad in the context of the logged on user and then delete itself:
$action = New-ScheduledTaskAction -Execute "notepad.exe"
$trigger = New-ScheduledTaskTrigger -AtLogOn
$principal = New-ScheduledTaskPrincipal -UserId (Get-CimInstance –ClassName Win32_ComputerSystem | Select-Object -expand UserName)
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal
Register-ScheduledTask Notepad -InputObject $task
Start-ScheduledTask -TaskName Notepad
Start-Sleep -Seconds 5
Unregister-ScheduledTask -TaskName notepad -Confirm:$false
February 13, 2017 at 11:35 am #64084ParticipantPoints: 0Rank: Member
Here's the code that runs the necessary task on any user's log on. This is direct COM programming, so it works on Windows versions previous to 10 that are incompatible with New-ScheduledTaskAction etc commands as well.
$ShedService = New-Object -comobject 'Schedule.Service' $ShedService.Connect('Computer_Name', 'User_Name', 'Domain_Name', 'Password') $Task = $ShedService.NewTask(0) $Task.RegistrationInfo.Description = 'Description goes here' $Task.Settings.Enabled = $true $Task.Settings.AllowDemandStart = $true $trigger = $task.triggers.Create(9) $trigger.Enabled = $true $action = $Task.Actions.Create(0) $action.Path = 'C:\Path\To\file.exe' $action.Arguments = '-arguments -if -any' $taskFolder = $ShedService.GetFolder("\") $taskFolder.RegisterTaskDefinition('Task_Name', $Task , 6, 'Users', $null, 4)
To schedule a task on localhost simplify the Connect() method:
In this expression
$trigger = $task.triggers.Create(8)
9 – at user logon,
Other triggers, like daily, monthly etc are listed here.
$ShedService.GetFolder("\") – is Task Scheduler's root folder, you change that if your task needs to be in a custom one.
$taskFolder.RegisterTaskDefinition("Task_Name", $Task , 6, 'Users', $null, 4)
6 is a bitmask to create new or update an existing task. $null – we don't need password if we use group, generally this and the previous arguments correspond to /RU and /RP in schtasks.exe which is the 'run as user' context. And 4 stands for 'TASK_LOGON_GROUP', this is crucial for assigning task to a user group, you'll get exceptions otherwise. Other options are listed here.
February 15, 2018 at 5:34 pm #93718ParticipantPoints: 11Rank: Member
This script is perfect, well almost. Can I use it to create as scheduled task with multiple triggers? I'd like to add a trigger so the task runs when it is registered, in addition to running at each user login.
The topic ‘Create Scheduled task - run as logged on user’ is closed to new replies.