miércoles, 2 de julio de 2014

Windows 8 - Programador de tareas - ejecutar scripts al inicio del sistema

Recientemente hice algo que no se debería hacer. Instalé Windows 8 de 32 bits en un equipo con una placa base algo anticuada. Windows 8 reconocía la red y sonidos integrados, para tener un rendimiento gráfico decente tuve que poner una gráfica. Esta placa de la que hablo tiene ranura AGP x8 así que con eso les digo todo de qué generación es la placa base.

Algo curioso que le ocurre a Windows 8 con esta placa base es que si bien instala los drivers para el sonido y red integrados, ambos se comportan de una forma muy extraña. El sonido a menudo inicia mudo y para solucionarlo hay que estar cambiando entre estéreo y 5.1 constantemente. Y la red empieza sin acceso a internet (no es problema de cables) y hay que estar deshabilitando la conexión y volviéndola a habilitar. Ambos problemas los solucioné usando tarjetas PCI. Una tarjeta de sonido barata resolvió lo del audio, y una tarjeta de red barata resolvió lo que ocurre con la red integrada. Hace unos días a la tarjeta de red PCI se le dio por morirse y quedé con la red integrada hasta poder conseguir otra tarjeta de red PCI. Ahora bien, si bien anda correctamente vuelve ese pequeño problemita de que al encender el equipo hay que estar deshabilitando la conexión y volviéndola a habilitar para poder navegar por internet, ya que sin realizar este proceso no es posible usar la red. Entonces se me ocurrió la idea de usar un bat para automatizar esto de deshabilitar y habilitar. El código que el bat ejecuta es el siguiente:

netsh interface set interface name="Ethernet" admin=disabled
netsh interface set interface name="Ethernet" admin=enabled

Ethernet es el nombre que le quedó a mi conexión. Normalmente suele ser "Conexión de área local" pero en mi caso quedó "Ethernet". Si el lector trata de copiar ese código nada más tener en cuenta que su conexión puede no llamarse así.

Lo guardé en C:\NetworkFix\NetworkFix.bat

El script hacía el trabajo. Y luego de ejecutarlo el resultado era el buscado, lo mismo que ir a Panel de control -> Centro de redes y recursos compartidos -> Cambiar configuración del adaptador y deshabilitar y habilitar el adaptador por medio del menú contextual. Luego de ejecutar el script se podía navegar con normalidad.

Luego quise crear una tarea en el Programador de tareas para asegurarme de que el script se ejecutara al inicio del sistema sin importar qué usuario iniciara sesión. Para esto creé la tarea de la siguiente manera.

Nombre: Fix para la red
Ubicación: \
Configurar para: Windows 8
Desencadenadores: Al iniciar el sistema
Acciones:
    Iniciar un programa: C:\Windows\System32\cmd.exe /c C:\NetworkFix\NetworkFix.bat
Al ejecutar la tarea, usar esta cuenta de usuario: [Mi cuenta]
Ejecutar tanto si el usuario inicia sesión como si no: Sí
No almacenar la contraseña: No
Ejecutar con los privilegios más elevados: Sí

Probé a apagar y encender el equipo y la tarea no se ejecutaba. Esto lo podemos verificar en el Programador de tareas al ver la fecha de la última ejecución. Nunca se registraba la última ejecución, indicando que la tarea no se estaba ejecutando. Si se ejecutaba la tarea manualmente, o sea, en el Programador de tareas haciendo clic derecho sobre la tarea y luego clic en "Ejecutar" entonces sí se ejecutaba y el efecto era el buscado. Pero no había forma de hacer que se ejecutara la inicio del sistema. Probé varias cosas, por ejemplo al principio en "Configurar para" dejé la opción por defecto que es "Windows Vista, Windows Server 2008" y sólo después de ver que no funcionaba lo cambié a "Windows 8". Pensé que podía deberse a un tema de permisos pero como la tarea se ejecutaba bien si la ejecutaba manualmente no podía ser eso.

Después de darle vueltas al asunto por algún tiempo pensé que quizá este era otro de los tantos problemas ocasionados por la característica de Fast Boot de Windows 8. El desencadenador "Al iniciar el sistema" debería incluir también los booteos rápidos, pero al parecer no era así. Confirmarlo en internet fue muy fácil, sólo necesité una búsqueda y en la primera página de resultados encontré que a otra persona le había ocurrido lo mismo. Esa persona lo solucionó desactivando el Fast Boot en opciones de energía, pero yo no quería recurrir a eso, ya que Fast Boot hace posible iniciar el sistema en un tiempo absurdamente rápido en comparación con versiones anteriores de Windows. Si no voy a usar cosas como Fast Boot, ¿para qué actualicé a Windows 8?

La única solución que encontré para que la tarea se ejecutara fue cambiarle el desencadenador. En vez de "Al iniciar el sistema" lo puse en "Al iniciar la sesión un usuario".

Nombre: Fix para la red
Ubicación: \
Configurar para: Windows 8
Desencadenadores: Al iniciar la sesión un usuario
Acciones:
    Iniciar un programa: C:\Windows\System32\cmd.exe /c C:\NetworkFix\NetworkFix.bat
Al ejecutar la tarea, usar esta cuenta de usuario: [Mi cuenta]
Ejecutar tanto si el usuario inicia sesión como si no: Sí
No almacenar la contraseña: No
Ejecutar con los privilegios más elevados: Sí

Así conseguí que funcionara. Es más, creo que no voy a comprar otro adaptador de red PCI, lo voy a dejar así, ya que el adaptador integrado, en Windows 8 sólo presenta este problema al inicio, el resto del tiempo trabaja bien.

Algunas cosas a tener en cuenta:

Al principio quise configurar la tarea para que se ejecutara bajo la cuenta del sistema. Esto no es buena idea en realidad. Así que después lo puse bajo mi propia cuenta. Para que no esté preguntando mi contraseña lo que hice fue desmarcar la opción "No almacenar la contraseña" que por defecto viene marcada. Ahora bien, yo hice esto por pura pereza. Lo correcto desde el punto de vista de la seguridad de nuestra cuenta, sería crear otra cuenta llamada por ejemplo "ScriptRunner" y ponerle una contraseña diferente a la de nuestra sesión de uso diario, y darle permisos de administrador a esa cuenta. Entonces correr la tarea bajo ese usuario, así queda guardada la contraseña de ese usuario y no la nuestra, que por muy encriptada que esté siempre es mejor que no quede guardada en ningún lado más que en nuestra memoria.

La tarea, configurada de esta manera, se ejecuta cuando el usuario inicia sesión. No es necesario ir al escritorio, ya se ejecuta al ver el "Start Screen" (Pantalla de inicio) de Windows 8.

Si el equipo es de bajo rendimiento, puede que no tengamos la interfaz de red habilitada para el momento en que lanzamos Internet Explorer en modo Metro (aunque ya no se llama así pero ustedes me entienden). Si nos sale que no se puede conectar a la red es cuestión de esperar un poco y darle a Recargar página.

0 comentarios:

Publicar un comentario