¿Hay algún comando 'sudo' para Windows?

448

Siempre trabajo en una cuenta que no sea de administrador en mi computadora con Windows. A veces necesito instalar programas que requieren acceso de administrador. Como uso principalmente el símbolo del sistema de Windows, ¿hay un comando de Windows para escalar privilegios, similar al comando del terminal de Linux sudo?

ukanth
fuente
77
Creo que el término que está buscando es acceso "elevado". Aunque sus credenciales tienen permiso de administrador, los procesos bajo sus credenciales no tienen permisos de administrador hasta que "sudo" el comando. En Windows, lo llaman "elevar".
surfasb
77
@IGRACH no en mi PowerShell ...
jiggunjer
2
Yo uso estodoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William
1
Pruebe mi wsudo, una sudoherramienta similar para Windows disponible como un paquete de Chocolatey.
noseratio

Respuestas:

266

El comando runas .

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

Solo corre:

runas /noprofile /user:Administrator cmd 

para iniciar un shell de comandos como administrador

Davy Landman
fuente
22
Es posible que desee cargar el perfil (por ejemplo, incluidas las variables de entorno) para cualquier uso extendido. En cuyo caso, suelte el /noprofile.
Richard
66
Esto no está funcionando para mí. Después de escribir mi contraseña, se cierra el símbolo del sistema.
Jonas
55
¿No es esto pedir la contraseña del administrador? ¡sudo está pidiendo tu contraseña!
n611x007
15
Lamentablemente, esto está muy desactualizado. Runassimplemente ejecuta comandos bajo un conjunto diferente de credenciales. Aunque sus credenciales tienen permisos de administrador, no significa que todos los procesos bajo sus credenciales se ejecuten como administrador.
Surfasb
12
+1 para "desactualizado" ya que las runas no pueden evitar UAC. En su lugar, presione el botón de Windows, escriba cmd y presione Ctrl + Shift + Enter.
amarillo suave el
125

Descubrí elevate hoy que "ejecuta un comando con elevación de privilegios UAC. Esto es útil para trabajar dentro de las indicaciones de comando o con archivos por lotes". No es lo mismo sudo, ya que cambia el usuario en ejecución a Administrador, pero su sintaxis es mucho más sencilla de usar que runas, y puede mantener el directorio actual, permitiendo el uso de rutas relativas.

Synopsis:
  elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".

El propósito de Elevate no es evitar u omitir UAC (Control de cuentas de usuario), sino trabajar con él. Mientras UAC está habilitado no tiene que ser una especie de rápido en alguna etapa del proceso. Si necesita deshacerse de las indicaciones por completo, debe deshabilitar UAC .

El punto de dolor que eleva el alivio está intensificando un proceso particular desde un shell no privilegiado, y luego continúa de manera normal. Sin esto, debe iniciar un símbolo del sistema con privilegios haciendo clic con el botón derecho> "Ejecutar como administrador" , que no se puede programar fácilmente, antes de intentar el comando con privilegios.

wilkie mate
fuente
55
Esto va perfecto con "Elevate sin preguntar" en secpol.msc. Juntos, hacen lo mismo que %wheel ALL=(ALL) NOPASSWD: ALLen sudo.
sayap
2
@sayap, para ser claros, ¿te refieres a esto: ss64.com/nt/syntax-uac.html ?
matt wilkie
55
El único problema que encuentro con elevate (v1.3.0) es que no devuelve el código de error del programa que está elevando.
Ken
44
Sudo.bat: @elevate %*=> beneficio!
Joe DF
10
Sería bueno mencionar que es una utilidad externa, falta OOTB.
Hi-Angel
67

Puede usar el comando runas que es similar, o puede consultar el proyecto sudo para Windows en SourceForge que agrega un comando sudo.

La diferencia es sutil:

Digamos que tienes dos usuarios. Bob es un usuario normal y James es un administrador.

Si inicia sesión como Bob y usa "runas james acommand", el comando se ejecuta como si hubiera sido ejecutado por James, por lo que accede a la configuración de usuario de James y cualquier cambio de usuario vaya a las carpetas James My Documents & settings, etc. están instalando una aplicación, por ejemplo, se instalará como James, no como Bob.

Si, por otro lado, Bob "sudo acommand", el comando aún se ejecuta como Bob, pero con permisos elevados, al igual que el comando sudo de Linux. Para evitar que cualquier usuario pueda sudo, debe definir un grupo de usuarios de sudoers que contenga la lista de usuarios normales que tienen permiso para elevar el uso de sudo. Los usuarios aún tienen que proporcionar credenciales antes de la elevación.

A veces la diferencia no es importante, a veces lo es, y encuentro que ambos comandos pueden ser útiles.

Simon P Stevens
fuente
2
¿Estás seguro? Cuando ejecuto sudo en ubuntu, si mi tema actual está ~/.themesactivado, la aplicación sudo-ed no podrá acceder a ese tema porque no está en él /home/root/.themesy utilizará el tema gtk feo predeterminado.
hasen
55
@hasen j: su problema es solo porque ~ / .themes evalúa antes de ejecutar el comando (y, por lo tanto, antes de que cambie a root).
Jared
1
Otra solución, excepto alojada en GitHub, es windosu: github.com/tehsenaus/windosu Lo acabo de encontrar y parece funcionar muy bien. Lo favorito es que es muy fácil de instalar. Solo "npm install -g windosu".
Venryx
39

También puede usar los PowerToys Script Elevation .

Quog
fuente
Impresionante, exactamente lo que estaba buscando. No quería ejecutarlo ya que un comando tiene un usuario diferente, solo para ejecutarlo con privilegios elevados.
orip
¡Exactamente la solución correcta para este problema! ¿Quién quiere Runas con su sintaxis desordenada?
Stabledog
1
A menudo he deseado que el comando elevar esté integrado en Windows. Es una herramienta fantástica.
nhinkle
ahora hay una colección Elevation PowerToys del mismo autor a partir de la cual Crear un script autoelevante es particularmente relevante.
Matt wilkie
1
@barlop, por supuesto que no. Eso derrotaría el propósito de UAC.
nhinkle
29

Si está listo para cambiar a consolas alternativas, está ConEmu (soy el autor). Una de sus características: la capacidad de ejecutar pestañas elevadas y no elevadas en la única ventana de ConEmu. Las pestañas también pueden iniciarse con diferentes credenciales.

Para comodidad del usuario, hay un archivo por lotes csudo.cmd (que puede adoptarse fácilmente para bash). Lea la descripción completa en la wiki del proyecto . En resumen, cuando ejecuta algún comando desde una pestaña no elevada existente, por ejemplo

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess

ConEmu se iniciará dismen la nueva consola / pestaña elevada (con el aviso UAC anterior en Vista o cuadro de inicio de sesión en XP).

Por defecto, csudoinicia una nueva consola en una división (puede haber cambios a través de la edición de csudo.cmdcontenidos).

Y, por supuesto, puede cambiarle el nombre sudo.cmdsi le gusta la sudopalabra "clásica" .

sudo en ConEmu / Windows

Maximus
fuente
1
csudo hace mucho tiempo se incluyó en la distribución ConEmu. No se necesita ningún enlace en absoluto.
Maximus
El problema aquí es que la nueva pestaña de la consola queda inutilizable después del comando sudo'd. Por lo tanto, no puede continuar trabajando en la pestaña elevada, solo reciba un press enter or esc to exitmensaje.
jiggunjer
1
Por supuesto que no puedes. ¡Incluso en Unix estás de vuelta a la terminal no elevada después de que el sudocomando haya hecho su trabajo! Te vas por el camino equivocado.
Maximus
1
1) si va a abrir una nueva ventana o pestaña, también podría conservarla, dejar que el usuario elija si desea continuar. 2) En mi ubuntu no tengo que sudo todo el tiempo, la elevación dura unos minutos, creo. 3) esta aplicación tiene un millón de opciones, ¿pero nada para esto? Tal vez estoy mimado.
jiggunjer
24

Método rápido:

Tres pasos para agregar sudo.

  1. Abra PowerShell.

  2. Copie el siguiente script (Ctrl + C) y péguelo en PowerShell (Alt + Espacio + E + P):

$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell
  1. Hit Enter.

Permitirá permanentemente el sudocomando en PowerShell.

Uso:

sudo <process-name> [param1 [param2 [param3]]]

Ejemplos:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

Método largo para aprender:

Nota: mezclé el guión de ambos artículos para crear el guión mencionado anteriormente. En lugar de pegar manualmente el script en el bloc de notas, agregué las Out-Filedeclaraciones para guardar ps1y los $profilearchivos del script.

Consejo: Si no eres un gran fanático de las ventanas emergentes UAC (como yo), guarda lo siguiente en el archivo * .reg y ejecútalo:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
cuervo vulcano
fuente
1
Me encanta la solución de PowerShell para esta pregunta. Esta tiene que ser la forma más fácil de elevar algo. Los archivos .bat existentes se pueden convertir fácilmente a POSH
Mitchell Skurnik
Tengo este error en Windows 10:. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
sowrov
@sowrov, consulte [este artículo] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Por defecto, los scripts de PowerShell están deshabilitados en cualquier instalación de Windows. Debe habilitarlo con este comando set-executionpolicy remotesigned. Otras opciones además remotesignedse describen en documentos oficiales .
cuervo vulcano
Los lectores notan que este script ps es un contenedor para la powershell -c start -verb runas program.exefuncionalidad. También tenga en cuenta que no puede elevar de esta manera con el indicador cmd (de forma nativa). Powershell es la mejor opción nativa.
jiggunjer
¿Se puede hacer lo mismo en cmd.exe en lugar de powershell env? powershell no calcula con clink y sin clink windows no calcula en absoluto ...
PJJ
20

Si está haciendo esto en Windows, además del comando Ejecutar como, como se menciona en otras respuestas, también hay formas de hacerlo con el mouse.

Si mantiene presionada la Shifttecla mientras hace clic derecho en la mayoría de los archivos ejecutables en Windows, debería notar algunas opciones más avanzadas. Una de ellas es la " Run As..." opción (creo que se llama " Run As Administrator" desde Vista en adelante).

También puede descargar una versión más avanzada de RunAs de Microsoft, llamada ShellRunAs , esto tiene mejoras sobre el comando RunAs incorporado, tanto en la línea de comandos como en los modos gráficos, lo que incluye permitirle guardar las credenciales de la cuenta

GAThrawn
fuente
4

Hay un paquete de chocolate con el conveniente nombre de sudo . Puede instalar el paquete con chocolate con este comando:

choco install -y sudo

Luego, en cualquier shell de Windows / MS que tenga que usar, puede usarlo sudocomo se esperaba.

ypid
fuente
3

Surun es una aplicación gratuita de código abierto que permite que ciertos programas se ejecuten con derechos administrativos, sin proporcionar una contraseña sin cambiar el registro de usuarios o modificar las variables de entorno.

Cuando estaba usando Windows XP, esta aplicación me ayuda mucho. Beta funciona bajo Windows 7.

diimdeep
fuente
Surun hace un gran trabajo. Sin embargo, a veces en Windows 8 y 8.1 sus valores predeterminados no son ideales. Debido a que reemplaza la función de ejecución de Windows, no puede iniciar un símbolo del sistema con un clic derecho en la pantalla de inicio.
Wolf
3

Como probablemente haya descubierto, las runas le permitirán correr como otro usuario, pero no puede realizar la elevación y no pasa los directorios actuales, las variables de entorno o las largas líneas de comando.

Hamilton C shell resuelve eso con un genuino su y sudo. su le permite ejecutar un comando como otro usuario; sudo (en realidad un alias para su) le permite ejecutar un comando elevado. También puede hacer ambas cosas, ejecutando elevado como un usuario diferente. Los directorios actuales, las variables de entorno y las líneas de comando largas se pasan por medio de un apretón de manos de memoria compartida entre su ejecución en el contexto de la persona que llama y una copia de sí mismo que se ejecuta como un interludio con las nuevas credenciales que luego inicia el hijo. Divulgación completa: soy el autor.

Nicole Hamilton
fuente
1

Un sudoreemplazo funcional para el minttyterminal de Cygwin sería colocar el siguiente script en la RUTA del usuario:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

Para mí, este es el único reemplazo viable para elevar los privilegios de programas como vimo cygrunsrvmientras se trabaja en una terminal en Windows.

karafior
fuente
1

Este script hace el trabajo:

@echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs
@cscript //NoLogo %temp%\sudo.tmp.vbs

Guárdelo como y sudo.cmdluego agréguelo a su RUTA

Nota: los runasmedios en este contexto "Ejecutar como administrador" y no "Ejecutar como otro usuario"

Tomado de aquí y ligeramente editado para eliminar el encabezado cscript.exe de la salida

Charles Milette
fuente
1
Esto crea una nueva consola. La nueva ventana desaparecerá después de que se complete el comando sudo'd, por lo que ni siquiera puede leer la salida.
jiggunjer
Por desgracia, sí. Pero se puede usar para algunos comandos básicos (copiar), herramientas GUI o abrir un cmd de administrador.
Charles Milette el
1

La solución más simple en mi opinión es aprovechar powershell para hacer el trabajo, que es portátil y le indicará al usuario que use el UAC.

Puede ejecutar esto en cualquier shell (cmd o powershell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
twall
fuente
0

El siguiente script vbs me sirve. Me lo puseC:\Windows\System32

Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
   args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
   args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing

Ejemplo de uso en un símbolo del sistema sudo net start service

ceztko
fuente