2014-07-28 03:24:17 +0000 2014-07-28 03:24:17 +0000
50
50

É possível correr automaticamente um ficheiro batch como administrador

Estou a pensar se é possível automaticamente abrir um ficheiro batch como administrador quando se faz duplo clique no ficheiro batch, porque os comandos precisam de ser executados com direitos administrativos.

Nota: Já sei da solução de clicar com o botão direito do rato no ficheiro e clicar no Run As Administrator, mas esta não é uma solução automática.

Respostas (9)

45
45
45
2014-07-28 03:43:30 +0000

Sim, é possível gerir um ficheiro de lotes com direitos administrativos. Infelizmente, não o pode fazer directamente a partir do ficheiro de lote que ele próprio possui. Terá primeiro de criar um atalho desse ficheiro de lote e alterar as propriedades desse atalho para que este funcione.

Para criar um atalho, existem muitas formas mas a 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 pode enviar o atalho para onde quiser. Para elevar o ficheiro do lote para correr como administrador, siga os passos abaixo:

  1. Clique com o botão direito do rato no atalho que acabou de criar (deve estar no ambiente de trabalho ou para onde quer que o envie)
  2. Sob o separador Atalho, clique no botão Avançado…
  3. Marque a caixa de verificação Executar como administrador e prima OK tanto na janela modal como na janela de propriedades principais.
  4. Execute o atalho clicando duas vezes nele e o ficheiro de lote deverá ser executado como administrador.
33
33
33
2014-12-15 16:55:24 +0000

Como publicado em uma resposta por Ben Gripka a 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"
:--------------------------------------
5
5
5
2015-02-10 14:25:39 +0000

no Windows 7

  1. Criar um atalho para esse ficheiro Batch

  2. Clique com o botão direito do rato no ficheiro de atalho

  3. Clique Botão de avanço para encontrar uma caixa de verificação para correr como administrador

Cheque a imagem de ecrã abaixo

4
4
4
2014-10-07 18:42:22 +0000

A resposta aceite funciona, de facto. Mas descobri que, no Windows 7, tinha de suportar o diálogo UAC cada vez que se clica no atalho. Este IMHO diminui significativamente o “automaticamente” nesta pergunta!

Então descobri que na minha própria situação, o ficheiro .bat em questão deve ser executado pelo Task Scheduler. Neste caso, verificando a opção Run with highest privileges no separador General da tarefa, resolve bem o problema. O .bat é então executado como administrador sem qualquer problema.

PS: Não me apercebi que não conseguia carregar imagens nesta resposta, porque tenho uma pequena imagem de ecrã comigo agora mesmo! Ou será que posso?

3
3
3
2015-05-31 14:49:17 +0000

Pode utilizar o meu script Batch_Admin para elevar automaticamente o Administrador para utilização em qualquer tipo de script próprio Batch, ou BAT ou .CMD. Esta função assegura o trabalho num ambiente standard, com ferramentas standard e da mesma forma em diferentes sistemas Windows. Utiliza vários comandos padrão e embutidos no Windows. Não utilize nenhum outro script externo. Pode ser usado para chamar qualquer programa como Administrador, e não apenas scripts Batch. Basta criar um pequeno script, que depois chama o programa que requer permissão Administartor. Coloque isto em qualquer pasta PATH de pesquisa (de %PATH%).

Para o utilizar, basta inserir a seguinte linha (exactamente como) no seu Batch script 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 (ver explicação detalhada abaixo).

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

Isto pode ser inserido dentro de qualquer script filho, chamado pela sintaxe CALL. Para mostrar uma mensagem enquanto ainda não tem privilégios de Administrador, por exemplo, durante 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 a UAC. ShellExecute através de VBScript para captar as permissões de utilizador

  • Batch executa o script, ou BAT ou CMD

  • Script chamador pode ter um longo espaço de nome incluído na chamada entre aspas

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

  • Guarda uma localização do script mestre se a chamada ocorreu no directório onde este script é o mestre

  • Auxiliar exibe uma mensagem se colocarmos à nossa frente a variável “ShowAdminInfo”, por exemplo, durante 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 definição que devem ser definidos: SET ShowAdminInfo=5 Por defeito, porque esta variável não está definida, não é exibida.

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

  • Evita mal-entendidos na escrita dos ficheiros 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 os direitos de Administrador requer sempre que se execute o script completamente novamente, numa nova janela, num novo ambiente, sem recorrer às variáveis previamente definidas no nosso script e os valores destas variáveis não passaram então para chamar como Administrador. Apenas o script será executado novamente.

Abaixo um script completo Batch_Admin. Informação detalhada sobre isto está no meu site.

Copie o seguinte texto para o Bloco de Notas e guarde-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)***
1
1
1
2015-11-26 03:54:44 +0000
@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

Isto também funcionaSOURCE: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file *

1
1
1
2014-07-28 14:33:06 +0000

Em alternativa, poderá criar um segundo ficheiro de lote, o que lhe permitirá executar qualquer coisa como administrador, introduzindo apenas uma vez a palavra-passe de administrador. A palavra-passe é guardada num código de autenticação, e requer algum conhecimento real do computador.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
0
0
0
2015-11-25 07:07:27 +0000

É um exemplo para gerir o taco como administrador. 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
0
0
0
2015-11-11 09:50:46 +0000

Pode utilizar um utilitário de linha de comando elevate . (link para download - https://drive.google.com/open?id=0Bz7qe_olclTwVGZLUklFMHNxQ00 )

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