Vous pouvez utiliser mon script Batch_Admin pour élever automatiquement l'administrateur à utiliser dans n'importe quel type de script propre à Batch, BAT ou .CMD. Cette fonction garantit le travail sur un environnement standard, avec des outils standard et de la même manière sur différents systèmes Windows. Il utilise plusieurs commandes Windows standard et intégrées. N'utilisez pas d'autres scripts externes. Il peut être utilisé pour appeler n’importe quel programme en tant qu’administrateur, pas seulement les scripts Batch. Il suffit de créer un petit script, qui appelle ensuite le programme nécessitant l'autorisation Administartor. Placez ceci dans n’importe quel dossier PATH de recherche (à partir de% PATH%).
Pour l'utiliser, il vous suffit d'insérer la ligne suivante (exactement comme) dans son script Batch parent, qui doit être exécuté en tant qu'administrateur. Ceci est mieux fait en haut de notre script parent et il vaut mieux d'abord, qui sera appelé via l'appel, quelques sous-scripts (voir l'explication détaillée ci-dessous).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Cela peut être inséré dans n'importe quel script enfant, appelé par la syntaxe CALL. Pour afficher un message alors qu'il est toujours sans 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" %*
Alors comment ça marche:
• Appelle UAC.ShellExecute via VBScript pour obtenir les autorisations des utilisateurs.
• Batch exécute le script, ou BAT ou CMD
• L'appelant de script peut avoir un espace de nom long inclus dans l'appel entre guillemets
• Rendez tous les paramètres, le script maître passé depuis la ligne de commande, comme s'il n'y avait pas eu de transmission de l'appel et démarrez à partir de zéro, également avec des caractères spéciaux, comme des points d'exclamation (!) Et des pourcentages (%), ainsi que avec des parenthèses ()
• Détient un emplacement de script maître si l'appel a eu lieu dans le répertoire où ce script est le maître
• Auxiliary affiche un message si nous définissons avant nous-mêmes la variable "ShowAdminInfo", par exemple. pendant 5 secondes, ce qui peut empêcher le transfert 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 à définir: SET ShowAdminInfo = 5 Par défaut, cette variable n'étant pas définie, elle ne s'affiche pas.
• Le script appelle également dans le chemin de recherche système% PATH% et à partir d'une ressource réseau, telle que: \ Ordinateur \ partage \ test.bat
• Empêche les malentendus dans l'écriture des fichiers auxiliaires nécessaires lorsque le script appelle plusieurs Batch_Admin presque simultanément. Il utilise le nombre aléatoire de 1 à 100
• Mais le mieux est de l’utiliser sur un script parent. La transition vers les droits d’administrateur nécessite toujours de réexécuter complètement le script, dans une nouvelle fenêtre, dans un nouvel environnement, sans recourir aux variables précédemment définies dans notre script et les valeurs de ces variables ne sont pas passées à appeler en tant qu’administrateur. . Juste le script sera exécuté à nouveau.
Ci-dessous un script complet Batch_Admin. Des informations détaillées à ce sujet se trouvent sur mon site.
Copiez le texte suivant dans le Bloc-notes et enregistrez-le sur le disque en tant que: 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) ***