Batch: Abrir programas como otro usuario.
Jin -
Hola,
Estoy buscando crear un archivo por lotes que me permita abrir varios programas al mismo tiempo como otro usuario.
Me gustaría que al abrir el archivo por lotes, me pida ingresar mi contraseña (una sola vez) y así abrir los diferentes programas que haya escrito en él.
Partiendo de esta base (por ejemplo) :
runas /user:domaine.fr\p.nom "ruta del software"
¿Quizás hay que repetir el comando con las diferentes rutas de los programas .. ?
¿Piensas que eso es factible? ¿Comandos de DOS o PowerShell?
¡Gracias por tus indagaciones! ^^
2 respuestas
Hola,
Recuerda ante todo que el comando RUNAS no puede elevarse (en francés, no se puede utilizar una cuenta de administrador si no se tiene esos derechos).
Se puede sortear utilizando una utilidad de terceros (ShellRunas, Sysinternals).
En cualquier caso, se necesita un comando por software a lanzar (y una posible temporización entre cada uno, esa es otra cuestión).
No es posible a mi conocimiento introducir la contraseña en una variable que se definiría a demanda mediante SET /P y luego utilizada en el comando RUNAS, es una seguridad que se incorpora deliberadamente al comando.
Por lo tanto, esa contraseña tendría que leerse desde un archivo de texto donde figure mediante una sintaxis del estilo
runas /user:localadmin "c:\users\localuser\desktop\control.exe" < password.txt
lo cual es absurdo a menos que eventualmente el script destruya el archivo después de su uso, pero entonces no tendría sentido crear uno.
Buenas noches, si he entendido bien,
¿Quieres abrir varios programas al mismo tiempo como otro usuario utilizando la función RunAs y utilizando la codificación por lotes?
Entonces, de la manera más simple, se me ocurre una idea.
Vas a crear dos archivos por lotes!
En primer lugar, simplemente vas a crear un archivo por lotes que abrirá todos tus programas (si es necesario, añade o elimina líneas). De esta manera:
@echo off start "" "C:\Ruta\Hacia\Programa1.exe" start "" "C:\Ruta\Hacia\Programa2.exe" start "" "C:\Ruta\Hacia\Programa3.exe" start "" "C:\Ruta\Hacia\Programa4.exe" start "" "C:\Ruta\Hacia\Programa5.exe" echo --------------------------------------- timeout /t 3 /nobreak >nul exit
Vas a guardar este archivo en formato por lotes dándole un nombre, por ejemplo multifruits.bat, donde quieras; para hacerlo bien, puedes guardarlo en el escritorio de la sesión secreta.
En segundo lugar, vas a crear un archivo por lotes con la función RunAs que abrirá este archivo por lotes como otro usuario! ;)
He encontrado un viejo archivo por lotes que escribí hace un tiempo, sí, lo sé... Me gusta hacer cosas complicadas en lotes, en cuanto comienzo a escribir no puedo parar. ^^'
Reemplaza las dos líneas al principio sin poner comillas:
Programa y Usuario
@echo off set Programa=C:\Ruta\Hacia\batch\multifruits.bat set Usuario=NombreDeSesión goto pass :open cls set /a tempo = 0 echo --------------------------------------- echo ----Bienvenido a la función Runas---- echo --------------------------------------- timeout /t 3 /nobreak :prog cls echo --------------------------------------- echo Por favor ingrese la ruta de acceso al programa que desea abrir echo O el acceso directo del comando de ejecución: set Programa=null set /p Programa= if %tempo% geq 1 goto pass :user cls echo --------------------------------------- echo Por favor ingrese el nombre de usuario con el que desea conectarse: set Usuario=null set /p Usuario= :pass cls echo Para abrir %Programa% echo En su computadora como %Usuario% runas /profile /user:%Usuario% "%Programa%" if %errorlevel% neq 0 goto :error echo --------------------------------------- echo ¡El programa se lanzó correctamente! echo --------------------------------------- timeout /t 3 /nobreak >nul goto eof :error echo --------------------------------------- echo ------¡Ha ocurrido un error!------ echo --------------------------------------- echo ¿Desea continuar? (sí/no) set Rep=sí set /p Rep= if %Rep%==no goto end set error=------ set quitt=------ set /a tempo = 0 :erratum cls if %tempo%==3 goto bugg set /a tempo = tempo + 1 echo ----------------%error%---------------- echo ¿Qué desea modificar? echo ----------------%quitt%---------------- echo 1 El programa ingresado echo 2 El usuario ingresado echo 3 La contraseña echo 4 Todo set Chx=null set /p Chx= Su elección: if %Chx%==0 goto end if %Chx%==1 goto prog if %Chx%==2 goto user if %Chx%==3 goto pass if %Chx%==4 goto open set error=error set quitt=0 Exit goto erratum :bugg cls echo -----------------¡oops!----------------- goto eof :end echo --------------------------------------- :eof echo ------------- ¡Hasta pronto! ------------- echo --------------------------------------- timeout /t 3 /nobreak >nul exit
Solo tienes que guardarlo en formato por lotes y ejecutarlo si es necesario. (o por supuesto modificar tu antiguo archivo por lotes ;)
Pd: Esta es una versión de código con solicitud de contraseña sistemática!
Si deseas un acceso directo con la función RunAs para acceder sin tener que ingresar una contraseña más (solo una vez para guardarla), utiliza el comando /savecred
Hola,
Primero, hay que señalar que el autor no ha regresado desde hace más de un mes: probablemente estamos hablando en vano.
No obstante, tu lote me parece discutible.
Primero tengo dudas de que el comando Runas aplicado a un lote no cambie solo al usuario del intérprete de comandos, sino también al de los ejecutables que se llaman: ¿por qué no limitarse a escribir tantas sentencias Runas como ejecutables a lanzar?
También tengo, por supuesto, reservas sobre la posible salvaguarda de una contraseña; pero el conmutador /savecred reproduce el nombre de usuario anterior, por construcción, el comando Runas siempre pedirá la contraseña.
¿Por qué querer iterar 3 veces la petición de las credenciales? ¿No es suficiente con un Choice o Set /p que permitirán ingresar las credenciales tantas veces como se quiera con la opción de reiniciar-salir?
Finalmente, ¿por qué definir en un encabezado el programa y el usuario al mismo tiempo que en la continuación del script se le pide al usuario que los precise?
Hola @brucine y @zekey_0764
La función /savecred funciona perfectamente (¡incluso con un segundo archivo por lotes que contiene los enlaces a abrir con "Start!") ¡Normalmente ya no es necesario ingresar una contraseña, está guardada!
/Savecred almacena la autenticación de la sesión con la que queremos abrir, ya no es necesario ingresar una contraseña.
En cuanto al código por lotes que propongo, tienen razón, el 99 % del código es innecesario, ¡menos de 5 líneas de código son suficientes! Déjenme reformular incorporando /savecred (Reemplacen las dos líneas del principio sin poner comillas:
Programa y Usuario)
@echo off set Programa=C:\Camino\Hacia\batch\multifruits.bat set Usuario=NombreDeSesión runas /savecred /user:%Usuario% "%Programa%" exit
Por supuesto, puede haber muchas más formas de hacerlo !! Pero en lo más simple (con solo el lenguaje por lotes), partí de la primera idea de crear dos archivos por lotes. Uno contendría los enlaces con la función 'Start', y el otro contendría la función 'RunAs'! ( crear un archivo por lotes con simplemente la función "Start" que abriría una docena de enlaces. Y un archivo por lotes 'RunAs' simplemente para abrir todos estos enlaces con una identificación de sesión específica.)
Por supuesto, también se pueden escribir una por una todas las sentencias 'RunAs' en un solo archivo por lotes. ¡Aunque me parece un poco más tedioso! ;) sobre todo si hay muchos enlaces.
La función /savecred debe quitarse si desean ingresar una contraseña única cada vez para lanzar todos los programas contenidos en el segundo archivo por lotes! ¡De lo contrario, la sesión y la contraseña se guardarán! ;)
Pd: Si hay muchos enlaces en el archivo por lotes que contiene todos los enlaces a abrir simultáneamente, se puede poner una pequeña temporización entre cada enlace a abrir, si la computadora tiene problemas... ¡He añadido intencionadamente el comando temporizador ' timeout /t 3 /nobreak >nul ' en el código que contiene los enlaces, solo es necesario añadirlo entre cada enlace modificando según se necesite el valor /t
Hola,
Si ese es el caso, nada impide volver a pedir aclaraciones...
No veo mucho el interés del doble batch tal como se recomienda, con uno solo es suficiente, pero cada uno tiene su propio placer.
Haré como he expuesto tantas líneas de Runas como programas a ejecutar (temporalizando por timeout o lo que queramos si es necesario que uno se ejecute bien antes que el siguiente), y Runas sustituyendo a Start, pero es probable como también se dice que Runas graba el nombre de usuario pero sigue pidiendo la contraseña en cada ejecución: por eso la única solución consiste entonces como se sugirió en <1> en leerla desde un archivo de texto, pero no es muy seguro.