Como abro um prompt de comando elevado usando linhas de comando em um cmd normal?
Por exemplo, eu uso, runas /username:admin cmd
mas o cmd que foi aberto não parece estar elevado! Alguma solução?
Como abro um prompt de comando elevado usando linhas de comando em um cmd normal?
Por exemplo, eu uso, runas /username:admin cmd
mas o cmd que foi aberto não parece estar elevado! Alguma solução?
Respostas:
Encontrei o mesmo problema e a única maneira de abrir o CMD como administrador do CMD foi fazendo o seguinte:
powershell -Command "Start-Process cmd -Verb RunAs"
e pressioneEnterDe 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:
nircmdc elevate cmd
npm install -g windosu
(requer node.js instalado)sudo cmd
nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1
finalmente funcionou. As outras runas /user:...
formas solicitam uma senha, apesar de já ser um administrador (modo de lote morto).
nircmdc elevate cmd
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
windosu
:)
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"
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"
sudo.bat
para uma pasta em seu PATH
; se você não sabe o que isso significa, basta mover esses arquivos parac:\windows\
sudo
funcionará na caixa de diálogo Executar ( win+r) ou na barra de endereço do explorer (esta é a melhor parte :))sudo.bat
(você pode substituirsudo
pelo nome que desejar) com o seguinte conteúdo
nircmdc elevate cmd /k "cd /d %cd%"
nircmdc.exe
e sudo.bat
para uma pasta em seu PATH
; se você não sabe o que isso significa, basta mover esses arquivos parac:\windows\
sudo
funcionará na caixa de diálogo Executar ( win+r) ou na barra de endereço do explorer (esta é a melhor parte :))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)"
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.
Faça com que o arquivo em lote salve as credenciais da conta do administrador real usando a /savecred
opçã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
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 ).
%SystemRoot%\System32\cmd.exe /k "cd /d"
@start cmdadm.lnk %cd%
Corra com su
.
Eu tenho usado Elevate
por 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.exe
do .zip
para C:\Program Files\elevate
e adiciono esse caminho ao meu PATH
.
Então, GitBash, posso executar algo como elevate sc stop W3SVC
desligar o IIS
serviç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.
..
@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 ...
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 elevate
comando 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, elevatep
eelevatex
, 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
)
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
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"
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
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:
Aqui estão as etapas:
* Use pushd em vez de cd para permitir que funcione em qualquer unidade. :-)
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.
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).
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 user
não colocar username
:
runas /user:machinename\adminuser cmd
Consulte a ajuda relevante da comunidade Microsoft .
Eu usei o runas /user:domainuser@domain cmd
que abriu um prompt elevado com sucesso.