¿Cómo codificar un archivo BAT para que siempre se ejecute como modo administrador?

Respuestas:

71

Se utiliza runaspara iniciar un programa como usuario específico:

runas /user:Administrator Example1Server.exe
Kerrek SB
fuente
66
@karikari: Un nombre como este ( Example1Server.exe) no necesita ponerse entre comillas, pero en algunos otros casos (como espacios en el nombre :) los Example1 Server.exenecesitaría de hecho. Sin embargo, puede usar las comillas incluso si no son necesarias.
Andriy M
18
Es posible que la cuenta de administrador no se llame Administrador
Anders
9
@Anders: No, puede que no; Supongo que el OP puede "detectar el patrón". Esta no fue una respuesta de plz-give-me-teh-codez: -S Por cierto, debería agregar que el OP podría querer un comando más elaborado como runas /User:abc "csript myscript.vbs", o runas /User:abc "cmd /c start ...".
Kerrek SB
16
Me temo que esta respuesta no es lo que quiere el 90% de los visitantes, ya que es aún más difícil que hacer clic derecho-> ejecutar como administrador, incluso si es técnicamente correcto. Verifique nuevamente la otra respuesta. Es exactamente lo que la mayoría querrá.
j riv
13
No, esta respuesta es técnicamente incorrecta. Ejecutar como administrador no es lo mismo que ejecutar bajo un usuario cuyo nombre es Administrador, y los privilegios son diferentes. Ver la otra respuesta.
Alexander Gelbukh
370

La otra respuesta requiere que ingrese la contraseña de la cuenta de administrador. Además, se ejecuta bajo una cuenta en el grupo de administradores no es el mismo que en Ejecutar como administrador ver: UAC en la Wikipedia

Instrucciones de Windows 7

Para ejecutarse como administrador, cree un acceso directo para el archivo por lotes.

  1. Haga clic derecho en el archivo por lotes y haga clic en copiar
  2. Navega hasta donde quieras el atajo
  3. Haga clic derecho en el fondo del directorio
  4. Seleccione Pegar acceso directo

Luego puede configurar el acceso directo para que se ejecute como administrador:

  1. Haga clic derecho en el acceso directo
  2. Elige propiedades
  3. En la pestaña Acceso directo, haga clic en Avanzado
  4. Seleccione la casilla de verificación "Ejecutar como administrador"
  5. Haga clic en OK, OK

Ahora, cuando hace doble clic en el acceso directo, se le solicitará la confirmación de UAC y luego Ejecutar como administrador (que, como dije anteriormente, es diferente de ejecutar bajo una cuenta en el Grupo de administradores)

Mira la captura de pantalla a continuación

Captura de pantalla

Nota: cuando lo haga para ejecutar como administrador, el directorio (ruta) actual no será el mismo que el archivo bat. Esto puede causar algunos problemas en muchos casos cuando el archivo bat hace referencia a archivos relativos al lado. Por ejemplo, en mi Windows 7, el directorio cur será SYSTEM32 en lugar de la ubicación del archivo bat. Para solucionarlo , debe usar

cd "%~dp0"

o mejor

pushd "%~dp0"

para garantizar que cur dir esté en la misma ruta donde está el archivo bat.

Ed Greaves
fuente
8
Ah, eso estaba realmente oculto (la mayoría de nosotros no creía que ese botón avanzado tuviera esa opción). Estoy casi seguro de que quien pensó en la otra respuesta compleja no lo sabía. Esta es la respuesta que más del 90% de los visitantes querrán.
j riv
1
Estoy de acuerdo. Esta debería ser la respuesta. También agregué una captura de pantalla para que sea más fácil encontrar el botón de avance
fedmich
1
Esto también se aplica a Windows Server 2012 R2.
garec
3
Esto no funciona para mí ni en Windows 10 ni en Windows 7. Cuando trato de ejecutarme como Administrador, ya sea haciendo clic derecho en el archivo BAT y "Ejecutar como Administrador", o usando la técnica descrita aquí, el archivo por lotes se abre por un segundo luego se cierra inmediatamente sin comandos o programas en la ejecución del archivo por lotes. He intentado ejecutar archivos por lotes muy simples que solo hacen eco de un "Hola mundo" y también fallan de esta manera. Esto es muy frustrante. Hasta ahora, no he podido encontrar una solución.
Jonathan Elkins
1
@JonathanElkins, ¿intentaste agregar una pausa al final del archivo por lotes?
Ed Greaves
32

Simplemente agregue esto a la parte superior de su archivo bat:

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

Se elevará a administrador y también permanecerá en el directorio correcto. Probado en Windows 10.

Padre
fuente
1
Probado en Windows 7 y funciona muy bien. ¿Pero podrías explicar lo que hace? No estoy familiarizado con los archivos bat.
Sunfloro
1
Crea un archivo VBScript con código que lo eleva a administrador (si aún no lo está), y ejecuta el archivo bat nuevamente, esta vez como administrador.
Sire
1
Lo que estoy buscando exactamente! ¡No se requieren cambios ni archivos adicionales!
MSS
1
¿Qué es getadmin.vbs?
Kiquenet
44
Agregar sus dos líneas de código a mi archivo por lotes existente es una buena solución para mí. También tuve que agregar exital final de mi archivo por lotes o me dejarían en el indicador. Esto se debe probablemente a que .vbs lanza un segundo símbolo del sistema.
Ben
10

Si puede usar una utilidad de terceros, aquí hay una elevateutilidad de línea de comandos .

Esta es la descripción del uso:

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog
aforia
fuente
elevate.exerocas!
Sangbok Lee
8

Puede utilizar nircmd.exe 's Elevate comando

Referencia de comandos de NirCmd: elevar

elevate [Program] {Command-Line Parameters}

Solo para Windows Vista / 7/2008: ejecute un programa con derechos de administrador. Cuando el [Programa] contiene uno o más caracteres de espacio, debe ponerlo entre comillas.

Ejemplos:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PD: lo uso en win 10 y funciona

Dheeraj Bhaskar
fuente
6

convierta su archivo por lotes en .exe con esta herramienta: http://www.battoexeconverter.com/, luego puede ejecutarlo como administrador

xxedxx
fuente
2
Tenga en cuenta que muchos antivirus son muy sensibles en los archivos exe que se crean de esta manera. "convertir / cifrar" archivos por lotes de esta manera, es una forma antigua utilizada por programas maliciosos.
Hamy
Si analiza este dominio utilizando Symantec - Tipo de amenaza: otro malware Razón de la amenaza: Dominio informado y verificado como servidor de malware. Identificado como dominio malicioso o URL.
Sunil
Mala sugerencia!
Vlad
6
go get github.com/mattn/sudo

Luego

sudo Example1Server.exe
Mattn
fuente
6

Creo que tengo una solución al problema de la contraseña. Este argumento único es realmente sorprendente. Pide la contraseña una vez y nunca más la vuelve a pedir. Incluso si lo coloca en otro programa, no le pedirá la contraseña. Aquí está:

runas /user:Administrator /savecred Example1Server.exe

Anónimo
fuente
4
  1. Mi experimento indica que el comando runas debe incluir el dominio del usuario administrador (al menos en la configuración ambiental de mi organización):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    Si aún no conoce el dominio del usuario administrador, ejecute una instancia de Símbolo del sistema como usuario administrador e ingrese el siguiente comando:

    echo %userdomain%
    
  2. Las respuestas proporcionadas por Kerrek SB y Ed Greaves ejecutarán el archivo de destino bajo el usuario administrador pero, si el archivo es un script de Comando (archivo .bat) o un script VB (archivo .vbs) que intenta operar en el inicio de sesión normal El entorno del usuario (como cambiar las entradas del registro), es posible que no obtenga los resultados deseados porque el entorno en el que se ejecuta el script será el del usuario administrador, ¡no el usuario de inicio de sesión normal! Por ejemplo, si el archivo es un script que opera en la sección HKEY_CURRENT_USER del registro, el "usuario actual" afectado será el usuario administrador, no el usuario de inicio de sesión normal.

pstraton
fuente
0

Utilice la unidad física completa \ ruta de acceso a su archivo por lotes de destino en el acceso directo Propiedades.

Esto no funciona en Windows 10 si usa unidades secundarias como intenté hacer al principio ...

Samiamias
fuente