Como abrir um cmd elevado usando a linha de comando do Windows?

109

Como abro um prompt de comando elevado usando linhas de comando em um cmd normal?

Por exemplo, eu uso, runas /username:admin cmdmas o cmd que foi aberto não parece estar elevado! Alguma solução?

user2633882
fonte
Tentei todas as respostas. A resposta mais útil sem nenhum software e nenhuma ação é stackoverflow.com/a/40942828/9217577
TheGuardener

Respostas:

165

Encontrei o mesmo problema e a única maneira de abrir o CMD como administrador do CMD foi fazendo o seguinte:

  1. Abrir CMD
  2. Escreva powershell -Command "Start-Process cmd -Verb RunAs"e pressioneEnter
  3. Uma janela pop-up aparecerá pedindo para abrir um CMD como administrador
Gui
fonte
2
Boa resposta. Eu adicionei e editei para fazê-lo funcionar em uma linha de comando!
Preet Sangha de
1
Eu criei um arquivo em lote com isso e salvei-o como admincmd.bat na minha pasta do Windows, então tudo que tenho a fazer é digitar "admincmd", pressione Enter e ele abre um cmd admin. (Eu também adicionei outra linha ao arquivo em lote com " sair "para fechar a janela cmd não administrativa)
Tony Brix
Por que não colocar o cmd (e quaisquer parâmetros) no final. Ter o comando é estranho do ponto de vista da legibilidade.
Eric Fossum
38

De acordo com a documentação , o modelo de segurança do Windows ...

não concede privilégios administrativos em todos os momentos. Mesmo os administradores são executados com privilégios padrão quando executam tarefas não administrativas que não requerem privilégios elevados.

Você tem a opção Criar esta tarefa com privilégios administrativos na caixa de diálogo Criar nova tarefa ( Gerenciador de tarefas> Arquivo> Executar nova tarefa ), mas não há uma maneira integrada de elevar privilégios de maneira eficaz usando a linha de comando.

No entanto, existem algumas ferramentas de terceiros (dependendo internamente de APIs do Windows) que você pode usar para elevar os privilégios da linha de comando:

NirCmd :

  1. Baixe-o e descompacte-o.
  2. nircmdc elevate cmd

Windosu :

  1. Instale: npm install -g windosu(requer node.js instalado)
  2. sudo cmd
Ricardo Stuven
fonte
3
Obrigado, nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1finalmente funcionou. As outras runas /user:...formas solicitam uma senha, apesar de já ser um administrador (modo de lote morto).
Marcos
Obrigado pornircmdc elevate cmd
tim
4
Depois de instalar nircmd, para que funcione como o Linux sudo, crie umsudo.bat arquivo em seu caminho com este conteúdo: nircmd elevate %*. Então você pode fazer, por exemplo,sudo net stop W3SVC
Kip
1
Acho que Windosu é de longe a maneira mais simples e elegante de fazer isso, especialmente se você for um dev ... obrigado cara. Eu sinto que estou no sistema nix: D
Emmanuel Mahuni
Amado windosu :)
Finlay Roelofs
32

Não tenho reputação suficiente para adicionar um comentário à resposta principal, mas com o poder dos aliases, você pode se safar apenas digitando o seguinte:

powershell "start cmd -v runAs"

Esta é apenas uma versão mais curta da excelente solução user3018703:

powershell -Command "Start-Process cmd -Verb RunAs"
Stiegler
fonte
26

Maneira simples que fiz depois de tentar outras respostas aqui

Método 1: SEM um programa de terceiros (usei este)

  1. Crie um arquivo chamado sudo.bat(você pode substituirsudo pelo nome que desejar) com o seguinte conteúdo powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Mova sudo.batpara uma pasta em seu PATH; se você não sabe o que isso significa, basta mover esses arquivos parac:\windows\
  3. Agora sudofuncionará na caixa de diálogo Executar ( win+r) ou na barra de endereço do explorer (esta é a melhor parte :))

Método 2: COM um programa de terceiros

  1. Baixe o NirCmd e descompacte-o.
  2. Crie um arquivo chamado sudo.bat(você pode substituirsudo pelo nome que desejar) com o seguinte conteúdo nircmdc elevate cmd /k "cd /d %cd%"
  3. Mova nircmdc.exee sudo.batpara uma pasta em seu PATH; se você não sabe o que isso significa, basta mover esses arquivos parac:\windows\
  4. Agora sudofuncionará na caixa de diálogo Executar ( win+r) ou na barra de endereço do explorer (esta é a melhor parte :))
Dheeraj Bhaskar
fonte
Embora ambos soluções de trabalho, infelizmente, eles vão resultar na UAC diálogo aparecendo no topo (z-ordem sábio), mas não ficar focado . (Testado em Win10x64 v1607 build14393.447.)
Ogmios
@Ogmios isso é bastante estranho. a caixa de diálogo funciona corretamente quando não iniciada dessa forma? Estou muito feliz em usar isso sem esses problemas. Talvez seja por causa de alguma outra configuração que você alterou?
Dheeraj Bhaskar
Sim, a caixa de diálogo do UAC funciona conforme o esperado em todas as outras situações (que encontrei). Esta é a única exceção. E é claro que mudei meu sistema de outras maneiras, mas não encontrei nada que possa ter um efeito oculto nesta caixa de diálogo.
Ogmios
@Ogmios, desculpe, cara, não consigo pensar em mais nada que você possa fazer para consertar isso. Você provavelmente deve tentar as outras soluções para ver se elas são melhores para você. Saúde
Dheeraj Bhaskar
Embora o PowerShell não seja um terceiro, não é um programa de estoque, e você está escrevendo um programa de terceiro para atingir o objetivo.
undrline de
13

Eu uso programas nirsoft (por exemplo, nircmdc) e sysinternals (por exemplo, psexec) o tempo todo. Eles são muito úteis.

Mas se você não quiser ou não puder fazer dl de um programa de terceiros, aqui está outra maneira, puro Windows.

Resposta curta : você pode, enquanto elevado, criar uma tarefa agendada com privilégios elevados que você pode invocar mais tarde enquanto não estiver elevado.

Resposta de comprimento médio : embora elevado crie tarefa com (mas eu prefiro GUI do agendador de tarefas):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

Então, mais tarde, nenhuma elevação necessária, invoque com

schtasks /run /tn cmd_elev

Resposta longa : há muitos detalhes inquietantes; veja a entrada do meu blog "Iniciar programa SEM UAC, útil na inicialização do sistema e em arquivos em lote (use o agendador de tarefas)"

john v kumpf
fonte
8

O seguinte, como um arquivo em lote, abrirá um prompt de comando elevado com o caminho definido para o mesmo diretório de onde o arquivo em lote foi chamado

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
Statler
fonte
5

Minha maneira favorita de fazer isso é usando PsExec.exe da SysInternals, disponível em http://technet.microsoft.com/en-us/sysinternals/bb897553

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

O interruptor "-h" é o que faz a mágica:

-h Se o sistema de destino for Vista ou superior, executa o processo com o token elevado da conta, se disponível.

David Rodriguez
fonte
1
Para fazer isso funcionar, você deve editar as propriedades de psexec.exe e, na guia de compatibilidade, marcar "Executar como Administrador". Caso contrário, você obterá o erro: PSEXESVC não instalado. Mas o psexec causa problemas com a tecla tab no cmd.exe. Não é possível usar a guia para completar os nomes das pastas.
Peter Quiring
Não tenho certeza em qual ambiente você tentou, mas não precisei alterar a configuração "Executar como administrador" (você está tentando executar o cmd.exe em uma máquina remota da sua?). Também sem problemas com a tecla tab, posso completar com sucesso os nomes dos arquivos e pastas (pelo menos testado no Win8.1 e Win10, rodando a partir das linhas de comando cmd e PowerShell)
David Rodriguez
Estou usando o Win10 e executando-o localmente. Não sei por que isso acontece comigo e não com você. Consegui fazer o nircmd funcionar e não causa problema de guia.
Peter Quiring
Também noto que não é possível preencher automaticamente com a tecla tab, mas pelo menos isso abriria um prompt de cmd elevado no contexto de outro usuário, o que os métodos anteriores acima não pareciam atingir quando tentei. O sinalizador '-h' é ótimo (windows 10), funciona muito bem.
user1840734
4

Faça com que o arquivo em lote salve as credenciais da conta do administrador real usando a /savecredopção. Isso solicitará as credenciais pela primeira vez e, em seguida, armazenará a senha criptografada no gerenciador de credenciais. Em seguida, em todas as vezes subsequentes em que o lote for executado, ele será executado como administrador completo, mas não solicitará as credenciais porque elas são armazenadas criptografadas no gerenciador de credenciais e o usuário final não consegue obter a senha. O seguinte deve abrir um CMD elevado com privilégios totais de administrador e só solicitará a senha na primeira vez:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
Stefan Gadecki
fonte
3

Embora ambas as soluções fornecidas pelo trabalho Dheeraj Bhaskar, infelizmente, eles vão resultar na UAC diálogo aparecendo no topo (z-ordem sábio), mas não ficar focado (a janela focada é chamada cmd / powershell janela), assim eu nem necessidade de pegue o mouse e clique em "sim" ou selecione a janela do UAC usando Alt + Shift + Tab. (Testado em Win10x64 v1607 build14393.447; UAC = "[...] não escurecer [...]" .)

A solução a seguir é um pouco estranha, pois usa dois arquivos, mas preserva a ordem correta do foco, portanto, nenhuma ação extra do mouse / teclado é necessária (além de confirmar a caixa de diálogo do UAC: Alt + Y ).

  1. cmdadm.lnk (propriedades de atalho / Avançado ... / Executar como administrador = LIGADO) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Corra com su.

Ogmios
fonte
Infelizmente, não consigo reproduzir isso. Sempre que uso uma das minhas soluções. Meu prompt UAC está focado e no topo
Dheeraj Bhaskar
3

Eu tenho usado Elevatepor um tempo agora.

É a descrição - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

Eu copio bin.x86-64\elevate.exedo .zippara C:\Program Files\elevatee adiciono esse caminho ao meu PATH.

Então, GitBash, posso executar algo como elevate sc stop W3SVCdesligar o IISserviço.

Executar o comando me dá o UAC caixa de diálogo, devidamente focada com o controle do teclado e, ao aceitar a caixa de diálogo, retorno ao meu shell.

Seangwright
fonte
3

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

salve este script como "god.cmd" em seu system32 ou qualquer que seja o seu caminho direcionando ....

se vc abrir um cmd em e: \ mypictures \ e digitar god ele pedirá suas credenciais e o colocará de volta no mesmo lugar que o administrador ...

jOte-
fonte
1
powershell é legal, mas precisa de módulos ... sou oldscool ... só preciso do sistema ...
jOte-
Este método / truque de elevação também funciona para caminhos / nomes de arquivos longos? Ou devo usar "% ~ snx0" ou "% ~ dpsnx0" em vez disso?
script'n'code 01 de
2

Semelhante a algumas das outras soluções acima, criei um elevate arquivo em lote que executa uma janela elevada do PowerShell, ignorando a política de execução para permitir a execução de tudo, desde comandos simples a arquivos em lote a scripts PowerShell complexos. Recomendo colocá-lo na pasta C: \ Windows \ System32 para facilitar o uso.

O elevatecomando original executa sua tarefa, captura a saída, fecha a janela gerada do PowerShell e retorna, gravando a saída capturada na janela original.

Eu criei duas variantes, elevatepeelevatex , que respectivamente pausam e mantêm a janela do PowerShell aberta para mais trabalho.

https://github.com/jt-github/elevate

E caso meu link morra, aqui está o código para o arquivo de lote original:

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)
Shadow Lynx
fonte
0

Pode usar uma variável de ambiente temporária para usar com um atalho elevado (

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk (atalho)

_ properties\advanced\"run as administrator"=yes

(para fazer alterações de caminho, você precisará criar temporariamente o env.Variable)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

) (TargetCmd é executado em uma janela elevada de cmd)

Embora sejam 3 arquivos, você pode colocar tudo (incluindo o targetCmd) em alguma subpasta (não se esqueça de adicionar o folderName aos patches) e renomear "start.cmd" para o único nome de destino

Para mim, parece a maneira mais nativa de fazer isso, enquanto cmd não tem o comando necessário

ilia
fonte
Li todas as soluções acima e as compreendi. eu não entendo os seus passos. estou escolhendo a solução com os melhores prós e contras.
Dzmitry Lahoda
0

Não tenho certeza se a ferramenta ExecElevated.exe (13 KB) fará o trabalho .... mas pode. Ou pelo menos ser útil para outras pessoas com necessidades semelhantes que vieram a esta página como eu (mas não encontrei a solução, então acabei criando a ferramenta sozinho em .Net).

Ele executará um aplicativo com token elevado (no modo de administrador). Mas você receberá uma caixa de diálogo do UAC para confirmar! (talvez não se o UAC foi desativado, não o testei).

E a conta que chama a ferramenta também deve ter admin. direitos, é claro.

Exemplo de uso:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
MrCalvin
fonte
2
Eu adoro as respostas com "Isso pode funcionar, não testei ainda" e, claro, aquela com "não tenho certeza" ....
Giridhar Karnik
1
o link está quebrado.
Dzmitry Lahoda
Link restabelecido, desculpe por isso
MrCalvin
0

O método de Dheeraj Bhaskar com o Powershell tem um espaço ausente, pelo menos para a encarnação do Windows 10 do Powershell.

A linha de comando dentro de seu sudo.bat deve ser

powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"

Observe o espaço extra após% cd%

;) Frode

Frode Severin Hatlevik
fonte
0

Aqui está uma forma de integração com o explorer. Ele irá abrir um item de menu extra quando você clicar com o botão direito em qualquer pasta no Windows Explorer:

Integração com o Windows Explorer

Aqui estão as etapas:

  1. Crie esta chave: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. Altere seu valor padrão para o que deseja que apareça como o texto do item de menu. Ex "DOS Shell como Admin"
  3. Crie esta outra chave: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. Altere seu valor padrão para este, ipsis litteris: powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/ k pushd"% 1 "'"
  5. Está feito. Agora, clique com o botão direito em qualquer pasta e você verá seu item dentro dos outros itens.

* Use pushd em vez de cd para permitir que funcione em qualquer unidade. :-)

rribas
fonte
-1

Você pode usar a seguinte sintaxe, eu tinha a mesma dúvida e não achei que um script deveria ser necessário.

runas / perfil / usuário: domínio \ nome de usuário cmd

Isso funcionou para mim, pode ser diferente na sua rede.

Sean Golash
fonte
-1

Basta usar o comando: runas / noprofile / user: administrador cmd

Thủy Chu
fonte
-2

Fiz isso facilmente usando o seguinte comando em cmd

runas / netonly / user: Administrador \ Administrador cmd

depois de digitar este comando, você deve inserir sua senha de administrador (se você não souber sua senha de administrador, deixe em branco e pressione Enter ou digite algo, funcionou para mim).

Harish Regada
fonte
não me ajudou
Dzmitry Lahoda
@DzmitryLahoda você pode me informar o erro que você obteve?
Harish Regada
-2

Pressione a tecla Windows + X e agora você pode selecionar o Powershell ou Prompt de comando com direitos de administrador. Funciona se você for o administrador. A função pode ficar inutilizável se o sistema não for seu.

Tom
fonte
-5

Existem várias maneiras de abrir um cmd elevado, mas apenas o seu método funciona no prompt de comando padrão. Você só precisa usernão colocar username:

runas /user:machinename\adminuser cmd

Consulte a ajuda relevante da comunidade Microsoft .

Matt
fonte
4
Isso não é a mesma coisa que executar um comando elevado, porque quando eu abro uma janela cmd elevada e digito "whoami", o resultado é o mesmo que uma janela não elevada. Quando executo "whoami / all" em ambos os casos, posso ver as diferenças em termos de permissões para o mesmo usuário.
Constantino Cronemberger
-5

Eu usei o runas /user:domainuser@domain cmdque abriu um prompt elevado com sucesso.

JasonC
fonte
Requer as credenciais de outro usuário. Se você já é Administrador e deseja executar com privilégios elevados, como quando você clica com o botão direito em um aplicativo e escolhe executar como administrador e nenhuma senha é solicitada, apenas uma caixa de diálogo de confirmação, então você precisa de outra coisa. Vim aqui em busca dessa resposta, mas parece que não estou aqui.
Paul-Sebastian Manole de