Existe algum comando 'sudo' para Windows?


448

Eu sempre trabalho em uma conta de não administrador no meu computador com Windows. Às vezes, preciso instalar programas que exijam acesso de administrador. Como eu uso principalmente o prompt de comando do Windows, existe um comando do Windows para escalar privilégios, semelhante ao comando do terminal Linux sudo?


7
Acredito que o termo que você está procurando é acesso "elevado". Mesmo que suas credenciais tenham permissão de administrador, os processos sob suas credenciais não têm permissões de administrador até que você "sudo" o comando. No Windows, eles chamam de "elevar".
surfasb

7
@IGRACH não no meu powershell ...
jiggunjer

2
Eu uso issodoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William

1
Tentar o meu wsudo, uma sudoferramenta -como para Windows disponível como um pacote Chocolatey.
noseratio 16/02

Respostas:


266

O comando runas .

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

Apenas corra:

runas /noprofile /user:Administrator cmd 

iniciar um shell de comando como administrador


22
Você pode achar que deseja que o perfil seja carregado (por exemplo, incluindo variáveis ​​de ambiente) para qualquer uso prolongado. Nesse caso, solte o /noprofile.
Richard Richard

6
Isso não está funcionando para mim. Depois de digitar minha senha, o prompt de comando é fechado.
Jonas

55
isso não está pedindo a senha do administrador? sudo está pedindo sua senha!
N611x007

15
Infelizmente, isso está seriamente desatualizado. Runasapenas executa comandos sob um conjunto diferente de credenciais. Mesmo que suas credenciais tenham permissões de administrador, isso não significa que todos os processos sob suas credenciais sejam executados como administrador.
surfasb

12
+1 para "desatualizado", pois as runas não podem ignorar o UAC. Em vez disso, pressione o botão Windows, digite cmd e pressione Ctrl + Shift + Enter.
Mellow-yellow

125

Descobri o elevate hoje, que "executa um comando com elevação de privilégio do UAC. Isso é útil para trabalhar dentro de prompts de comando ou com arquivos em lotes". Não é o mesmo sudoque mudar o usuário em execução para Administrador, mas sua sintaxe é muito mais simples de usar do que runase pode manter o diretório atual, permitindo o uso de caminhos relativos.

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".

O objetivo do Elevate não é contornar ou ignorar o UAC (Controle de Conta de Usuário), mas trabalhar com ele. Desde que o UAC esteja ativado, deve haver algum tipo de prompt em algum momento do processo. Se você precisar se livrar completamente das solicitações, desative o UAC .

O ponto de dor que o alívio alivia é escalar um processo específico a partir de um shell não privilegiado e depois continuar normalmente. Sem isso, você precisa iniciar um prompt de comando privilegiado com o botão direito do mouse> "Executar como Administrador" , que não pode ser facilmente script, antes de tentar o comando privilegiado.


5
Isso fica perfeito com "Elevar sem avisar" em secpol.msc. Juntos, eles fazem o mesmo que %wheel ALL=(ALL) NOPASSWD: ALLno sudo.
sayap

2
@ayay, só para ficar claro, o que você quer dizer com ss64.com/nt/syntax-uac.html ?
226126 #: 305126:

5
O único problema que encontro com o elevate (v1.3.0) é que ele não retorna o código de erro do programa que está elevando.
Ken

4
Sudo.bat: @elevate %*=> lucro!
Joe DF

10
Seria bom mencionar que é um utilitário externo, sem o OOTB.
Hi-Angel

67

Você pode usar o comando runas, que é semelhante, ou pode verificar o projeto sudo para Windows no SourceForge, que adiciona um comando sudo.

A diferença é sutil:

Digamos que você tenha dois usuários. Bob é um usuário normal e James é um administrador.

Se você fizer login como Bob e usar "runas james acommand", o comando será executado como se fosse executado por James, para acessar as configurações de usuário de James e todas as alterações de usuário entrarem nas pastas James Meus Documentos e configurações, etc. estiver instalando um aplicativo, por exemplo, ele será instalado como James, não como Bob.

Se, por outro lado, Bob "sudo acommand", o comando ainda é executado como Bob, mas com permissões elevadas - assim como o comando Linux sudo. Para impedir que qualquer usuário possa sudo, você deve definir um grupo de usuários sudoers que contenha a lista de usuários normais que têm permissão para elevar usando o sudo. Os usuários ainda precisam fornecer credenciais antes da elevação.

Às vezes a diferença não é importante, às vezes é, e acho que ambos os comandos podem ser úteis.


2
Você tem certeza? Quando executo o sudo no ubuntu, se meu tema atual estiver ~/.themes, o aplicativo sudo-ed não poderá acessar esse tema, porque não está presente /home/root/.themes, e usará o tema feio gtk padrão.
hasen

5
@hasen j - seu problema é justamente porque ~ / .themes é avaliado antes da execução do comando (e, portanto, antes de passar para o root).
Jared

1
Outra solução, exceto a hospedada no GitHub, é o windosu: github.com/tehsenaus/windosu Acabei de encontrá-la e parece funcionar muito bem. O favorito é que é super fácil de instalar. Apenas "npm install -g windosu".
Venryx

39

Você também pode usar os PowerToys de elevação de script .


Incrível - exatamente o que eu estava procurando. Eu não queria executar como um comando tem um usuário diferente, apenas para executá-lo com privilégios elevados.
orip 14/03/10

Exatamente a solução certa para este problema! Quem quer Runas com sua sintaxe bagunçada?
Stabledog

1
Eu sempre desejei que o comando elevar fosse incorporado às janelas. É uma ferramenta fantástica.
Nhinkle

agora há uma coleção Elevation PowerToys do mesmo autor da qual a criação de um script auto-elevável é particularmente relevante.
mate Wilkie

1
@ Barlop é claro que não. Isso derrotaria o objetivo do UAC.
nhinkle

29

Se você está pronto para mudar para consoles alternativos, existe o ConEmu (eu sou o autor). Um de seus recursos - a capacidade de executar guias elevadas e não elevadas em uma única janela do ConEmu. As guias também podem ser iniciadas com credenciais diferentes.

Para conforto do usuário, existe o arquivo em lote csudo.cmd (que pode ser facilmente adotado para o bash). Leia a descrição completa no wiki do projeto . Em resumo, quando você executa algum comando da guia não elevada existente, por exemplo

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

O ConEmu será iniciado dismno novo console / guia elevado (com o prompt anterior do UAC no Vista ou na caixa de login no XP).

Por padrão, csudoinicia um novo console em uma divisão (pode ser alterado através da edição de csudo.cmdconteúdo).

E, claro, você pode renomeá-lo para sudo.cmdse você gosta da sudopalavra "clássica" .

sudo no ConEmu / Windows


1
Há muito tempo, o csudo foi incluído na distribuição do ConEmu. Nenhum link é necessário.
Maximus

problema aqui é que a nova guia do console se torna inutilizável após o comando sudo'd. Para não continuar trabalhando na guia elevada, basta receber uma press enter or esc to exitmensagem.
jiggunjer

1
Claro que você não pode. Mesmo no Unix, você volta ao terminal não elevado depois que o sudocomando é executado! Você está indo mal.
Maximus

1
1) Se você deseja abrir uma nova janela ou guia, mantenha-a, deixe o usuário escolher se deseja continuar. 2) No meu ubuntu eu não tenho que sudo toda vez, a elevação dura alguns minutos, eu acho. 3) esta aplicação tem um milhão de opções, mas nada para isso? Talvez eu seja mimada.
jiggunjer

24

Método rápido:

Três etapas para adicionar sudo.

  1. Abra o PowerShell.

  2. Copie o seguinte script (Ctrl + C) e cole-o no PowerShell (Alt + Space + 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.

Ele habilitará permanentemente o sudocomando no PowerShell.

Uso:

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

Exemplos:

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

Método longo para aprender:

Nota: eu misturei o script dos dois artigos para criar o script mencionado acima. Em vez de colar manualmente o script no bloco de notas, adicionei as Out-Fileinstruções para salvar ps1e os $profilearquivos do script.

Dica: Se você não é um grande fã de pop-ups do UAC (como eu), salve o seguinte no arquivo * .reg e execute-o:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000

1
Eu amo a solução PowerShell para esta pergunta. Essa deve ser a maneira mais fácil de elevar algo. Existentes .bat podem ser facilmente convertidos em Posh
Mitchell Skurnik

Este erro foi encontrado no Windows 10:. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
sowrov 19/11/2015

@sowrov, consulte [este artigo] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Por padrão, os scripts do PowerShell estão desabilitados em qualquer instalação do Windows. Você precisa habilitá-lo com este comando set-executionpolicy remotesigned. Outras opções remotesignedsão descritas nos documentos oficiais .
quer

Os leitores observam que esse script ps é um invólucro para a powershell -c start -verb runas program.exefuncionalidade. Observe também que você não pode elevar assim com o prompt do cmd (nativamente). Powershell é a melhor opção nativa.
jiggunjer

o mesmo pode ser feito no cmd.exe em vez do powershell env? PowerShell não computa com clink e sem clink windows não computa nada ...
PJJ 26/02

20

Se você estiver fazendo isso no Windows, além do comando Executar como mencionado em algumas outras respostas, também há maneiras de fazer isso com o mouse.

Se você pressionar a Shifttecla enquanto clica com o botão direito do mouse na maioria dos arquivos executáveis ​​no Windows, deverá observar algumas opções mais avançadas. Uma delas é a Run As...opção " " (acho que é chamada " Run As Administrator" do Vista em diante).

Você também pode baixar uma versão mais avançada do RunAs da Microsoft, chamada ShellRunAs , que possui aprimoramentos sobre o comando RunAs interno, tanto na linha de comando quanto nos modos gráficos, incluindo a possibilidade de salvar credenciais da conta


4

Existe um pacote com chocolate com o nome conveniente sudo . Você pode instalar o pacote com chocolatey usando este comando:

choco install -y sudo

Em qualquer shell do Windows / MS que você precise usar, você poderá usá-lo sudoconforme o esperado.


3

Surun é um aplicativo gratuito e de código aberto que permite que certos programas sejam executados com direitos administrativos, sem fornecer uma senha sem alterar o registro do usuário ou modificar variáveis ​​de ambiente.

Quando eu estava usando o Windows XP, este aplicativo me ajuda muito. Beta funciona no Windows 7.


Surun faz um ótimo trabalho. No entanto, às vezes no Windows 8 e 8.1, seus padrões não são ideais. Como ele substitui a execução do Windows como função, você não pode iniciar um prompt de comando com o botão direito do mouse na tela inicial.
Wolf

3

Como você provavelmente descobriu, runas permitirá executar como outro usuário, mas não pode elevar e não passa por diretórios atuais, variáveis ​​de ambiente ou linhas de comando longas.

O shell Hamilton C resolve isso com um su e sudo genuíno. su permite executar um comando como outro usuário; sudo (na verdade, um alias para su) permite executar um comando elevado. Você também pode fazer as duas coisas, executando elevado como um usuário diferente. Diretórios atuais, variáveis ​​de ambiente e longas linhas de comando são transmitidas por meio de um handshake de memória compartilhada entre su em execução no contexto do chamador e uma cópia de si mesma em execução como um interlúdio com as novas credenciais que iniciam o filho. Divulgação completa: sou o autor.


1

Um sudosubstituto funcional para o minttyterminal da Cygwin seria colocar o seguinte script no PATH do usuário:

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

Para mim, este é o único substituto viável para elevar privilégios de programas como vimou cygrunsrvenquanto trabalhava em um terminal no Windows.


1

Este script faz o trabalho:

@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

Salve-o sudo.cmde adicione-o ao seu PATH

Nota: os runasmeios neste contexto "Executar como administrador" e não "Executar como outro usuário"

Retirado daqui e ligeiramente editado para remover o cabeçalho cscript.exe da saída


1
Isso cria um novo console. A nova janela desaparecerá depois que o comando sudo'd for concluído - então você não pode nem ler a saída.
jiggunjer

Infelizmente sim. Mas pode ser usado para alguns comandos básicos (cópia), ferramentas da GUI ou para abrir um cmd de administrador.
Charles Milette

1

A solução mais simples, na minha opinião, é aproveitar o PowerShell para realizar o trabalho, que é portátil e solicitará ao usuário o uso do UAC.

Você pode simplesmente executar isso em qualquer shell (cmd ou powershell)

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

0

O script vbs a seguir faz o truque para mim. Eu colocoC:\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

Exemplo de uso em um prompt de comandos sudo net start service

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.