4 votos

Programar una tarea única para que se ejecute en el arranque de Windows Server 2012R2

Como parte de la automatización de la construcción del sistema script (que estoy utilizando para crear AMIs de AWS), quiero que el sistema se reinicie y luego ejecute tareas adicionales de configuración post-arranque - pero sólo una vez (de modo que cuando el sistema es imaginado y luego la imagen se utiliza para iniciar una nueva instancia, no se ejecutarán las tareas de configuración post-arranque de nuevo).

La forma en que empecé a implementar esto es que la configuración inicial script (escrito en Powershell) utiliza Register-ScheduleJob -Trigger (New-JobTrigger -AtStartup) ... -Name PostBootSetup para configurar otro Powershell script que se ejecute inmediatamente después del arranque. En el script posterior al arranque, tengo:

Get-JobTrigger -Name PostBootSetup | ?{$_.Enabled} | Disable-JobTrigger

Pero cuando se ejecuta me sale este error (estoy registrando toda la salida del scriptposterior al arranque en un archivo):

Powershell : A scheduled job definition with Name PostBootSetup could not be found.

Lo cual es extraño porque esa es la salida del trabajo que se está ejecutando actualmente. También he añadido llamadas simples a Get-ScheduledJob y Get-JobTrigger -Name PostBootSetup que debería dar salida a los registros relevantes, pero no hay absolutamente ninguna salida de estos - aunque si ejecuto estos comandos en una consola de Powershell después de que la máquina se inicie, obtengo la salida esperada.

¿Es posible que un trabajo no pueda acceder a su propio registro de trabajo programado mientras se está ejecutando? Si es así, ¿hay alguna solución? o ¿me estoy perdiendo algo? Si este no es un buen método para hacer un trabajo único post-arranque, ¿qué sugeriría?

Como nota adicional, no me siento muy cómodo en batch, por lo que agradecería soluciones que utilicen Powershell o .Net o algo que sea más expresivo que batch.

3voto

Craig620 Puntos 1580

Utilice una de las claves de registro de RunOnce, que fueron diseñadas exactamente para este tipo de tarea.
Corren una vez y luego desaparecen.

HKEY_LOCAL_MACHINE \Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\RunOnce

Hacer una nueva clave de valor de cadena donde el nombre es lo que sea, y los datos es el EXE CLI y cambia a lo que desea ejecutar.
https://msdn.microsoft.com/en-us/library/Windows/desktop/aa376977%28v=vs.85%29.aspx

PS C:\> new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce -name "myInstall" -value '"c:\temp\borland\setup.exe" /this /that /other'

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: