[PowerShell] GestionSuperAdmin_AAZ.ps1 : Contrôle du compte superadmin sous Windows 11 (activation/désactivation)

Vous trouverez ici des scripts pour faciliter la gestion de votre ordinateur. Ils sont proposés tels quels par le rédacteur du message. La team ne vérifie pas la qualité de ces éléments et n'assure pas le support ni la maintenance. Vous les utilisez sous votre seule responsabilité.
Règles du forum
Pour les créateurs de scripts

Veuillez noter que les scripts que vous partagez ici sont proposés tels quels et la team ne vérifie pas leur qualité.
Nous vous rappelons que nous n'assurons ni le support ni la maintenance des scripts publiés.

Pour faciliter leur utilisation par les autres membres de la communauté, respectez ces consignes :
.
  • Utilisez les préfixes de langage pour taguer les messages.
  • Assurez-vous que vos scripts sont clairs et bien documentés
.
Merci de votre compréhension et de votre contribution.
Répondre
Avatar du membre
pboulanger
Administrateur du site
Administrateur du site
Messages : 1131
Enregistré le : mar. 17 mars 2020 11:49
A remercié : 104 fois
A été remercié : 111 fois
    Windows 10 Firefox

[PowerShell] GestionSuperAdmin_AAZ.ps1 : Contrôle du compte superadmin sous Windows 11 (activation/désactivation)

Message par pboulanger »

Bonjour à tous

Ce script PowerShell, nommé GestionSuperAdmin_AAZ.ps1, permet de gérer le compte Administrateur intégré de Windows. Il propose des options pour l'activer ou le désactiver, ainsi que pour définir un mot de passe.
Ce script est conçu pour être interactif, sécurisé et fiable, tout en offrant une gestion détaillée et contrôlée de ce compte Administrateur sur un système Windows.

Le code commenté

Code : Tout sélectionner

<#
    Nom du script : GestionSuperAdmin_AAZ.ps1
    Créateur      : PiB pour TEAM-AAZ
    Version       : 1.0.0.1.e
    Date          : Janvier 2025
    Objet         : Ce script permet de gérer le compte Administrateur intégré de Windows en offrant
                    des options pour l'activer ou le désactiver, ainsi que pour définir un mot de passe.
#>

# Chemin du fichier log
$LogFile = "GestionSuperAdmin_AAZ.log"

# Fonction pour écrire dans le log
function Write-Log {
    param (
        [string]$Message,
        [string]$Type = "INFO"
    )
    $TimeStamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    $LogMessage = "[$TimeStamp] [$Type] $Message"
    Add-Content -Path $LogFile -Value $LogMessage
    Write-Host $LogMessage -ForegroundColor Gray
}

# Vérifier si le script est exécuté avec des privilèges administratifs
function Check-AdminPrivileges {
    Write-Log "Vérification des privilèges administratifs..."
    if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
        Write-Log "Le script n'est pas exécuté avec des privilèges administratifs." "WARNING"
        Write-Host "Attention : Ce script n'est pas exécuté avec des privilèges administratifs." -ForegroundColor Red
        $choice = Read-Host "Voulez-vous relancer ce script en mode Administrateur ? (O/N)"
        if ($choice -eq "O" -or $choice -eq "o") {
            try {
                $scriptPath = $MyInvocation.MyCommand.Definition
                Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`"" -Verb RunAs
                Write-Log "Relance en mode Administrateur demandée."
                exit
            } catch {
                Write-Log "Erreur lors de la tentative de relance : $($_.Exception.Message)" "ERROR"
                Write-Host "Impossible de relancer le script en mode Administrateur : $($_.Exception.Message)" -ForegroundColor Yellow
            }
        } else {
            Write-Log "L'utilisateur a choisi de continuer sans privilèges administratifs." "WARNING"
            Write-Host "Le script continue, mais certaines actions nécessiteront des droits administratifs." -ForegroundColor Yellow
        }
    } else {
        Write-Log "Le script est exécuté avec des privilèges administratifs."
    }
}

# Fonction pour activer le compte Administrateur intégré
function Enable-SuperAdmin {
    Write-Log "Tentative d'activation du compte Administrateur intégré..."
    Write-Host "Activation du compte Administrateur intégré..." -ForegroundColor Green
    try {
        Enable-LocalUser -Name "Administrator"
        Write-Log "Le compte Administrateur intégré a été activé avec succès."
        Write-Host "Le compte Administrateur intégré a été activé avec succès." -ForegroundColor Yellow

        # Demande de double saisie du mot de passe
        while ($true) {
            $password1 = Read-Host "Entrez un mot de passe pour le compte Administrateur" -AsSecureString
            $password2 = Read-Host "Confirmez le mot de passe pour le compte Administrateur" -AsSecureString

            if ([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password1)) -eq `
                [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password2))) {
                Write-Log "Les mots de passe correspondent."
                Write-Host "Les mots de passe correspondent. Le mot de passe sera appliqué." -ForegroundColor Green

                # Pause pour confirmer avant d'appliquer le mot de passe
                Read-Host "Appuyez sur Entrée pour appliquer le mot de passe..."
                break
            } else {
                Write-Log "Les mots de passe ne correspondent pas." "WARNING"
                Write-Host "Les mots de passe ne correspondent pas. Veuillez réessayer." -ForegroundColor Red
            }
        }

        # Appliquer le mot de passe
        Set-LocalUser -Name "Administrator" -Password $password1
        Write-Log "Mot de passe défini pour le compte Administrateur."
        Write-Host "Le mot de passe a été défini avec succès." -ForegroundColor Yellow
    } catch {
        Write-Log "Erreur lors de l'activation du compte Administrateur : $($_.Exception.Message)" "ERROR"
        Write-Host "Une erreur est survenue : $($_.Exception.Message)" -ForegroundColor Red
    }
}

# Fonction pour désactiver le compte Administrateur intégré
function Disable-SuperAdmin {
    Write-Log "Tentative de désactivation du compte Administrateur intégré..."
    Write-Host "Désactivation du compte Administrateur intégré..." -ForegroundColor Green
    try {
        Disable-LocalUser -Name "Administrator"
        Write-Log "Le compte Administrateur intégré a été désactivé avec succès."
        Write-Host "Le compte Administrateur intégré a été désactivé avec succès." -ForegroundColor Yellow
    } catch {
        Write-Log "Erreur lors de la désactivation du compte Administrateur : $($_.Exception.Message)" "ERROR"
        Write-Host "Une erreur est survenue lors de la désactivation : $($_.Exception.Message)" -ForegroundColor Red
    }
    Read-Host "Appuyez sur Entrée pour continuer..."
}

# Menu principal
function Show-Menu {
    Clear-Host
    Write-Host "======================================" -ForegroundColor Cyan
    Write-Host "Gestion du compte Super Administrateur" -ForegroundColor Cyan
    Write-Host "======================================" -ForegroundColor Cyan
    Write-Host "Nom du script : GestionSuperAdmin_AAZ" -ForegroundColor White
    Write-Host "Créateur : PiB pour TEAM-AAZ" -ForegroundColor White
    Write-Host "Version : 1.0.0.1.e" -ForegroundColor White
    Write-Host "Date : Janvier 2025" -ForegroundColor White
    Write-Host "======================================" -ForegroundColor Cyan
    Write-Host "1. Activer le compte Administrateur intégré"
    Write-Host "2. Désactiver le compte Administrateur intégré"
    Write-Host "3. Quitter"
    Write-Host ""
    $choice = Read-Host "Entrez votre choix"
    Write-Log "Choix utilisateur : $choice"
    return $choice
}

# Boucle principale
do {
    $userChoice = Show-Menu

    switch ($userChoice) {
        "1" { Enable-SuperAdmin }
        "2" { Disable-SuperAdmin }
        "3" { Write-Log "L'utilisateur a quitté le script."; Write-Host "Au revoir !" -ForegroundColor Yellow }
        default { Write-Log "Choix invalide : $userChoice" "WARNING"; Write-Host "Choix invalide, veuillez réessayer." -ForegroundColor Red }
    }

} while ($userChoice -ne "3")

# Pause pour éviter la fermeture immédiate de la fenêtre
Write-Log "Fin de l'exécution du script."
Write-Host "Le script est terminé."
Read-Host "Appuyez sur Entrée pour fermer cette fenêtre."

Ce que fait ce script
  • Vérification des privilèges administratifs :
    • Le script vérifie si l'utilisateur dispose des droits administratifs nécessaires.
      Si ce n'est pas le cas, il propose de relancer le script avec des privilèges administratifs via une élévation automatique.
  • Menu principal interactif :
    • Affiche un menu pour gérer le compte Administrateur intégré.
      Les options incluent :
      • Activer le compte Administrateur intégré.
      • Désactiver le compte Administrateur intégré.
      • Quitter le script.
  • Activation du compte Administrateur intégré :
    • Active le compte Administrateur intégré si celui-ci est désactivé.
    • Demande un mot de passe pour ce compte avec une double saisie pour validation :
      • Compare les deux saisies pour s'assurer qu'elles correspondent.
      • Affiche un message de succès si les mots de passe sont identiques.
      • Ajoute une pause pour permettre à l'utilisateur de confirmer avant de définir le mot de passe.
    • Définit le mot de passe pour le compte Administrateur.
    • Journalise toutes les étapes, y compris les erreurs éventuelles.
  • Désactivation du compte Administrateur intégré :
    • Désactive le compte Administrateur intégré.
    • Affiche un message indiquant si l'action a réussi ou échoué.
    • Ajoute une pause après l'exécution pour permettre de lire le résultat.
    • Journalise les étapes, y compris les erreurs éventuelles.
  • Journalisation complète :
    • Toutes les actions du script sont consignées dans un fichier log nommé GestionSuperAdmin_AAZ.log stocké au même endroit que le script
    • Les messages incluent :
      • Les étapes exécutées avec succès.
      • Les erreurs rencontrées.
      • Les avertissements, comme des mots de passe non identiques.
  • Gestion des erreurs :
    • Affiche les erreurs de manière explicite dans la console et les consigne dans le log.
    • Gère les cas où le script est relancé sans privilèges administratifs ou si des étapes échouent.
  • Sécurité :
    • Utilise des objets SecureString pour la gestion des mots de passe, minimisant l'exposition de données sensibles.
  • Option pour quitter proprement :
    • Permet à l'utilisateur de quitter le script via le menu principal.
    • Ajoute une pause finale pour éviter la fermeture immédiate de la fenêtre
    .
Comment s'en servir ?
  • Enregistrer le code dans un fichier txt avec l'extension .ps1 par exemple GestionSuperAdmin_AAZ.ps1
  • Clic droit sur l'icône du fichier et commande Exécuter avec PowerShell
  • Des messages de confirmation apparaissent au fur et à mesure de l'exécution du script.
En espérant que cela vous rende service,
Amicalement,

Pierre
Répondre