windows powershell startup

windows - Powershell ejecuta un trabajo al inicio con derechos de administrador usando ScheduledJob



startup (4)

Aquí hay un artículo del blog de Microsoft que puede verificar, si su tarea programada no se está ejecutando: https://blogs.technet.microsoft.com/askperf/2015/02/18/help-my-scheduled-task-does-not-run/

Como también se menciona en otras respuestas aquí también dice:

  • Intenta ejecutar tu script con la cuenta del SISTEMA

Para facilitar algo de mi trabajo, he creado un script de powershell que necesita:

  1. Ejecutar en el arranque.
  2. Ejecute con derechos de administrador ya que tiene que escribir en la carpeta c: / archivos de programa.

Creé el servicio de inicio usando powershell como este:

function MakeStartupService { Write-Host "Adding script as a startup service" $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:15 Try { Register-ScheduledJob -Trigger $trigger -FilePath "absolute_path" -Name "Job-name" -EA Stop } Catch [system.exception] { Write-Host "Looks like an existing startup service exists for the same. Overwriting existing job" Unregister-ScheduledJob "Job-name" Register-ScheduledJob -Trigger $trigger -FilePath "absolute_path" -Name "Job-name" } }

El trabajo se registra como un servicio de inicio con éxito y es visible dentro del programador de tareas. Si lo empiezo con Start-Job -DefinitionName Job-name o haciendo clic derecho en el Programador de tareas, funciona bien pero no se inicia cuando se inicia Windows.

Actualmente estoy probando esto en mi sistema personal de Windows 10, y he comprobado en otro sistema de Windows 10 pero el comportamiento sigue siendo el nombre. Adjunto una captura de pantalla de la ventana del programador de tareas para este trabajo.

Lo siento si esta pregunta suena repetida o tonta (soy un principiante en PowerShell), pero créanme, ninguna de las soluciones que encontré en línea funcionó para esto.

Gracias por adelantado !!


Este es un código que ya está en producción y que uso. Si no funciona para usted, debe haber algo más en su sistema.

function Invoke-PrepareScheduledTask { $taskName = "UCM_MSSQL" $task = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue if ($task -ne $null) { Unregister-ScheduledTask -TaskName $taskName -Confirm:$false } # TODO: EDIT THIS STUFF AS NEEDED... $action = New-ScheduledTaskAction -Execute ''powershell.exe'' -Argument ''-File "C:/Invoke-MYSCRIPT.ps1"'' $trigger = New-ScheduledTaskTrigger -AtStartup -RandomDelay 00:00:30 $settings = New-ScheduledTaskSettingsSet -Compatibility Win8 $principal = New-ScheduledTaskPrincipal -UserId SYSTEM -LogonType ServiceAccount -RunLevel Highest $definition = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger -Settings $settings -Description "Run $($taskName) at startup" Register-ScheduledTask -TaskName $taskName -InputObject $definition $task = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue # TODO: LOG AS NEEDED... if ($task -ne $null) { Write-Output "Created scheduled task: ''$($task.ToString())''." } else { Write-Output "Created scheduled task: FAILED." } }


Marque la casilla de verificación " Ejecutar con los privilegios más altos " para la tarea en el programador de tareas e intente nuevamente. Actualmente en la captura de pantalla anterior está desactivada.

Lo he circulado abajo en rojo para su fácil referencia:


Si funciona, no es un problema de script. Asígnelo a la cuenta del SISTEMA o cree una cuenta de servicio por separado en lugar de la cuenta Gagan que se muestra. Asegúrese de que la cuenta de servicio tenga "Permiso para ejecutarse como trabajo por lotes" en su política de seguridad local.