web-dev-qa-db-fra.com

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

J'utilise les Cmdlets Powershell Scheduled Task pour créer une tâche planifiée sur nos serveurs. 

Comment choisir "Exécuter si l'utilisateur est connecté ou non" à l'aide de cette API?

J'ai créé les objets action, trigger, principal et settings et les ai passés à 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 "\my\path" -Action $action -Trigger $trigger -Settings $settings -Principal $principal

Lorsque je crée une tâche planifiée comme celle-ci, la valeur par défaut est «Exécuter uniquement lorsque l'utilisateur est connecté».

Cette question montre comment procéder à l'aide d'objets COM et celui-ci à l'aide de schtasks.exe, mais comment le faire à l'aide des applets de commande *-ScheduledTask*?

22
Peter

Vous devez supprimer $ principal et enregistrer la tâche avec un utilisateur et un 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
Shay Levy

Je n'aime pas ou n'approuve pas la réponse la mieux notée actuellement, car vous devez connaître vos informations d'identification dans un script pour le faire. Vous ne pouvez pas le faire à partir de quelque chose comme Packer ou une autre automatisation de système/configuration. Il existe un moyen meilleur/approprié de le faire, ce qu'Aeyoun a mentionné, sans entrer dans les détails, qui consiste à configurer correctement le principal pour qu'il s'exécute 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
29
Farley

L'option «Exécuter si l'utilisateur est connecté ou non» dans l'interface graphique du planificateur de tâches équivaut à New-ScheduledTaskPrincipal -LogonType S4U.

13
Aeyoun

contrôle également la vérification du niveau d'exécution: 

RunLevel  

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

exemple: "le plus élevé" ou "limité"

0
Tilo