Vous pouvez utiliser mon script Batch_Admin pour élever automatiquement l'administrateur afin de l'utiliser dans n'importe quel type de script propre à Batch, ou BAT ou .CMD. Cette fonction assure le travail dans un environnement standard, avec des outils standard et de la même manière dans les différents systèmes Windows. Elle utilise plusieurs commandes Windows standard et intégrées. N'utilisez pas d'autres scripts externes. Elle peut être utilisée pour appeler n'importe quel programme en tant qu'administrateur, et pas seulement les scripts BAT. Il suffit de créer un petit script, qui appelle ensuite le programme qui nécessite l'autorisation Administartor. Placez-le dans n'importe quel dossier PATH de recherche (à partir de %PATH%).
Pour l'utiliser, il suffit d'insérer la ligne suivante (exactement comme) dans son script Batch parent, qui doit être exécuté en tant qu'Administrateur. Il est préférable de le faire en haut de notre script parent et il est préférable que d'abord, qui sera appelé via le CALL plus loin, quelques sous-scripts (voir l'explication détaillée ci-dessous).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Ceci peut être inséré à l'intérieur de tout script enfant, appelé par la syntaxe CALL. Pour afficher un message alors qu'il n'a pas encore les privilèges d'administrateur, par exemple pendant 5 secondes avant d'appeler Batch_Admin, définissez la variable “ShowAdminInfo” sur le nombre de secondes
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Donc, comment cela fonctionne :
Appels UAC. ShellExecute via VBScript pour récupérer les autorisations de l'utilisateur
Exécution du script par lots, ou BAT ou CMD
L'appelant du script peut avoir un long espace nom inclus dans l'appel entre guillemets
Rendre tous les paramètres d'appel du script maître passés depuis la ligne de commande, comme s'il n'y avait pas de transmission de l'appel et commencer quelque chose à partir de zéro, également avec des caractères spéciaux, comme des points d'exclamation ( ! ) et le pourcentage (%), et aussi avec des parenthèses ()
Tient un emplacement du script maître si l'appel a eu lieu dans le répertoire où ce script est le maître
Auxiliaire affiche un message si nous mettons devant nous la variable “ShowAdminInfo”, par exemple pendant 5 secondes ce qui peut empêcher le passage immédiat des droits de l'Administrateur donnant des informations supplémentaires et la possibilité d'une décision éclairée. Exemples de paramètres qui doivent être définis : SET ShowAdminInfo=5 Par défaut, comme cette variable n'est pas définie, elle ne s'affiche pas.
Le script appelle également dans le chemin de recherche du système % PATH% et à partir de la ressource réseau, comme : \Computer\share\stest.bat
Prévient les malentendus dans l'écriture des fichiers auxiliaires nécessaires lorsque le script appelle plusieurs Batch_Admin presque en même temps. Il utilise le nombre aléatoire de 1 à 100
Mais, le mieux est de l'utiliser sur le script parent. Le passage aux droits d'Administrateur nécessite toujours que vous exécutiez le script complètement à nouveau, dans une nouvelle fenêtre, dans un nouvel environnement, sans avoir recours aux variables qui sont définies précédemment dans notre script et dont les valeurs ne sont pas passées ensuite à l'appel en tant qu'Administrateur. Seul le script sera exécuté à nouveau.
Ci-dessous un script complet Batch_Admin. Des informations plus détaillées à ce sujet se trouvent sur mon site.
Copiez le texte suivant dans le Bloc-notes et enregistrez-le sur le disque sous : 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)***