Aller au contenu

Extraction des groupes dont fait partie un utilisateur

Ce script permet d'exporter vers un fichier texte situé dans le même répertoire que ce script la liste des groupes dont fait partie un utilisateur.

Si plusieurs utilisateurs correspondent au filtre fourni, le script proposera la liste de ces utilisateurs.

Il est possible de fournir le nom de l'utilisateur au lancement du script, en argument.

Exemple : .\Export_1_user_groupsv5.ps1 admi

# Importer le module Active Directory
Import-Module ActiveDirectory

# Obtenir le répertoire du script en cours
$scriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition

# Vérifiez si un nom d'utilisateur a été fourni en argument
if ($args.Count -gt 0) {
    $nomUtilisateur = $args[0]
} else {
    # Demandez le nom de l'utilisateur s'il n'est pas fourni en argument
    $nomUtilisateur = Read-Host "Entrez le nom de l'utilisateur "
}

# Recherche des utilisateurs correspondant au nom fourni
$utilisateursCorrespondants = Get-ADUser -Filter "SamAccountName -like '*$nomUtilisateur*'"

if ($utilisateursCorrespondants.Count -eq 0) {
    Write-Host "Aucun utilisateur correspondant à '$nomUtilisateur' n'a été trouvé dans Active Directory."
} else {
    if ($utilisateursCorrespondants.Count -eq 1) {
        $user = $utilisateursCorrespondants[0]
    } else {
        # S'il y a plusieurs utilisateurs correspondants, affichez un menu de sélection
        Write-Host "Utilisateurs correspondants trouvés :"
        for ($i = 0; $i -lt $utilisateursCorrespondants.Count; $i++) {
            Write-Host "$i. $($utilisateursCorrespondants[$i].SamAccountName)"
        }

        do {
            [int]$choix = Read-Host "Sélectionnez un utilisateur (entrez le numéro)"
        } while ($choix -lt 0 -or $choix -ge $utilisateursCorrespondants.Count)

        $user = $utilisateursCorrespondants[$choix]
    }

    # Récupérez la liste des groupes auxquels l'utilisateur appartient
    $groupes = Get-AdPrincipalGroupMembership $user | Select-Object Name, GroupCategory

    # Construisez le nom du fichier de sortie en incluant le nom de l'utilisateur
    $nomFichierSortie = "ListeGroupes_$($user.SamAccountName).txt"
    $cheminFichierSortie = Join-Path -Path $scriptDirectory -ChildPath $nomFichierSortie

    # Créez deux tableaux pour stocker les noms des groupes de sécurité et des listes de distribution
    $groupesSecurite = @()
    $listesDistribution = @()

    foreach ($groupe in $groupes) {
        if ($groupe.GroupCategory -eq "Security") {
            $groupesSecurite += $groupe.Name
        } elseif ($groupe.GroupCategory -eq "Distribution") {
            $listesDistribution += $groupe.Name
        }
    }

    # Exportez les listes de groupes dans le fichier texte en distinguant les types
    "Liste des groupes pour l'utilisateur : $($user.SamAccountName)`r`n`r`n" | Out-File -FilePath $cheminFichierSortie
    if ($groupesSecurite) {
        "Groupes de Sécurité :`r`n" | Out-File -FilePath $cheminFichierSortie -Append
        $groupesSecurite | ForEach-Object { $_ } | Out-File -FilePath $cheminFichierSortie -Append
    }
    if ($listesDistribution) {
        "`r`nListes de Distribution :`r`n" | Out-File -FilePath $cheminFichierSortie -Append
        $listesDistribution | ForEach-Object { $_ } | Out-File -FilePath $cheminFichierSortie -Append
    }

    Write-Host "La liste des groupes auxquels $($user.SamAccountName) appartient a été exportée vers $cheminFichierSortie."
}