Cómo ejecutar un programa desde la línea de comandos con derechos elevados

44

¿Hay alguna manera de ejecutar un programa o comando con derechos elevados cuando ya estoy en una línea de comando no elevada?

Exactamente la misma acción que se realizaría cuando hago clic en el acceso directo del programa y selecciono Ejecutar como administrador .

El comando runas probablemente no sea una solución: pide una contraseña, pero solo quiero el diálogo UAC .

Lukas Cenovsky
fuente

Respuestas:

14

Parece que esta utilidad, Hidden Start , hará lo que desee si usa el modificador / uac. Aquí hay una línea de comando de ejemplo:

hstart /UAC "notepad.exe"

Esto abrirá el cuadro de diálogo UAC en lugar de pedir una contraseña como lo hace runas.

ingrese la descripción de la imagen aquí

JeffP
fuente
2
Advertencia: esa pequeña utilidad es de 20 $. Para aquellos con bolsillo pequeño, use RunAdmin en su lugar :)
WeGoToMars
Esto no aparece en Windows 10
será el
50

Hay una manera de hacer esto en PowerShell:

PS> Start-Process powershell -Verb runAs
Rustam
fuente
19
Parece funcionar bien. Desde la línea de comandos, podría hacer, por ejemplopowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze
77
Esto debe marcarse como la IMO correcta / mejor respuesta: funciona sin utilidades de terceros.
crimbo
55
Partiendo de @marsze - Fwiw, los argumentos en el caso más simple entran en su propio valor entre comillas, por ejemplo powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". ¡Gracias!
ruffin
¿Cómo puedo canalizar la salida del símbolo del sistema elevado en mi script actualmente en ejecución?
Wheeler
@wheeler, estoy casi seguro de que no puedes hacer eso, pero puedes devolver un código de salida:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam
6

Sobre la base de la respuesta de Rustam , puedes:

  • Cree un su.batarchivo por lotes en algún lugar de su% PATH% predeterminado, con la siguiente línea:@powershell start -verb runas %*
  • Agregue esta función a su perfil de PowerShell $ :function su {start -verb runas @args}

¡Ahora puede emitir su <command> [parameters]en cualquier shell!

Nicolas Melay
fuente
2

RunAdmin es una pequeña utilidad (150Kb) que le permite ejecutar un programa desde la línea de comandos con derechos elevados (mostrará el UAC). Y frente a Hidden Start es freeare.

WeGoToMars
fuente
2

Esto funciona para mí en todas las plataformas, incluida Windows 10. Mis necesidades son simples, quizás pueda adaptar el enfoque si necesita energía .

Se me ocurrió un pequeño script llamado, sudo.cmdllamado así por el comando sudo de Linux. Funciona bastante bien, creo. He esbozado los requisitos, los pasos a seguir y el script está cerca de la parte inferior con un ejemplo. Primero una palabra de advertencia.

ADVERTENCIA : el comando se ejecuta en el directorio del sistema de Windows de forma predeterminada. Querrás ircda un lugar seguro primero.

requisitos :

  • Ejecute el comando con el Administrador con privilegios desde Windows .CMD
    o cmd-shell.
  • requieren las verificaciones normales de privilegios de Windows en el comando
    • En otras palabras, el comando NO funcionará a menos que ya haya iniciado sesión con una cuenta privilegiada.
  • Ejecute el comando con permiso de administrador y continúe cuando se le llame dentro de un script. Así que espera a que se complete el comando.
  • Sé simple para que siempre funcione
  • No es necesario ingresar una contraseña cada vez, si ya estoy conectado.
    • Un método mejor sería si puedo ingresar la contraseña una vez como lo hace el sudocomando real en Linux.

solución :

  1. Cree un script de comando para ejecutar todos los argumentos pasados, sudo.cmd
  2. Crear un atajo de Windows para el comando nombre del script que: sudo.lnk.
  3. Coloque el sudoatajo en la RUTA de su ventana para que se pueda ver.
  4. Edite las propiedades de Start in:acceso directo , deje la ruta vacía.
  5. Haga clic en el Advancedbotón [ ] - VerificarRun as Administrator
  6. Habilite los atajos en su ruta de Windows, use la variable de entorno PATHEXT, a saber.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Cuando escriba sudo diren la línea de comandos, Windows mostrará el

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Control emergente de acceso. Si hace clic en "[ NO]" no pasará nada. Windows mostrará un " Access is denied." mensaje.

Cuando hace clic en "[ YES]", el comando de directorio se ejecuta con un privilegio elevado. Por supuesto, probablemente desee algo más interesante como detenerse o consultar un servicio:

 sudo sc query SDRSVC

SDRSVC es el nombre del servicio para el "Servicio de copia de seguridad de Windows", esto muestra lo siguiente en una ventana separada de Cmd:

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

El sudo.cmdguión en sí es muy básico. Como dije, mis necesidades son simples. Solo quiero detener e iniciar los servicios mientras implemento el código para las pruebas.

sudo.cmd:

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

El pausecomando espera a que revise los resultados. Si pausesaca la ventana de administración, se cierra y no sabe si el comando funcionó o no. El ERRORLEVELdel comando también se devuelve.

será
fuente
2

Esto funciona para Windows 10, no lo he probado con otras versiones de Windows.

Un ejemplo para abrir el bloc de notas con derechos de administrador de cmd.exe que inicia powershell que solicita los permisos elevados.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Esto le dará un cuadro de diálogo UAC (si está habilitado) con [Sí] [No], o le pedirá la contraseña de administrador.

Otro ejemplo para abrir el archivo hosts con el bloc de notas sería:

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Más información: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6

Alex
fuente
Los argumentos para el ejecutable deben ser un -ArgumentListparámetro, no simplemente parámetros adicionales para iniciar el proceso.
Manzana
0

Eche un vistazo a Start ++ : tiene esta funcionalidad junto con muchas otras cosas útiles. Para ejecutar con el indicador UAC, simplemente use sudoel nombre de su programa en la línea de comando como se muestra aquí:

texto alternativo

Estas son algunas otras características (también puede agregar las suyas propias):

texto alternativo

texto alternativo

John T
fuente
También se ve bien, pero ya uso FARR, que tiene una funcionalidad similar a Start ++ y más (por supuesto, excepto sudo).
Lukas Cenovsky,
2
El enlace dice Bienvenido a: brandontools.com. Esta página web está estacionada GRATIS. ¿Quieres comprar brandontools.com?
xmojmr
1
como dice @xmojmr, ese sitio está muerto. Si conoce una nueva ubicación (no encontré una tan rápidamente), debe actualizar el enlace en la respuesta.
Abel
-1

Puedes configurar __COMPAT_LAYER=RunAsAdmin. Luego, los comandos se ejecutarán en un elevado separado cmd.

Ejemplo .bat:

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Todas las opciones del Modo de compatibilidad se enumeran en el Kit de herramientas de compatibilidad de aplicaciones de MS.

Michel
fuente
Este archivo por lotes está horriblemente roto. No se puede usar ;como delimitador de comentarios. "Los archivos por lotes no reconocen el punto y coma y generalmente causarán un mensaje de error sobre un comando incorrecto".
DavidPostill