U kunt mijn script Batch_Admin gebruiken om de Administrator automatisch te verheffen voor gebruik in elk type Batch eigen script, of BAT of .CMD. Deze functie verzekert het werk op een standaard omgeving, met standaard tools en op dezelfde manier in verschillende Windows systemen. Het maakt gebruik van verschillende standaard en ingebouwde Windows commando’s. Gebruik geen andere externe scripts. Het kan gebruikt worden om elk programma als Administrator aan te roepen, niet alleen scripts Batch. Het volstaat om een klein script te maken, dat vervolgens het programma aanroept dat de toestemming van Administartor vereist. Plaats dit in een willekeurige zoekmap PATH (vanaf %PATH%).
Om het te gebruiken, voegt u eenvoudigweg de volgende regel in (precies zoals) in het moederscript Batch, dat als Administrator moet worden uitgevoerd. Dit kan het beste gedaan worden bovenaan ons ouderscript en het is het beste dat eerst, die via de CALL verder wordt aangeroepen, enkele subscripts (zie gedetailleerde uitleg hieronder).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Dit kan ingevoegd worden in elk kinderscript, aangeroepen door de CALL-syntaxis. Om een bericht weer te geven terwijl het nog steeds geen beheerdersrechten heeft, b.v. voor 5 seconden voor het aanroepen van Batch_Admin stel de variabele “ShowAdminInfo” in op het aantal seconden
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Dus hoe het werkt:
- Roept UAC op. ShellExecute via VBScript om gebruikersrechten
op te halen - Batch draait het script, of BAT of CMD
Script caller kan een lange naamruimte hebben in de oproep tussen aanhalingstekens
Geef alle parameters terug die het masterscript aanroepen vanaf de commandoregel, alsof er geen transmissie van de oproep is en start iets vanaf nul, ook met speciale karakters, zoals uitroeptekens (! ) en percentage (%), en ook met haakjes ()
Houdt een locatie van het masterscript vast als de oproep plaatsvond in de directory waar dit script de master
is - Auxiliary geeft een bericht weer als we voor onszelf de variabele “ShowAdminInfo” instellen, b.v. voor 5 seconden, wat kan voorkomen dat de rechten van de Administrator onmiddellijk worden doorgegeven en dat er aanvullende informatie wordt gegeven en de mogelijkheid van een geïnformeerde beslissing wordt geboden. Voorbeelden van instellingen die moeten worden ingesteld: SET ShowAdminInfo=5 Standaard, omdat deze variabele niet gedefinieerd is, wordt deze niet weergegeven.
Het script roept ook in het systeemzoekpad % PATH% en van de netwerkbron aan, bijvoorbeeld: \Computer sharetest.bat
Voorkomt dat er misverstanden ontstaan bij het schrijven van de benodigde hulpbestanden als het script meerdere Batchmin aanroept. Het gebruikt het willekeurige nummer van 1 tot 100
Maar het beste is om het te gebruiken op het script van de ouders. De overgang naar Administrator rechten vereist altijd dat je het script volledig opnieuw uitvoert, in een nieuw venster, in een nieuwe omgeving, zonder gebruik te maken van de variabelen die eerder in ons script zijn ingesteld en de waarden van deze variabelen gingen toen niet over om als Administrator aan te roepen. Alleen het script wordt weer uitgevoerd.
Hieronder een compleet script Batch_Admin. Uitgebreide informatie hierover staat op mijn site.
Kopieer de volgende tekst in Kladblok en sla het op als: 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)***