[Tutoriel] Comment ajouter la vérification des droits ADMIN dans un batch contenant le code PS1

Nos tutoriels complets pour vous aider
Verrouillé
Avatar du membre
pboulanger
Administrateur du site
Administrateur du site
Messages : 1132
Enregistré le : mar. 17 mars 2020 11:49
A remercié : 108 fois
A été remercié : 111 fois
    Windows 10 Firefox

[Tutoriel] Comment ajouter la vérification des droits ADMIN dans un batch contenant le code PS1

Message par pboulanger »

:hi:

Vous avez créé votre fichier batch qui intègre et lance un script PowerShell.

Selon les cas, il est parfois nécessaire de vérifier que le script s'exécute avec les bons privilèges.

Comment faire pour vérifier si le script s'exécute avec une élévation de privilèges.

Pour vérifier si le script s'exécute avec les droits d'administrateur (droits étendus), vous pouvez ajouter une vérification au début de votre fichier batch. Si les droits administratifs ne sont pas disponibles, le script affichera un message et demandera à être relancé avec les privilèges requis.

Voici comment vous pouvez modifier le fichier batch pour inclure cette vérification :
  • Étape 1 : Ajouter la vérification des droits d'administrateur
    Ajoutez le bloc suivant au début de votre fichier batch pour vérifier si le script est exécuté avec des privilèges administratifs.
    Si ce n'est pas le cas, il redémarrera le script avec les privilèges nécessaires.

    Code : Tout sélectionner

    @echo off
    
    :: Vérifier les droits d'administrateur
    openfiles >nul 2>&1
    if '%errorlevel%' NEQ '0' (
        echo Le script doit être exécuté en tant qu'administrateur.
        echo Tentative de relancement avec les privilèges d'administrateur...
        powershell -Command "Start-Process -Verb RunAs -FilePath '%~f0'"
        exit /b
    )
    
    :: Lancer le script PowerShell intégré
    powershell -NoProfile -ExecutionPolicy Bypass -Command ^
        "$ErrorActionPreference = 'Stop';" ^
        "param([string]$nom = 'Utilisateur');" ^
        "Write-Host ('Bonjour, ' + $nom);" ^
        "Start-Sleep -Seconds 2;" ^
        "Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 | Format-Table -AutoSize;"
    
    :: Fin du fichier batch
    pause
    
    • Explication des modifications
      • Vérification des droits d'administrateur :
        • La commande openfiles nécessite des privilèges d'administrateur. Si le script est exécuté sans privilèges administratifs, elle renverra une erreur.
          • Nous redirigeons sa sortie d'erreur vers nul avec >nul 2>&1 pour ne pas afficher de messages d'erreur inutiles.
        • Ensuite, nous vérifions la valeur de %errorlevel%.
          • Si elle n'est pas égale à 0, le script redémarre avec les droits d'administrateur en utilisant Start-Process de PowerShell avec l'option -Verb RunAs.
      • Relancer le script avec les privilèges d'administrateur :
        La commande powershell -Command "Start-Process -Verb RunAs -FilePath '%~f0'" relance le fichier batch actuel (%~f0 représente le chemin complet du fichier batch actuel) avec des droits d'administrateur.
      • Script PowerShell intégré :
        Cette partie reste inchangée et contient le code PowerShell que vous souhaitez exécuter.
  • Étape 2 : Enregistrer et tester
    • Enregistrez le fichier batch modifié.
    • Double-cliquez sur le fichier .bat pour l'exécuter.
    Si vous n'avez pas les droits administratifs, le script demandera l'autorisation de s'exécuter en tant qu'administrateur.
Version du script commentée en français

Code : Tout sélectionner

@echo off
REM Vérification des droits d'administrateur

:: Essaye d'exécuter la commande 'openfiles' qui nécessite des privilèges administratifs.
:: Si l'utilisateur n'a pas les droits d'administrateur, la commande renverra une erreur.
openfiles >nul 2>&1

:: Vérifie si la commande précédente a échoué (si l'utilisateur n'est pas administrateur).
if '%errorlevel%' NEQ '0' (
    echo Le script doit être exécuté en tant qu'administrateur.
    echo Tentative de relancement avec les privilèges d'administrateur...

    :: Utilise PowerShell pour redémarrer le script batch avec des droits administratifs.
    powershell -Command "Start-Process -Verb RunAs -FilePath '%~f0'"

    :: Quitte le script actuel puisque le nouveau processus sera lancé avec les droits nécessaires.
    exit /b
)

REM À partir de ce point, le script a les droits d'administrateur.

:: Exécution du script PowerShell intégré.
:: Vous pouvez insérer votre code PowerShell ici.
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "$ErrorActionPreference = 'Stop';" ^                               REM Arrête le script PowerShell s'il y a une erreur
    "param([string]$nom = 'Utilisateur');" ^                           REM Déclare un paramètre appelé 'nom' avec une valeur par défaut de 'Utilisateur'
    "Write-Host ('Bonjour, ' + $nom);" ^                               REM Affiche un message de bienvenue avec le nom de l'utilisateur
    "Start-Sleep -Seconds 2;" ^                                        REM Attend 2 secondes
   
REM Fin du fichier batch
pause
Avec cette approche, vous pouvez exécuter n'importe quel script PowerShell directement depuis votre fichier batch, tout en garantissant que les droits administratifs sont respectés.
 ! Message de : pboulanger
Avec ces outils, on travaille sans filet !
Pensez bien à prendre toutes les mesures de sauvegardes avant de vous lancer dans l'aventure !
Amicalement,

Pierre
Verrouillé