¿Cómo abro un símbolo del sistema elevado usando líneas de comando en un cmd normal?
Por ejemplo, uso runas /username:admin cmd
pero el cmd que se abrió no parece estar elevado. ¿Alguna solución?
¿Cómo abro un símbolo del sistema elevado usando líneas de comando en un cmd normal?
Por ejemplo, uso runas /username:admin cmd
pero el cmd que se abrió no parece estar elevado. ¿Alguna solución?
Respuestas:
Me encontré con el mismo problema y la única forma en que pude abrir la CMD como administrador de CMD fue haciendo lo siguiente:
powershell -Command "Start-Process cmd -Verb RunAs"
y presionaEnterSegú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:
nircmdc elevate cmd
npm install -g windosu
(requiere node.js instalado)sudo cmd
nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1
finalmente funcionó. Las otras runas /user:...
formas solicitaron una contraseña a pesar de que ya era un administrador (modo por lotes eliminado).
nircmdc elevate cmd
nircmd
, para hacer que funcione como Linux sudo
, crear un sudo.bat
archivo en su camino con este contenido: nircmd elevate %*
. Entonces puede hacer, por ejemplo,sudo net stop W3SVC
windosu
:)
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"
sudo.bat
(puede reemplazar sudo
con cualquier nombre que desee) con el siguiente contenido
powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
sudo.bat
a una carpeta en su PATH
; si no sabe lo que eso significa, simplemente mueva estos archivos ac:\windows\
sudo
funcionará en el cuadro de diálogo Ejecutar ( win+r) o en la barra de direcciones del explorador (esta es la mejor parte :))sudo.bat
(puede reemplazar sudo
con cualquier nombre que desee) con el siguiente contenido
nircmdc elevate cmd /k "cd /d %cd%"
nircmdc.exe
ya sudo.bat
una carpeta en su PATH
; si no sabe lo que eso significa, simplemente mueva estos archivos ac:\windows\
sudo
funcionará en el cuadro de diálogo Ejecutar ( win+r) o en la barra de direcciones del explorador (esta es la mejor parte :))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)"
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.
Haga que el archivo por lotes guarde las credenciales de la cuenta de administrador real utilizando el /savecred
interruptor. 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
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 ).
%SystemRoot%\System32\cmd.exe /k "cd /d"
@start cmdadm.lnk %cd%
Corre con su
.
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.exe
del .zip
en C:\Program Files\elevate
y agrego esa ruta a miPATH
.
Entonces GitBash puedo ejecutar algo como elevate sc stop W3SVC
apagar elIIS
servicio.
Ejecutar el comando me da el UAC
cuadro de diálogo, correctamente enfocado con el control del teclado y al aceptar el cuadro de diálogo vuelvo a mi shell.
..
@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 ...
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 elevate
comando 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, elevatep
y 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
)
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
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"
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
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:
Estos son los pasos:
* Utilice pushd en lugar de cd para permitir que funcione en cualquier unidad. :-)
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.
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í).
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 user
no username
:
runas /user:machinename\adminuser cmd
Consulte la ayuda relevante de la comunidad de Microsoft .
Usé runas /user:domainuser@domain cmd
que abrió un mensaje elevado con éxito.