Con aplicaciones viejas como S.I.A.p / SIFERE que requieren ejecutarse con un usuario administrador, siempre es un problema cuando estamos en un dominio y queremos que un usuario limitado pueda tener esos permisos elevados específicos.
Objetivos
- Que el usuario pueda ejecutar la aplicación como administrador
- Que el usuario no necesite conocer la contraseña de administrador
Este post explica como solucionar estos dos puntos, sin embargo, si el usuario revisa el contenido del bat, o desde el acceso directo llegue al archivo y lo edite, podrá ver el usuario y contraseña.
Para ese caso puntual me vino en mente Runas, pero cada vez que un nuevo usuario quiera acceso a la aplicación tendría que usar el flag /savecred por primera vez y eso no es automático.
Entonces gracias a una respuesta de Spiceworks por Lauren F conocí PsExec, que también permite ejecutar una aplicación en windows como otro usuario por línea de comandos y pasando la contraseña en la línea de comandos también.
Con esa solución, utilizo psexec dentro de un archivo .bat para ejecutar la aplicación:
psexec -u adminsitrador -p password C:\programa.exe "parametros adicionales"
El problema, es que si bien la aplicación se ejecuta, queda abierta una ventana de CMD donde se ve el usuario y la contraseña, para lo cual mejoré el bat:
@echo off psexec -u adminsitrador -p password C:\programa.exe "parametros adicionales" exit
Pero la ventana CMD no se cierra tras la apertura de la aplicación, si bien se puede cerrar y ahora no se muestran ni el usuario ni la password, me parece incómodo dejar ventanas negras por ahi, por lo cual busqué la forma de ejecutar en modo invisible.
Tras investigar un poco la solución llegó por mano de VonC en Stackoverflow, revisando su respuesta implementé la solución.
Crear un archivo invisible.vbs:
set args = WScript.Arguments num = args.Count if num = 0 then WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>" WScript.Quit 1 end if sargs = "" if num > 1 then sargs = " " for k = 1 to num - 1 anArg = args.Item(k) sargs = sargs & anArg & " " next end if Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
Y en nuevo archivo .bat ejecutar el .bat del programa:
@echo off wscript.exe invisible.vbs programaa.bat "parametros adicionales"
De ese modo momentáneamente vemos una ventana negra CMD, desaparece y se abre la aplicación que deseemos como administrador.