powershell - script - Establecer una tarea programada para ejecutar cuando el usuario no está conectado
ejecutar script sql tarea programada (4)
Debe eliminar $ principal y registrar la tarea con un usuario y contraseña:
Register-ScheduledTask -TaskName $taskname `
-TaskPath "/my/path" `
-Action $action `
-Trigger $trigger `
-User "$env:USERDOMAIN/$env:USERNAME" `
-Password ''P@ssw0rd'' `
-Settings $settings
He estado usando los cmdlets de tareas programadas de Powershell para crear una tarea programada en nuestros servidores.
¿Cómo elijo ''Ejecutar si el usuario está conectado o no'' usando esta API?
settings
objetos de action
, trigger
, principal
y settings
, y los pasé a Register-ScheduledTask
, como a continuación:
$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
Cuando creo una tarea programada como esta, su valor predeterminado es ''Ejecutar solo cuando el usuario está conectado''.
Esta pregunta muestra cómo hacerlo usando objetos COM, y esta usando schtasks.exe, pero ¿cómo lo hago usando los cmdlets *-ScheduledTask*
?
también controla la verificación de nivel de ejecución:
RunLevel
Especifica el nivel de privilegio requerido para ejecutar tareas que están asociadas con el principal.
por ejemplo: "más alto" o "limitado"
La opción "Ejecutar si el usuario ha iniciado sesión o no" en la GUI del Programador de tareas es equivalente a New-ScheduledTaskPrincipal -LogonType S4U
.
No me gusta o no estoy de acuerdo con la respuesta actualmente mejor calificada, ya que entonces debe conocer sus credenciales en un script para hacer esto y no puede hacerlo a partir de Packer u otro sistema / automatización de configuración. Hay una manera mejor / adecuada para hacer esto que Aeyoun mencionó pero no entró en detalles sobre cuál es establecer correctamente el principal para que se ejecute como el usuario del sistema.
$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