¿Cómo abrir un cmd elevado usando la línea de comando para Windows?


109

¿Cómo abro un símbolo del sistema elevado usando líneas de comando en un cmd normal?

Por ejemplo, uso runas /username:admin cmdpero el cmd que se abrió no parece estar elevado. ¿Alguna solución?


Respuestas:


165

Me encontré con el mismo problema y la única forma en que pude abrir la CMD como administrador de CMD fue haciendo lo siguiente:

  1. Abrir CMD
  2. Escribir powershell -Command "Start-Process cmd -Verb RunAs" y presionaEnter
  3. Aparecerá una ventana emergente solicitando abrir una CMD como administrador

2
Buena respuesta. ¡Agregué y edité que solía ejecutar en una línea de comando!
Preet Sangha

1
Creé un archivo por lotes con esto y lo guardé como admincmd.bat en mi carpeta de Windows, así que todo lo que tengo que hacer es escribir "admincmd", presionar enter y abre un cmd de administrador. (También agregué otra línea al archivo por lotes con " exit "para que cierre la ventana de cmd que no es de administrador)
Tony Brix

¿Por qué no colocar el cmd (y cualquier parámetro) al final? Tener el comando es extraño desde el punto de vista de la legibilidad.
Eric Fossum

38

Según la documentación , el modelo de seguridad de Windows ...

no otorga privilegios administrativos en todo momento. Incluso los administradores funcionan con privilegios estándar cuando realizan tareas no administrativas que no requieren privilegios elevados.

Tiene la opción Crear esta tarea con privilegios administrativos en el cuadro de diálogo Crear nueva tarea ( Administrador de tareas> Archivo> Ejecutar nueva tarea ), pero no hay una forma incorporada de elevar los privilegios de manera efectiva usando la línea de comando.

Sin embargo, existen algunas herramientas de terceros (que dependen internamente de las API de Windows) que puede utilizar para elevar los privilegios desde la línea de comandos:

NirCmd :

  1. Descárgalo y descomprímelo.
  2. nircmdc elevate cmd

windosu :

  1. Instalarlo: npm install -g windosu(requiere node.js instalado)
  2. sudo cmd

3
Gracias, nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1finalmente funcionó. Las otras runas /user:...formas solicitaron una contraseña a pesar de que ya era un administrador (modo por lotes eliminado).
Marcos

Gracias pornircmdc elevate cmd
tim

4
Después con instalarlo nircmd, para hacer que funcione como Linux sudo, crear un sudo.batarchivo en su camino con este contenido: nircmd elevate %*. Entonces puede hacer, por ejemplo,sudo net stop W3SVC
Kip

1
Creo que windosu es, con mucho, la forma más sencilla y elegante de hacer esto, especialmente si eres un desarrollador ... gracias tío. Siento que estoy en el sistema nix: D
Emmanuel Mahuni

amado windosu:)
Finlay Roelofs

32

No tengo suficiente reputación para agregar un comentario a la respuesta principal, pero con el poder de los alias puedes salirte con la tuya con solo escribir lo siguiente:

powershell "start cmd -v runAs"

Esta es solo una versión más corta de la excelente solución user3018703:

powershell -Command "Start-Process cmd -Verb RunAs"

26

Manera simple que hice después de probar otras respuestas aquí.

Método 1: SIN un programa de terceros (usé esto)

  1. Cree un archivo llamado sudo.bat(puede reemplazar sudocon cualquier nombre que desee) con el siguiente contenido powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Mover sudo.bata una carpeta en su PATH; si no sabe lo que eso significa, simplemente mueva estos archivos ac:\windows\
  3. Ahora sudofuncionará en el cuadro de diálogo Ejecutar ( win+r) o en la barra de direcciones del explorador (esta es la mejor parte :))

Método 2: CON un programa de terceros

  1. Descarga NirCmd y descomprímelo.
  2. Cree un archivo llamado sudo.bat(puede reemplazar sudocon cualquier nombre que desee) con el siguiente contenido nircmdc elevate cmd /k "cd /d %cd%"
  3. Mueva nircmdc.exeya sudo.batuna carpeta en su PATH; si no sabe lo que eso significa, simplemente mueva estos archivos ac:\windows\
  4. Ahora sudofuncionará en el cuadro de diálogo Ejecutar ( win+r) o en la barra de direcciones del explorador (esta es la mejor parte :))

Si bien ambas soluciones funcionan, desafortunadamente, el cuadro de diálogo UAC aparecerá en la parte superior (orden z) pero no se enfocará . (Probado en Win10x64 v1607 build14393.447.)
Ogmios

@Ogmios eso es bastante extraño. ¿El diálogo funciona correctamente cuando no se inicia así? He estado usando esto muy felizmente sin tales problemas. ¿Quizás es por alguna otra configuración que ha cambiado?
Dheeraj Bhaskar

Sí, el cuadro de diálogo UAC funciona como se esperaba en todas las demás situaciones (que he encontrado). Ésta es la única excepción. Y, por supuesto, he cambiado mi sistema de otras formas, pero no he encontrado nada que pueda tener un efecto oculto en este diálogo.
Ogmios

@Ogmios lo siento, entonces amigo, no puedo pensar en nada más que puedas hacer para arreglar esto. Probablemente debería probar las otras soluciones para ver si son mejores para usted. Saludos
Dheeraj Bhaskar

Si bien powershell no es un tercero, no es un programa de acciones, y está escribiendo un programa de terceros para lograr el objetivo.
undrline

13

Utilizo programas nirsoft (por ejemplo, nircmdc) y sysinternals (por ejemplo, psexec) todo el tiempo. Son muy útiles.

Pero si no quiere, o no puede, dl un programa de terceros, aquí hay otra forma, Windows puro.

Respuesta corta : mientras está elevado, puede crear una tarea programada con privilegios elevados que luego puede invocar más tarde mientras no está elevado.

Respuesta de longitud media : mientras que la tarea de creación elevada con (pero prefiero la GUI del programador de tareas):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

Luego, más tarde, no se necesita elevación, invoca con

schtasks /run /tn cmd_elev

Respuesta larga : hay muchos detalles inquietantes; vea la entrada de mi blog "Iniciar programa SIN UAC, útil al iniciar el sistema y en archivos por lotes (use el programador de tareas)"


8

Lo siguiente, como un archivo por lotes, abrirá un símbolo del sistema elevado con la ruta establecida en el mismo directorio desde el que se invocó el archivo por lotes

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "

5

Mi forma favorita de hacer esto es usando PsExec.exe de SysInternals, disponible en http://technet.microsoft.com/en-us/sysinternals/bb897553

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

El interruptor "-h" es el que hace la magia:

-h Si el sistema de destino es Vista o superior, el proceso se ejecuta con el token elevado de la cuenta, si está disponible.


1
Para que esto funcione, debe editar las propiedades de psexec.exe y en la pestaña de compatibilidad, marque "Ejecutar como administrador". De lo contrario, obtendrá el error: PSEXESVC no instalado. Pero psexec causa problemas con la tecla de tabulación en cmd.exe. No se puede usar la pestaña para completar los nombres de las carpetas.
Peter Quiring

No estoy seguro en qué entorno probaste, pero no necesité cambiar la configuración "Ejecutar como administrador" (¿estás intentando ejecutar cmd.exe en una máquina remota desde la tuya?). Tampoco hay problemas con la tecla de tabulación, puedo completar con éxito los nombres de archivos y carpetas (al menos probado en Win8.1 y Win10, ejecutándose desde las líneas de comando cmd y PowerShell)
David Rodríguez

Estoy usando Win10 y ejecutándolo localmente. No estoy seguro de por qué me pasa a mí y no a ti. Conseguí que nircmd funcionara y no causa problemas con las pestañas.
Peter Quiring

También noto que uno no puede autocompletar con la tecla de tabulación, pero al menos esto abriría un indicador de cmd elevado en el contexto de otro usuario, lo que los métodos anteriores anteriores no parecían lograr cuando lo intenté. La bandera '-h' es genial (Windows 10), funciona de maravilla.
user1840734

4

Haga que el archivo por lotes guarde las credenciales de la cuenta de administrador real utilizando el /savecredinterruptor. Esto solicitará las credenciales la primera vez y luego almacenará la contraseña cifrada en el administrador de credenciales. Luego, para todas las veces que se ejecute el lote, se ejecutará como administrador completo, pero no solicitará las credenciales porque se almacenan cifradas en el administrador de credenciales y el usuario final no puede obtener la contraseña. Lo siguiente debería abrir un CMD elevado con privilegios de administrador completos y solo solicitará la contraseña la primera vez:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe

3

Si bien ambas soluciones proporcionadas por Dheeraj Bhaskar funcionan, desafortunadamente, el cuadro de diálogo de UAC aparecerá en la parte superior (orden z) pero no se enfocará (la ventana enfocada es la ventana cmd / powershell de la persona que llama), por lo tanto, necesito agarre el mouse y haga clic en "sí", o para seleccionar la ventana UAC usando Alt + Shift + Tab. (Probado en Win10x64 v1607 build14393.447; UAC = "[...] no atenuar [...]" .)

La siguiente solución es un poco incómoda ya que usa dos archivos, pero conserva el orden de enfoque correcto, por lo que no se requieren acciones adicionales del mouse / teclado (además de confirmar el cuadro de diálogo UAC: Alt + Y ).

  1. cmdadm.lnk (propiedades de acceso directo / Avanzado ... / Ejecutar como administrador = ACTIVADO) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Corre con su.


Desafortunadamente, no puedo reproducir esto. Siempre que use cualquiera de mis soluciones. Mi mensaje de UAC está enfocado y en la parte superior
Dheeraj Bhaskar

3

He estado usando Elevate por un tiempo.

Es descripción - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

Copio el bin.x86-64\elevate.exedel .zipen C:\Program Files\elevatey agrego esa ruta a miPATH .

Entonces GitBash puedo ejecutar algo como elevate sc stop W3SVCapagar elIIS servicio.

Ejecutar el comando me da el UACcuadro de diálogo, correctamente enfocado con el control del teclado y al aceptar el cuadro de diálogo vuelvo a mi shell.


3

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

guarde este script como "god.cmd" en su system32 o lo que sea que dirija su ruta ...

si abre un cmd en e: \ mypictures \ y escribe dios, le pedirá las credenciales y lo pondrá de nuevo en el mismo lugar que el administrador ...


1
powershell es genial pero necesita módulos de zz ... soy oldscool ... solo necesito el sistema ...
jOte-

¿Este método / truco de elevación también funciona para rutas / nombres de archivo largos? ¿O se supone que debo usar "% ~ snx0" o "% ~ dpsnx0" en su lugar?
script'n'code

2

Similar a algunas de las otras soluciones anteriores, creé un elevate archivo por lotes que ejecuta una ventana elevada de PowerShell, sin pasar por la política de ejecución para permitir ejecutar todo, desde comandos simples hasta archivos por lotes y scripts complejos de PowerShell. Recomiendo pegarlo en su carpeta C: \ Windows \ System32 para facilitar su uso.

El elevatecomando original ejecuta su tarea, captura la salida, cierra la ventana de PowerShell generada y luego regresa, escribiendo la salida capturada en la ventana original.

Creé dos variantes, elevatepy elevatex, que respectivamente pausan y mantienen la ventana de PowerShell abierta para más trabajo.

https://github.com/jt-github/elevate

Y en caso de que mi enlace muera alguna vez, aquí está el código para el archivo por lotes elevado original:

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)

0

Puede usar una variable de entorno temporal para usar con un acceso directo elevado (

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk (acceso directo)

_ properties\advanced\"run as administrator"=yes

(para realizar cambios en la ruta, deberá crear temporalmente el env.Variable)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

) (targetCmd se ejecuta en una ventana de cmd elevada)

Aunque son 3 archivos, puede colocar todo (incluido targetCmd) en alguna subcarpeta (no olvide agregar el nombre de la carpeta a los parches) y cambiar el nombre de "start.cmd" por el único nombre del objetivo.

Para mí, parece la forma más nativa de hacer esto, mientras que cmd no tiene el comando necesario


He leído todas las soluciones anteriores y las he entendido. No entiendo tus pasos. Estoy eligiendo una solución con los mejores pros y contras.
Dzmitry Lahoda

0

No estoy seguro de que la herramienta ExecElevated.exe (13KB) haga el trabajo ... pero podría. O al menos ser útil para otras personas con necesidades similares que vinieron a esta página como yo (pero no encontré la solución, así que terminé creando la herramienta yo mismo en .Net).

Ejecutará una aplicación con token elevado (en modo de administrador). ¡Pero obtendrá un cuadro de diálogo UAC para confirmar! (tal vez no si UAC se ha desactivado, no lo he probado).

Y la cuenta que llama a la herramienta también debe tener admin. derechos por supuesto.

Ejemplo de uso:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"

2
Me encanta las respuestas con "Este trabajo podría no haber probado todavía", y por supuesto el de "no estoy seguro" ....
Giridhar Karnik

1
el enlace está roto.
Dzmitry Lahoda

Enlace restablecido, lo siento por eso
MrCalvin

0

El método de Dheeraj Bhaskar con Powershell tiene un espacio faltante, al menos para la encarnación de Windows 10 de Powershell.

La línea de comando dentro de su sudo.bat debería ser

powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"

Tenga en cuenta el espacio extra después de% cd%

;) Frode


0

Aquí hay una forma de integrarse con el explorador. Aparecerá un elemento de menú adicional cuando haga clic con el botón derecho en cualquier carpeta dentro del Explorador de Windows:

Integración del Explorador de Windows

Estos son los pasos:

  1. Cree esta clave: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. Cambie su valor predeterminado a lo que desee que aparezca como texto del elemento del menú. Ex "DOS Shell como administrador"
  3. Cree esta otra clave: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. Cambie su valor predeterminado a este, ipsis litteris: powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/ k pushd"% 1 "'"
  5. Está hecho. Ahora haga clic derecho en cualquier carpeta y verá su elemento dentro de los otros elementos.

* Utilice pushd en lugar de cd para permitir que funcione en cualquier unidad. :-)


-1

Puede usar la siguiente sintaxis, tenía la misma pregunta y no pensé que se necesitara un script.

runas / perfil / usuario: dominio \ nombre de usuario cmd

Esto funcionó para mí, puede ser diferente en su red.


-1

Simplemente use el comando: runas / noprofile / usuario: administrador cmd


-2

Lo hice fácilmente usando este siguiente comando en cmd

runas / netonly / usuario: Administrador \ Administrador cmd

después de escribir este comando, debe ingresar su contraseña de administrador (si no conoce su contraseña de administrador, déjela en blanco y presione Entrar o escriba algo, funcionó para mí).


no me ayudó
Dzmitry Lahoda

@DzmitryLahoda, ¿puedes informarme del error que tienes?
Harish Regada

-2

Presione la tecla Windows + X y ahora puede seleccionar Powershell o Símbolo del sistema con derechos de administrador. Funciona si eres el administrador. La función puede quedar inutilizable si el sistema no es suyo.


-5

Hay varias formas de abrir un cmd elevado, pero solo su método funciona desde el símbolo del sistema estándar. Solo necesitas poner userno username:

runas /user:machinename\adminuser cmd

Consulte la ayuda relevante de la comunidad de Microsoft .


4
Esto no es lo mismo que ejecutar un comando elevado, porque cuando abro una ventana cmd elevada y escribo "whoami", se obtiene el mismo resultado que una ventana no elevada. Cuando ejecuto "whoami / all" en ambos casos, puedo ver las diferencias en términos de permisos para el mismo usuario.
Constantino Cronemberger

-5

Usé runas /user:domainuser@domain cmdque abrió un mensaje elevado con éxito.


Requiere las credenciales de otro usuario. Si ya es administrador y desea ejecutar con privilegios elevados, como cuando hace clic con el botón derecho en una aplicación y elige ejecutar como administrador y no se solicita ninguna contraseña, solo un cuadro de diálogo de confirmación, entonces necesita algo más. Vine aquí buscando esa respuesta, pero no parece estar aquí.
Paul-Sebastian Manole
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.