¿Cómo programo un archivo por lotes para que se ejecute al inicio o al apagar?

¿Cómo programo un archivo por lotes para que se ejecute al inicio o al apagar?

Tengo 2 archivos por lotes que envían correos electrónicos destinados a notificar el apagado o inicio del servidor. Los archivos por lotes llaman a un exe con un único argumento, el mensaje que se enviará. El exe proviene de un programa vb.net que utiliza system.net.mail.

Los archivos por lotes funcionan correctamente desde un símbolo del sistema y se reciben correos electrónicos.

Ahora quiero que estos archivos por lotes se ejecuten automáticamente cuando se inicia el sistema operativo y cuando se apaga, sin que ningún usuario tenga que iniciar sesión.

Intenté probar esto en una máquina Win 8.1 que creo que debería funcionar igual que en Server 2012 R2. Si esta es una mala suposición, por favor avise.

Así que esto es lo que probé:

1) Programador de tareas (pero solo para el inicio, no hay opción de apagado)

2) Editor de políticas de grupo local > Configuración de la computadora > Configuración de Windows > Scripts (Inicio/Apagado)

En ambos casos, la configuración parecía bastante sencilla, pero los correos electrónicos nunca se envían.

¿Alguien puede darme ideas sobre consideraciones en las que claramente no estoy pensando?

¿El problema son los permisos? ¿Cómo sabría eso?

¿El problema es "Parece programado pero no lo es"?

¿El problema es que los archivos por lotes no se pueden utilizar de esta manera?

Como es la primera vez que hago esto, estoy bastante seguro de que me falta algo básico.

Respuesta1

Esto realmente no es una respuesta debido a las dos limitaciones que se indican a continuación, pero es demasiado largo para un comentario, así que...

Hice una prueba simple con las siguientes dos deficiencias:

  1. Los scripts no envían correo electrónico. Necesito el relé SMTP de mi ISP, pero es muy complicado encontrarlo.
  2. Estoy probando en una vista previa de Win10, no en Win8.1. Es todo lo que tengo esta noche.

Dentro de Local Group Policy Editor > Computer Configuration > Windows Settings > Scripts (Startup/Shutdown), puse un script de PowerShell de inicio en el startupdirectorio y un script de PowerShell de apagado en el shutdowndirectorio.

He tenido especial cuidado en agregar los scripts debajo de la Powershell Scriptspestaña dentro de cada uno de los nodos de política de inicio y apagado.

Me aseguré de tener un directorio llamado c:\tempporque era demasiado vago para crearlo.

También me aseguré de que los scripts de PowerShell estén permitidos ejecutando:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Aquí está el script de inicio:

if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date 
$string = "$timestamp UP!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber

Aquí está el script de apagado:

if (!(Test-Path c:\temp\log.txt)) {New-Item -ItemType file -Path c:\temp\log.txt}
$timestamp = get-date 
$string = "$timestamp DOWN!"
$string | Out-File -FilePath c:\temp\log.txt -Append -NoClobber

Luego reinicié la computadora. Aquí está el contenido del c:\temp\log.txtarchivo:

06/01/2015 00:07:45 DOWN!
06/01/2015 00:08:10 UP!

Esperaría el mismo resultado al enviar un correo, pero, por supuesto, uno no puede estar seguro hasta que lo intente.

Respuesta2

Estudiar y utilizar los comentarios y respuestas de todos realmente ayudó a resolver mi problema, pero como suele ser el caso, el problema real era algo diferente. Por lo tanto, me siento obligado a publicar lo que resultó ser el problema real para mí en caso de que alguien más quede atrapado en el mismo problema.

Durante la prueba del scriptparecióes más conveniente trabajar en mi máquina Win 8.1; resulta que no lo fue. Yo teníaficticioDe hecho, mi máquina Win 8.1 funcionaría de manera idéntica al servidor 2012 R2; mi suposición estaba equivocada.

En el instante en que moví todo a mis servidores 2012 R2, los scripts funcionaron perfectamente y lo han hecho desde entonces. No puedo explicar por qué la máquina Win 8.1 reaccionó de manera diferente, simplemente lo hizo.

Entonces, mi solución fue ya no usar una máquina Win 8 u 8.1 para probar los scripts de inicio/apagado, simplemente hacerlo en el servidor de destino.

(Perdón por la demora en la respuesta, estuve fuera de la ciudad en un viaje prolongado)

Respuesta3

Vaya al visor de eventos, busque eventos de seguridad de inicio y cierre de sesión, haga clic derecho sobre él y agregue una tarea para este evento que envía un correo electrónico.

Es la mejor manera.

información relacionada