É 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".
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.
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 .
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.
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 .
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.
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.
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.
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.
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.
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
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:
Respostas:
Não há
sudo
comando no Windows. O equivalente mais próximo é "executar como administrador".Você pode fazer isso usando o
runas
comando 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".fonte
gsudo
( stackoverflow.com/a/58753166/97471 ). É um sudo para windows com*nix sudo
experiência de usuário: Permite executar o comando dentro do console atual, e cache de credenciais (apenas um popup UAC).Abra o bloco de notas e cole este código:
Em seguida, salve o arquivo como
sudo.cmd
. Copie este arquivo e cole-oC:\Windows\System32
ou adicione o caminho ondesudo.cmd
está 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:
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 issosudo foo bar
, ele será executado no prompt de comandofoo bar
porque os parâmetros são foo e bar, e%*
retornafoo 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.
fonte
C:\Windows\System32
.powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
%*
tiver aspas. É por isso que crieiwsudo
, baseado em PowerShell.echo
linhas um e três adicionando@
antes a linha do PowerShell?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
Ou via Chocolatey
Instalação manual:
Demo
fonte
Eu criei
wsudo
, umasudo
ferramenta 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 /restorehealth
ou simplesmente para instalar / atualizar meus pacotes locais Chocolatey. Use por sua conta e risco.Instalação
Chocolatey já deve estar instalado.
Objetivo
wsudo
é umasudo
ferramenta 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
wsudo
executa um programa ou um comando embutido com direitos elevados no diretório atual. Exemplos:Para obter mais detalhes, visite o repro do GitHub .
fonte
wasudo
que facilitou para você. Eu mesmo vivo principalmente no terminal de console integrado VSCode, então apenas digitowasudo
lá :) A próxima melhoria seria herdar os vars de ambiente .runas
comando 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, useStart-Process -Verb runas
no PowerShell em vez dorunas
comando.consulte: http://satob.hatenablog.com/entry/2017/06/17/013217
fonte
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.
fonte
no Windows, você pode usar o comando runas. Para usuários do Linux, existem algumas alternativas para sudo no windows, você pode verificar isto
http://helpdeskgeek.com/free-tools-review/5-windows-alternatives-linux-sudo-command/
fonte
Você pode usar o comando runas - http://technet.microsoft.com/en-us/library/bb490994.aspx ou sudowin - http://sourceforge.net/projects/sudowin/
fonte
Existe meio que. Criei o Sudo para Windows em 2007? 08? Aqui está o artigo de segurança que escrevi sobre isso - https://www.sans.org/reading-room/whitepapers/bestprac/sudo-windows-sudowin-1726 . Com certeza http://sudowin.sf.net ainda funciona também.
fonte
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
.Exemplo de uso em um prompt de comando
sudo net start service
fonte
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.
fonte
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.
fonte
abra o console como administrador. Clique com o botão direito no prompt de comando ou bash -> mais e selecione "executar como administrador"
fonte
No Windows Powershell você pode usar o comando Start-Process com a opção
-Verb RunAs
de iniciar um processo elevado. Aqui está meu exemplo de função sudo:Ex: Abra o arquivo hosts como Admin no bloco de notas
fonte
Usando o
sudo
comando para usuários de janela oferece as seguintes sugestões:Primeiro, instale a
scoop
ferramenta de gerenciamento de pacotes e execute os seguintes comandos:Em seguida, use
scoop
para instalar osudo
comando:Finalmente, você pode executar o comando com
sudo
:fonte
Fico feliz em ajudá-lo.
Para fazer um comando sudo, siga as etapas: -
https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13
Espero que isso te ajude
fonte
Para apenas executar um comando como administrador em um Powershell não elevado, você pode usar
Start-Process
diretamente, 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:
Isso funciona depois de aceitar o UAC:
Ou para um comando que requer
cmd.exe
:fonte