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*
?
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
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
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
.
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é"