Script que no se inicia correctamente en tarea programada

adgm1 Mensajes publicados 306 Estado Miembro -  
adgm1 Mensajes publicados 306 Estado Miembro -

Hola,

Tengo un script que consiste en poner en lista negra los SSID wifi en caso de descubrir un SSID particular. Todo funciona cuando ejecuto mi batch que a su vez debe ejecutar un script .vbs en una condición particular.

El problema surge cuando programo mi script como tarea programada al iniciar sesión o al desbloquear. Sin embargo, activo los permisos máximos y con la cuenta SYSTEM.

El .vbs no logra activar el wifi aunque lo hace muy bien cuando se lanza manualmente. ¿Alguna idea de por qué los comandos sendkeys no se ejecutan?

El batch:

@echo off chcp 65001 >nul setlocal enabledelayedexpansion :checkwifi REM verificar que el wifi esté encendido netsh wlan show networks if %errorlevel% equ 0 goto listwifi else do ( call "C:\toggle_wifi_on.vbs" goto CHECKSSID ) :listwifi REM listar redes wifi cercanas netsh wlan show networks > "c:\listwifi.txt" goto CHECKSSID :CHECKSSID netsh wlan show networks > "c:\listwifi.txt" set var="freeboxAD" findstr /i %var% "c:\listwifi.txt" >nul if %errorlevel% equ 1 ( REM desbloquear la lista negra y re-autorizar todos los SSID netsh wlan delete filter permission=denyall networktype=infrastructure ) else ( REM poner en lista negra SSID extranjeros y autorizar SSID de trabajo netsh wlan add filter permission=denyall networktype=infrastructure netsh wlan add filter permission=allow ssid="FreeboxAD" networktype=infrastructure ) exit 

El .vbs:

set WshShell = Wscript.createObject("WScript.Shell") WshShell.run "ms-availablenetworks:" WScript.Sleep (1000) WshShell.SendKeys ("+{TAB}") WshShell.SendKeys (" ") WScript.Sleep(700) WshShell.SendKeys ("{ESC}")


6 respuestas

fabul Mensajes publicados 42079 Fecha de registro   Estado Moderador Última intervención   6 054
 

Hola,

En una tarea programada, para un script, debes indicar el %Path%

(La carpeta donde se encuentra el archivo (Ej: C:\Users\x))

(Comenzar en (Opcional)) además de la ruta completa del archivo.

Si no lo has hecho, puede fallar así...

0
adgm1 Mensajes publicados 306 Estado Miembro 10
 

ok, ¿puedes decirme más sobre este tema? Veo bien la sección "comenzar en" en la pestaña de acción, pero ¿qué %path% debo poner? ¿El mismo que donde están mis 2 archivos? ¿es decir, el C:\?

0
fabul Mensajes publicados 42079 Fecha de registro   Estado Moderador Última intervención   6 054
 

El mismo camino sin \Ejemplo.bat

La carpeta en la que se encuentra el archivo script.

Nunca lo pongo directamente en C:\

C:\Users\x funciona para mí cuando el batch está en la carpeta x

Directamente en C: puede ser C: sin \ no sé si es posible.

0
brucine Mensajes publicados 24677 Fecha de registro   Estado Miembro Última intervención   4 146
 

Hola,

Aparte del problema del vbs que podría o no ser leído al inicio y de los permisos, para ejecutar un batch en una tarea programada (aunque el archivo cmd no esté en el PATH), especifico la ruta completamente cualificada:

pero no se trata de batchs lanzados al inicio (y para los cuales de todos modos se tendrá que marcar ejecutar incluso si el usuario no está conectado y también usar, supongo, la contraseña adecuada); la única tarea programada que tengo al inicio es el lanzamiento de mi software de seguridad y que no tiene nada de específico excepto que la cuenta de usuario es "INTERACTIVO", desconocido en la batalla.

0
adgm1 Mensajes publicados 306 Estado Miembro 10 > brucine Mensajes publicados 24677 Fecha de registro   Estado Miembro Última intervención  
 

Hola brucine. Creo haber encontrado lo que bloquea mi vbs. Parece que en la tarea programada, en la pestaña general, si se elige la cuenta del sistema, se activa obligatoriamente "ejecutar incluso si el usuario no está conectado". Por lo tanto, hay que elegir la cuenta de usuario y marcar la opción 1 (ejecutar solo si está conectado), así el vbs se ejecuta correctamente. Extraño. Lástima porque con esta configuración de tarea programada la ventana de aviso es visible, mientras que todo era invisible con la cuenta "SISTEMA".

0
brucine Mensajes publicados 24677 Fecha de registro   Estado Miembro Última intervención   4 146 > adgm1 Mensajes publicados 306 Estado Miembro
 

Intenta hacer trampa poniendo en tarea programada no el batch, sino un acceso directo, propiedades, ejecutar en ventana reducida.

0
adgm1 Mensajes publicados 306 Estado Miembro 10 > brucine Mensajes publicados 24677 Fecha de registro   Estado Miembro Última intervención  
 

de hecho, el gran problema si elijo la cuenta de usuario es que el comando netsh no es aceptado desde una sesión estándar porque no tengo los permisos suficientes. Absolutamente necesito usar la cuenta SYSTEM, pero debido a eso el vbs se detiene en medio. Es extraño porque el vbs se inicia bien y ejecuta el primer comando (abrir el menú wifi), las otras quedan en espera y simplemente se bloquean (sendkeys)

0
adgm1 Mensajes publicados 306 Estado Miembro 10
 

No parece que cambie mucho. De hecho, el .vbs que se lanza parece necesitar mantener una actividad para validar las acciones de envío de teclas (mayús+tab en este caso), de lo contrario, las acciones no se encadenan y se quedan atascadas en el primer paso, que es abrir la configuración de Wi-Fi en la barra de tareas.

Así que, en resumen, mi .vbs se inicia correctamente al abrir sesión (si el Wi-Fi está apagado), pero no realiza todos los comandos solicitados.

0
barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
 

Hola,

En lugar de usar SendKeys, ¿has probado directamente en batch con un comando de este tipo:

netsh interface set interface name="Conexión de red inalámbrica" admin=enabled

Si no funciona, habría que mirar del lado de PowerShell.


0
brucine Mensajes publicados 24677 Fecha de registro   Estado Miembro Última intervención   4 146
 

En efecto, tengo algo de este tipo que, por cierto, no me sirve para nada, no sé por qué lo hice, que alterna de Wifi a Ethernet y el liceo de Versalles (pero que requiere verificar previamente el índice correspondiente al adaptador de red en cuestión):

@echo off CHCP 65001>NUL setlocal enableextensions setlocal EnableDelayedExpansion FOR /F "skip=5 tokens=2,4 delims= " %%a IN ('netsh interface show interface') DO ( SET STATUT=%%a & SET NATURE=%%b SET STATUT=!STATUT:~0,-1! IF "!STATUT!"=="Conectado" ( IF "!NATURE!"=="Ethernet" ( netsh interface set interface name="!NATURE!" admin=DISABLED ) ELSE wmic path win32_networkadapter where index=2 call disable ) IF "!STATUT!"=="Desconectado" ( IF "!NATURE!"=="Ethernet" ( netsh interface set interface name="!NATURE!" admin=ENABLED ) ELSE wmic path win32_networkadapter where index=2 call enable & netsh interface ipv4 set interface "Wi-Fi" metric=1 & netsh wlan connect name ="SFR_A918" ) ) 
0
adgm1 Mensajes publicados 306 Estado Miembro 10 > brucine Mensajes publicados 24677 Fecha de registro   Estado Miembro Última intervención  
 

Gracias por esta propuesta. De hecho, los comandos netsh o wmic no permiten activar la señal wifi (botón switchON-OFF), sino solo activar la tarjeta de red wifi. Los usuarios estándar no pueden desconectar la tarjeta de red, lo cual requiere derechos de admin, por lo que la única cosa que puede bloquear la visibilidad de las redes wifi (y que los usuarios pueden controlar) es el "botón" wifi en la barra de tareas o en la página de inicio de sesión.

0
adgm1 Mensajes publicados 306 Estado Miembro 10
 

No, lamentablemente ya lo intenté. Este comando solo permite activar la tarjeta wifi si está desactivada. Pero yo prefiero "encender" el interruptor de wifi. Esta historia es un poco molesta, hay por un lado la tarjeta wifi y por otro el botón de encendido en las acciones rápidas (barra de tareas). Así que no veo otra solución que el script vbs que funciona bastante bien, excepto en tareas programadas. No logro entender por qué.

¿A nivel de powershell habría una solución para alternar el botón del wifi?

0
adgm1 Mensajes publicados 306 Estado Miembro 10
 

La idea del script es poder hacer un simulacro de geolocalización de la laptop del usuario (dentro o fuera de un lugar determinado). Si al iniciar la sesión se detecta el wifi "lycee" entre la lista de puntos de acceso cercanos, entonces el usuario está en el lycée. Por lo tanto, se bloquean todos los puntos de acceso excepto "lycee" para evitar que los estudiantes utilicen un compartición de conexión. Si están en casa, entonces la red wifi del lycée ya no es visible, así que hacemos el efecto inverso: se elimina la lista negra de puntos de acceso y se permite la conexión a cualquier red wifi cercana.

Pero en el caso de que el usuario haya hecho clic en el botón ON-Off del wifi, entonces el script no puede funcionar correctamente y debe estar activado previamente para que la lista de puntos de acceso pueda ser creada y analizada.

0