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