Comment puis-je auto-elever mon fichier batch pour qu'il demande les droits administrateur UAC si necessaire ?

Comment puis-je auto-elever mon fichier batch pour qu’il demande les droits administrateur UAC si necessaire ?


Source : Stack Overflow [windows]

Il existe un moyen simple sans avoir besoin d’utiliser un outil externe - cela fonctionne parfaitement avec Windows 7, 8, 8.1, 10 et 11 et est egalement retrocompatible (Windows XP n’a pas d’UAC, donc l’elevation n’est pas necessaire).

Consultez ce code (je me suis inspire du code de NIronwolf publie dans le fil Batch File - “Access Denied” On Windows 7? 1), mais je l’ai ameliore - dans ma version, aucun repertoire n’est cree ni supprime pour verifier les privileges administrateur) :

@echo off
REM :::::::::::::::::::::::::::::::::::::::::
REM Elevate.cmd - Version 9
REM Automatically check & get admin rights
REM see "https://stackoverflow.com/a/12264592/1016343" for description
REM :::::::::::::::::::::::::::::::::::::::::

 CLS
 ECHO/
 ECHO =============================
 ECHO Running Admin shell
 ECHO =============================

:init
 setlocal EnableExtensions DisableDelayedExpansion
 set cmdInvoke=1
 set winSysFolder=System32
 set "batchPath=%~f0"
 rem this works also from cmd shell, other than %~0
 for %%k in (%0) do set batchName=%%~nk
 set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
 setlocal EnableDelayedExpansion

:checkPrivileges
  %SystemRoot%\System32\whoami.exe /groups /nh | %SystemRoot%\System32\find.exe "S-1-16-12288" 1>nul
  if errorlevel 1 goto getPrivileges

:checkPrivileges2
  %SystemRoot%\System32\net.exe session 1>nul 2>NUL
  if not errorlevel 1 goto gotPrivileges

:getPrivileges
  if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
  ECHO/
  ECHO **************************************
  ECHO Invoking UAC for Privilege Escalation
  ECHO **************************************

  ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
  ECHO args = "ELEV " >> "%vbsGetPrivileges%"
  ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
  ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"
  ECHO Next >> "%vbsGetPrivileges%"

  if '%cmdInvoke%'=='1' goto InvokeCmd

  ECHO UAC.ShellExecute "!batchPath!", ar

*(Reponse tronquee)*