tarea script programada para ejecutar desde crear bat powershell scheduled-tasks powershell-v3.0 windows-server-2012

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