Como executar o comando 'sudo' no Windows

92

Como eu executaria o seguinte comando no Windows:

$ sudo django-admin.py startproject NEW

?

David542
fonte
É melhor evitar o uso de comandos de terminal no Windows. Em vez disso, tente fazer o mesmo com a ajuda de um IDE, como Eclipse + PyDev. Isso tornará as coisas muito mais simples.
Pushpak Dagade
7
@Pushpak Dagade: Fiquei surpreso com o seu comentário, em geral, mas quando fui digitar, percebi que é PILHA OVERFLOW. Estas são as pessoas que FAZEM uso do terminal no Windows. =) Quer dizer, o PowerShell provavelmente não existiria de outra forma.
Brent Rittenhouse
2
Além disso, e se ele estivesse criando um script para automatizar uma tarefa? (Sim, eu sei que você poderia executar ISSO como um usuário privilegiado.)
Brent Rittenhouse
Experimente o meu wsudo , uma ferramenta semelhante ao sudo para Windows disponível como um pacote Chocolatey.
noseratio

Respostas:

97

Não há sudo comando no Windows. O equivalente mais próximo é "executar como administrador".

Você pode fazer isso usando o runascomando com um nível de confiança de administrador ou clicando com o botão direito do mouse no programa na IU e escolhendo "executar como administrador".

BlueRaja - Danny Pflughoeft
fonte
4
Você sabe se o comportamento das runas varia de versão para versão? Eu instalei o Win7 enterprise e todas as combinações que tentei com runas criam o novo cmd sem privilégios de administrador
notNullGothik
4
Sudo para Windows (sudowin) permite que usuários autorizados iniciem processos com privilégios elevados usando sua própria senha. Ao contrário do comando runas, o Sudo for Windows preserva o perfil do usuário e a propriedade dos objetos criados. Você pode obtê-lo aqui: sourceforge.net/projects/sudowin
Joe Bigler
Verifique gsudo( stackoverflow.com/a/58753166/97471 ). É um sudo para windows com *nix sudoexperiência de usuário: Permite executar o comando dentro do console atual, e cache de credenciais (apenas um popup UAC).
Gerardo Grignoli
runas é a elevação de uma conta de usuário em Administradores; sudo é outra coisa. Esta não deve ser a resposta aceita.
Massimo
14

Abra o bloco de notas e cole este código:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && %*'"
@echo on

Em seguida, salve o arquivo como sudo.cmd. Copie este arquivo e cole-o C:\Windows\System32ou adicione o caminho onde sudo.cmdestá a sua Variável de Ambiente PATH.

Ao abrir o prompt de comando, agora você pode executar algo como sudo start ..

Se você quiser que a janela do prompt de comando do administrador permaneça aberta quando você executar o comando, altere o código no bloco de notas para este:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
@echo on

Explicação:

powershell -Command executa um comando do PowerShell.

Start-Process é um comando do PowerShell que inicia um processo, neste caso, o prompt de comando.

-Verb RunAs executa o comando como admin.

-Argument-List executa o comando com argumentos.

Nossos argumentos são '/c cd /d %CD% && %*'. %*significa todos os argumentos, portanto, se você fizer isso sudo foo bar, ele será executado no prompt de comando foo barporque os parâmetros são foo e bar, e %*retorna foo bar. cd /d %CD%é um comando para ir para o diretório atual. Isso garantirá que, quando você abrir a janela elevada, o diretório seja o mesmo da janela normal. a&& meios que se o primeiro comando for bem sucedido, executar o segundo comando.

O /cé um parâmetro cmd para fechar a janela após a conclusão do comando, e o/k é um parâmetro cmd para manter a janela aberta.

Agradecemos a Adam Plocher por permanecer no código de diretório atual.

Tripulante CME1
fonte
Um problema com isso é que, uma vez elevado, você não está mais na pasta atual, mas sim em C:\Windows\System32.
noseratio
2
@noseratio true, parece que mudá-lo para isto resolverá, no entanto:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher
@AdamPlocher, isso pode funcionar, mas pode ter problemas se a linha de comando %*tiver aspas. É por isso que criei wsudo, baseado em PowerShell.
noseratio
Esta é a elevação de uma conta de usuário em Administradores; sudo é outra coisa.
Massimo
Você não pode simplesmente pular as echolinhas um e três adicionando @antes a linha do PowerShell?
nudl
9

Todas as respostas explicam como elevar seu comando em um novo host de console.

O que me divertiu foi que nenhuma dessas ferramentas se comportou assim *nix sudo, permitindo executar o comando dentro do console atual .

Então, eu escrevi: gsudo

Código-fonte https://github.com/gerardog/gsudo

Instalação

Por colher

  • Instale o scoop se ainda não o tiver. Então:
scoop install gsudo

Ou via Chocolatey

choco install gsudo

Instalação manual:

Demo

gsudo demo

Gerardo Grignoli
fonte
8

Eu criei wsudo, uma sudoferramenta CLI de código aberto para Windows para executar programas ou comandos com direitos elevados, no contexto do diretório atual . Está disponível em embalagem de Chocolatey .

Eu o uso muito para coisas como configurar agentes de construção, coisas de administração como sfc /scannow, dism /online /cleanup-image /restorehealthou simplesmente para instalar / atualizar meus pacotes locais Chocolatey. Use por sua conta e risco.

Instalação

choco install wsudo

Chocolatey já deve estar instalado.

Objetivo

wsudoé uma sudoferramenta semelhante ao Linux para Windows para invocar um programa com direitos elevados (como Administrador) a partir de um prompt de comando shell não administrativo e manter seu diretório atual.

Esta implementação não depende do Windows Script Host ( CScript) legado . Em vez disso, ele usa um script auxiliar PowerShell 5.1 que invoca"Start-Process -Wait -Verb runAs ..." cmdlet. O mais provável é que seu sistema já tenha o PowerShell 5.x instalado, caso contrário, você será oferecido para instalá-lo como uma dependência.

Uso

wsudoexecuta um programa ou um comando embutido com direitos elevados no diretório atual. Exemplos:

wsudo .\myAdminScript.bat 
wsudox "del C:\Windows\Temp\*.* && pause"
wasudo cup all -y
wasudox start notepad C:\Windows\System32\drivers\etc\hosts 

Para obter mais detalhes, visite o repro do GitHub .

noseratio
fonte
2
Obrigado por publicar "wsudo", é bastante útil para mim. Acho que a vantagem do seu wsudo é manter o diretório de trabalho diferente das alternativas. Não consegui encontrar um que pudesse manter o CWD diferente de wsudo. Acho que você deve enfatizar este ponto na descrição. Eu realmente aprecio seu trabalho.
benok de
3
Mais uma coisa para informá-lo. Você sabe hackear a barra de endereços para abrir o shell diretamente? Eu costumo usar esse hack, mas fiquei muito frustrado quando quero melhorar o shell com ele. Tentei encontrar muitas alternativas, mas não funciona. Finalmente posso abrir um com "wasudo [shell]". Eu amo ter isso Obrigado novamente :-)
benok
3
@benok, sim, é um hack muito útil! Ainda bem wasudoque facilitou para você. Eu mesmo vivo principalmente no terminal de console integrado VSCode, então apenas digito wasudolá :) A próxima melhoria seria herdar os vars de ambiente .
noseratio
Olá @benok, você também pode estar interessado no meu novo utilitário para melhorar a produtividade de copiar / colar / executar, DevComrade :)
noseratio
5

runascomando requer que os usuários digitem a senha. Se você não quiser digitar a senha e quiser apenas clicar na caixa de diálogo UAC, use Start-Process -Verb runasno PowerShell em vez do runascomando.

consulte: http://satob.hatenablog.com/entry/2017/06/17/013217

SATO Yusuke
fonte
Esta é a elevação de uma conta de usuário em Administradores; sudo é outra coisa.
Massimo
4

Você normalmente não faria isso, já que não iria executá-lo sob * nix independentemente. Faça o desenvolvimento em um diretório do usuário e implante depois nos diretórios do sistema.

Ignacio Vazquez-Abrams
fonte
2

O script vbs a seguir permite lançar um determinado comando com argumentos com elevação e imita o comportamento do comando unix sudo original para um conjunto limitado de casos usados ​​(não armazenará em cache as credenciais nem permitirá realmente executar comandos com credenciais diferentes). Eu coloquei C:\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 comando sudo net start service

Ceztko
fonte
1
como podemos fazer o script esperar pela entrada do usuário, para que possamos ler a saída do programa shell?
Ahmad Hajjar
1
Você quer dizer comando de shell interativo? Bem, primeiro você deve tentar certificar-se de que o comando lançado será aguardado para retorno. Aqui parece que é possível. Então você deve obter a saída dos objetos do shell e gerá-la, o que eu acho que também é possível. Não espere que tudo o que você pode fazer no Unix seja possível, no entanto.
ceztko
No Windows 10, ele lança um erro de sintaxe na linha 1, caractere 6.
Martin Braun
Esta é a elevação de uma conta de usuário em Administradores; sudo é outra coisa.
Massimo
1

Acho que tentei as etapas abaixo depois de fazer algumas pesquisas e tive sucesso

1. Instale o scoop usando o powershell 3 (iex (new-object net.webclient) .downloadstring (' https://get.scoop.sh ')) 2. faça scoop install --global sudo 3. certifique-se de caminhos (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) adicionado na variável de caminho ambiental.

Pawan Gangwani
fonte
1

Não há comando sudo no caso do windows e também não há necessidade de colocar $. Para instalar o Angular CLI por meio do prompt de comando node.js no Windows, acabei de escrever npm install -g @ angular / cli e pressione Enter. Funcionou bem.

Saurabh Kumar
fonte
0

abra o console como administrador. Clique com o botão direito no prompt de comando ou bash -> mais e selecione "executar como administrador"

James N
fonte
0

No Windows Powershell você pode usar o comando Start-Process com a opção -Verb RunAsde iniciar um processo elevado. Aqui está meu exemplo de função sudo:

function sudo {
    Start-Process @args -verb runas
}

Ex: Abra o arquivo hosts como Admin no bloco de notas

sudo notepad C:\Windows\System32\drivers\etc\hosts
David Hatch
fonte
0

Usando o sudo comando para usuários de janela oferece as seguintes sugestões:

Primeiro, instale a scoopferramenta de gerenciamento de pacotes e execute os seguintes comandos:

insira a descrição da imagem aqui

Em seguida, use scooppara instalar o sudocomando:

insira a descrição da imagem aqui

Finalmente, você pode executar o comando com sudo:

insira a descrição da imagem aqui

azjhong
fonte
0

Fico feliz em ajudá-lo.

Para fazer um comando sudo, siga as etapas: -

  1. Faça uma pasta env em C: \ Drive.
  2. Crie uma pasta dentro da pasta env chamada bin.
  3. Agora adicione C: \ env \ bin ao seu PATH.
  4. Crie um arquivo sudo.bat em C: \ env \ bin.
  5. Edite-o com o bloco de notas e escreva este código: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Espero que isso te ajude

Aayush Shah
fonte
Essa resposta deve incluir o texto do arquivo de lote, não depender de um link fora do site por causa da podridão do link. Além disso, a resposta deve incluir o aviso de que este script procura emular o comportamento grosseiro do sudo, mas não é realmente sudo (é um pseudo-sudo).
perguntou
0

Para apenas executar um comando como administrador em um Powershell não elevado, você pode usar Start-Processdiretamente, com as opções certas, principalmente -Verb runas.

É muito mais complicado do que sudo, principalmente porque você não pode simplesmente reutilizar o comando anterior com uma opção adicional. Você precisa especificar os argumentos para o seu comando separadamente.

Aqui está um exemplo, usando o comando route para alterar o gateway:

Isso falha porque não estamos em um PS elevado:

> route change 0.0.0.0 mask 0.0.0.0 192.168.1.3
The requested operation requires elevation.

Isso funciona depois de aceitar o UAC:

> Start-Process route -ArgumentList "change 0.0.0.0 mask 0.0.0.0 192.168.1.3" -Verb runas

Ou para um comando que requer cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
mivk
fonte