É possível executar automaticamente um arquivo em lote como administrador

É possível executar automaticamente um arquivo em lote como administrador

Estou me perguntando se é possívelautomaticamenteabra um arquivo em lote como administrador ao clicar duas vezes no arquivo em lote, porque os comandos precisam ser executados com direitos administrativos.

Obs: Já conheço a solução de clicar com o botão direito no arquivo e clicar em Run As Administrator, mas esta não é uma solução automática.

Responder1

Sim, você pode executar um arquivo em lote com direitos administrativos. Infelizmente, você não pode fazer isso diretamente do arquivo em lote. Você precisaria primeiro criar um atalho para esse 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 é usando oEnviar paraopção 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 em lote para execução 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 para onde você o enviou) e selecione ‘Propriedades’
  2. Na guia Atalho, clique no botão Avançado....
  3. Marque a caixa de seleção Executar como administrador e pressione OK na janela modal e na janela de propriedades principal.
  4. Execute o atalho clicando duas vezes nele e o arquivo em lote deverá ser executado como administrador.

Responder2

Conforme postado emuma respostapor 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"
:--------------------------------------

Responder3

no Windows 7

  1. Crie um atalho para esse arquivo em lote

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

  3. Cliquebotão avançarpara encontrar uma caixa de seleção para executar como administrador

Verifique a captura de tela abaixo

Captura de tela

Responder4

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 forma em diferentes sistemas Windows. Ele usa vários comandos padrão e integrados do Windows. Não use nenhum outro script externo. Ele pode ser usado para chamar qualquer programa como Administrador, não apenas scripts em lote. Basta criar um pequeno script, que então chama o programa que requer permissão Administartor. Coloque-o 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. Isso é melhor feito no topo de nosso script pai e é melhor primeiro, que será chamado posteriormente por meio de CALL, alguns subscripts (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 ela ainda não possui privilégios de administrador, por exemplo. por 5 segundos antes de chamar Batch_Admin defina 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 UAC.ShellExecute por meio de VBScript para obter permissões de usuário

• O script é executado em lote, ou BAT ou CMD

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

• Devolva todos os parâmetros da chamada do script mestre passado pela linha de comando, como se não houvesse transmissão da chamada e comece 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 esse script é o mestre

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

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

• Evita mal-entendidos na escrita dos arquivos auxiliares necessários quando o script chama vários Batch_Admin quase ao mesmo tempo. Ele 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 requer sempre 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 passaram então para chamar como Administrador . Apenas o script será executado novamente.

Abaixo 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)  ***

informação relacionada