Définir une tâche programmée à exécuter lorsque l'utilisateur n'est pas connecté

j'ai utilisé le Powershell tâche programmée Cmdlets pour créer une tâche programmée sur nos serveurs.

Comment puis-je choisir de 'lancer si l'utilisateur est connecté ou non' en utilisant cette API?

j'ai créé action , trigger , principal et settings , et passé à Register-ScheduledTask , comme ci-dessous:

$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 "mypath" -Action $action -Trigger $trigger -Settings $settings -Principal $principal

quand je crée une tâche programmée comme celle-ci, elle est par défaut 'Exécuter uniquement lorsque l'utilisateur est connecté'.

cette question montre comment le faire en utilisant des objets COM, et celle-ci en utilisant des schtasks.exe, mais comment utiliser les cmdlets *-ScheduledTask* ?

20
demandé sur Community 2012-12-20 09:41:53

4 réponses

vous devez supprimer $ principal et enregistrer la tâche avec un utilisateur et mot de passe:

Register-ScheduledTask -TaskName $taskname `
                       -TaskPath "\my\path" `
                       -Action $action `
                       -Trigger $trigger `
                       -User "$env:USERDOMAIN$env:USERNAME" `
                       -Password 'P@ssw0rd' `
                       -Settings $settings
19
répondu Shay Levy 2013-08-08 18:56:13

Je n'aime pas ou n'approuve pas la réponse actuellement la mieux cotée car alors vous devez connaître vos références dans un script pour le faire et ne pouvez pas le faire à partir de quelque chose comme Packer ou une autre automatisation de système/configuration. Il y a une meilleure/bonne façon de le faire que Aeyoun a mentionné mais n'est pas entré dans les détails sur ce qui est de bien définir le principal à exécuter en tant qu'utilisateur du système.

$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 Parallel

Register-ScheduledTask -TaskName "tasknamehere" -TaskPath "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal
24
répondu Farley 2016-10-05 13:50:29

l'option "Exécuter si l'utilisateur est connecté ou non" dans le GUI du Planificateur de tâches est équivalente à New-ScheduledTaskPrincipal -LogonType S4U .

12
répondu Aeyoun 2016-03-28 15:45:13

vérification du niveau de L'exécution de la commande:

RunLevel

spécifie le niveau de privilège requis pour exécuter des tâches qui sont associé au principal.

p.ex.:" plus élevé "ou" limité

0
répondu Tilo 2016-02-15 20:32:05