É possível executar automaticamente um arquivo de lote como administrador?

41

Eu estou querendo saber se é possível automaticamente abrir um arquivo de lote como administrador quando você clica duas vezes no arquivo de lote, porque os comandos precisam ser executados com direitos administrativos.

Observação: eu já sei sobre a solução de clicar com o botão direito do mouse no arquivo e clicar em Run As Administrator , mas essa não é uma solução automática.

    
por Antp 28.07.2014 / 05:24

9 respostas

37

Sim, você pode executar um arquivo em lotes com direitos administrativos. Infelizmente, você não pode fazer isso diretamente do próprio arquivo em lote. Você precisaria primeiro criar um atalho desse arquivo em lote e alterar as propriedades desse atalho para que isso funcionasse.

Para criar um atalho, existem várias maneiras, mas a maneira mais simples e rápida é usar a opção Enviar para no menu de contexto.

Right click batch file > Send to > Desktop (create shortcut)

É claro que você pode enviar o atalho para onde quiser. Para elevar o arquivo de lote para ser executado como administrador, siga as etapas abaixo:

  1. Clique com o botão direito no atalho que você acabou de criar (deve estar na área de trabalho ou onde quer que você o envie)
  2. Na guia Atalho, clique no botão Avançado ...
  3. Marque a caixa de seleção Executar como administrador e pressione OK para a janela modal e a janela de propriedades principais.
  4. Execute o atalho clicando duas vezes nele e o arquivo em lote deverá ser executado como administrador.
por 28.07.2014 / 05:43
26

Como postado em uma resposta de Ben Gripka para outra pergunta:

REM --add the following to the top of your bat file--


@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
    
por 15.12.2014 / 17:55
4

no Windows 7

  1. Crie um atalho para esse arquivo em lote

  2. Clique com o botão direito do mouse no arquivo de atalho

  3. Clique no botão de avanço para encontrar uma caixa de seleção para executar como administrador

Verifique a imagem abaixo

    
por 10.02.2015 / 15:25
3

A resposta aceita realmente funciona. Mas eu achei que no Windows 7, eu tinha que suportar a caixa de diálogo do UAC cada vez que o atalho fosse clicado. Esta IMHO diminui significativamente o "automaticamente" nesta questão!

Depois, descobri que, em minha própria situação, o arquivo .bat em questão deve ser executado pelo Agendador de Tarefas. Nesse caso, verificar a opção Run with highest privileges na guia General da tarefa resolve bem o problema. O .bat é executado como administrador sem problemas.

PS: Eu não percebi que não podia enviar imagens nesta resposta, porque eu tenho uma boa captura de tela sentada comigo agora! Ou posso?

    
por 07.10.2014 / 20:42
3

Você pode usar meu script Batch_Admin para elevar automaticamente o Administrador para uso em qualquer tipo de script próprio do Batch, ou BAT ou .CMD. Esta função garante o trabalho em um ambiente padrão, com ferramentas padrão e da mesma maneira em diferentes sistemas Windows. Ele usa vários comandos padrão e internos do Windows. Não use outros scripts externos. Ele pode ser usado para chamar qualquer programa como administrador, não apenas scripts de lote. Basta criar um pequeno script, que então chama o programa que requer permissão Administartor. Coloque isso em qualquer pasta PATH de pesquisa (de% PATH%).

Para usá-lo, basta inserir a seguinte linha (exatamente como) em seu script Batch pai, que deve ser executado como Administrador. Isto é melhor feito no topo do nosso script pai e é melhor que primeiro, que será chamado através do CALL, alguns sub-scripts (veja a explicação detalhada abaixo).

net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

Isso pode ser inserido dentro de qualquer script filho, chamado pela sintaxe CALL. Para exibir uma mensagem enquanto ainda é não tem privilégios de administrador, por exemplo. por 5 segundos antes de chamar Batch_Admin definir a variável "ShowAdminInfo" no número de segundos

SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

Então, como funciona:

• Chama o UAC.ShellExecute através do VBScript para obter permissões de usuário

• O lote executa o script, ou BAT ou CMD

• O chamador de script pode ter espaços de nomes longos incluídos na chamada entre aspas

• Devolve todos os parâmetros chama o script mestre passado da linha de comando, como se não houvesse transmissão da chamada e inicie algo do zero, também com caracteres especiais, como pontos de exclamação (!) e porcentagem (%) e também com parênteses ()

• Mantém um local de script mestre se a chamada ocorreu no diretório onde este script é o mestre

• Auxiliar exibe uma mensagem se definirmos antes de nós a variável "ShowAdminInfo", por exemplo. por 5 segundos, o que pode impedir a passagem imediata dos direitos do Administrador dando informações adicionais e a possibilidade de uma decisão informada. Exemplos de configuração que devem ser definidos: SET ShowAdminInfo = 5 Por padrão, como essa variável não está definida, ela não é exibida.

• O script também está chamando no caminho de pesquisa do sistema% PATH% e do recurso de rede, como: \ Computer \ share \ test.bat

• Evita mal-entendidos ao escrever os arquivos auxiliares necessários quando o script chama vários Batch_Admin quase ao mesmo tempo. Usa o número aleatório de 1 a 100

• Mas o melhor é usá-lo no script pai. A transição para direitos de Administrador sempre exige que você execute o script completamente novamente, em uma nova janela, em um novo ambiente, sem recorrer às variáveis definidas anteriormente em nosso script e os valores dessas variáveis não passam então para chamar como Administrador . Apenas o script será executado novamente.

Abaixo de um script completo, Batch_Admin. Informações estendidas sobre isso estão no meu site.

Copie o seguinte texto no bloco de notas e salve-o no disco como: Batch_Admin.bat

@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)

::  A D M I N I S T R A T O R   - Automatically get admin rights for script batch. Paste this on top:    net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*
::                                Also keep Batch directory localisation and then set variable:   PATH_BAT
::                                if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
::                                Elaboration:  Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion

SET "Localy="
if exist "%~1"      SET "Localy=YES"
if exist "%~1.BAT"  SET "Localy=YES"
if exist "%~1.CMD"  SET "Localy=YES"
if defined Localy   FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"

 SET P1=%~1
 SET Parameters=%*
 SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
 SET Parameters=!Parameters:%P1%=!
 SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
 SET Parameters=%Parameters:~3%

net session >nul 2>nul&if not errorlevel 1  goto Administrator_OK

if not defined ShowAdminInfo   goto skip_message_Administrator
echo.
echo Script:  %~1
echo.
echo *****************************************************************
echo ***    R U N N I N G     A S     A D M I N I S T R A T O R    ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo          shortcut ^> Advanced ^> Running as Administrator
echo.
echo     Alternatively run once "As Administrator"
echo     or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch  %ShowAdminInfo%  seconds ...
TIMEOUT /T %ShowAdminInfo% > nul

:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1

SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat"  SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul

echo @SET "PATH_BAT=%PATH_BAT%"               > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%"    >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy  (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"

echo SET UAC = CreateObject^("Shell.Application"^)                                   > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B

:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R  - Automatically get admin rights  (The End)  ***
    
por 31.05.2015 / 16:49
1

Como alternativa, você pode criar um segundo arquivo em lotes, isso pode permitir que você execute qualquer coisa como administrador, inserindo apenas a senha do administrador uma vez. A senha é salva em um token de autenticação e faz com que alguns computadores reais saibam como decifrar.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
    
por 28.07.2014 / 16:33
1
@echo off        
:: BatchGotAdmin        
:-------------------------------------        
REM  --> Check for permissions  
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"  
REM --> If error flag set, we do not have admin.  
if '%errorlevel%' NEQ '0' (    echo Requesting administrative privileges...    goto UACPrompt) else ( goto gotAdmin )  
:UACPrompt  
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"  
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"  
    "%temp%\getadmin.vbs"  
    exit /B
:gotAdmin  
chkdsk

Isso também funciona FONTE: link

    
por 26.11.2015 / 04:54
0

Você pode usar um utilitário de linha de comando elevate . (link para download - link )

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog
    
por 11.11.2015 / 10:50
0

É um exemplo para executar o bastão como administrador. Isso funciona para mim.

É assim:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
:eof
start Cmd /k "netsh wlan show profile"
pause </

cls
Color 0A
@echo off
echo.
cls
set/p ProfileName=Type the name of the current Wifi signal? 
echo.
start Cmd /k "netsh wlan show profile name=%ProfileName% key=clear"
pause </
exit
pause
    
por 25.11.2015 / 08:07