Active Directory – PowerShell : récupérer la liste des utilisateurs de plusieurs OU

I. Présentation

La flexibilité de PowerShell s'avère très pratique lorsqu'il s'agit d'interroger un annuaire Active Directory. Notamment si l'on souhaite récupérer la liste des utilisateurs (ou d'un autre type d'objets) au sein de plusieurs OU, sans prendre tout l'annuaire.

Grâce à un script PowerShell simple, nous allons pouvoir générer facilement cette liste d'utilisateurs sans passer par des exports multiples dans la console Active Directory, qu'il faudra ensuite fusionner... Bref, pas pratique.

II. Le script

La première étape consiste à définir un tableau qui va servir à lister les OU pour lesquelles nous souhaitons récupérer les utilisateurs. Dans la variable $OUList sera stocké le tableau. Par exemple, pour 4 OU différentes, cela donne :

$OUList = @("OU=Comptabilite,DC=it-connect,DC=local", 
            "OU=Secretariat,DC=it-connect,DC=local", 
            "OU=Direction,DC=it-connect,DC=local", 
            "OU=Commercial,DC=it-connect,DC=local")

La suite est simple : pour chaque OU du tableau, nous allons récupérer la liste des utilisateurs grâce à Get-ADUser qui sera utilisé avec le paramètre SearchBase qui aura notre OU comme valeur. Ainsi, on récupère que les utilisateurs de l'OU, et cela pour nos 4 OU. Dans cet exemple, je sélectionne uniquement le SamAccountName mais vous pouvez ajouter d'autres propriétés.

Ce qui donne le script complet suivant :

$OUList = @("OU=Comptabilite,DC=it-connect,DC=local",
            "OU=Secretariat,DC=it-connect,DC=local",
            "OU=Direction,DC=it-connect,DC=local",
            "OU=Commercial,DC=it-connect,DC=local")

$Users = Foreach($OU in $OUList){

    Get-ADUser -Filter * -SearchBase $OU | Select-Object SamAccountName

}

$Users | Export-CSV -Path "C:\Users.csv" -NoTypeInformation

La variable $Users contient tous les utilisateurs, nous pouvons facilement l'exporter vers un fichier CSV grâce au cmdlet Export-CSV comme vous pouvez le voir sur la dernière ligne du script ci-dessus.

Voilà, simple mais efficace, non ? 👀

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian B.

Consultant chez Délibérata le jour, blogueur pour IT-Connect la nuit, je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 2279 posts and counting.See all posts by florian

5 pensées sur “Active Directory – PowerShell : récupérer la liste des utilisateurs de plusieurs OU

  • Bonjour,
    merci pour le tuto, par contre si je veux récupérer le nom du compte ainsi que l’utilisateur à coté quel commande je dois rajouter ? J’ai essayé de rajouter la ligne :
    Get-ADUser -Filter * -SearchBase $OU | Select-Object distinguishedName
    en dessous de :
    Get-ADUser -Filter * -SearchBase $OU | Select-Object SamAccountName

    mais ça ne fonctionne pas.
    Merci de m’aider 🙂

    Répondre
    • Bonjour Guillaume,

      Il vaut mieux utiliser directement cette syntaxe :

      Get-ADUser -Filter * -SearchBase $OU | Select-Object SamAccountName, distinguishedName

      Fait un essai et redis-moi 🙂
      Florian

      Répondre
  • Bonjour Florian,

    Comme Guillaume, je cherche à avoir un peu plus d’informations sur l’utilisateur, comme son nom, son mail, et sa date de dernière connexion.

    Sais tu ou je peux trouver le nom des champs que je dois ajouter derrière le Select-Object.

    Merci pour ton aide,

    Répondre
  • Bon, ben je viens de trouver la solution à mon problème.

    Voici les champs accessibles :

    AccountExpirationDate :
    accountExpires :
    AccountLockoutTime :
    AccountNotDelegated :
    AllowReversiblePasswordEncryption :
    AuthenticationPolicy : {}
    AuthenticationPolicySilo : {}
    BadLogonCount : 0
    badPwdCount : 0
    CannotChangePassword :
    CanonicalName :
    Certificates : {}
    City :
    CN :
    co :
    codePage :
    Company :
    CompoundIdentitySupported : {}
    Country :
    countryCode :
    Created :
    createTimeStamp :
    Deleted :
    Department :
    Description :
    DisplayName :
    DistinguishedName :
    Division :
    DoesNotRequirePreAuth :
    dSCorePropagationData : {}
    EmailAddress :
    EmployeeID :
    EmployeeNumber :
    Enabled :
    extensionAttribute10 :
    extensionAttribute12 :
    extensionAttribute13 :
    extensionAttribute14 :
    extensionAttribute15 :
    Fax :
    GivenName :
    HomeDirectory :
    HomedirRequired :
    HomeDrive :
    HomePage :
    HomePhone :
    Initials :
    instanceType :
    isDeleted :
    KerberosEncryptionType : {}
    l :
    LastBadPasswordAttempt :
    LastKnownParent :
    LastLogonDate :
    lastLogonTimestamp :
    LockedOut :
    lockoutTime :
    LogonWorkstations :
    mail :
    mailNickname :
    Manager :
    MemberOf : {}
    MNSLogonAccount :
    MobilePhone :
    Modified :
    modifyTimeStamp :
    mS-DS-ConsistencyGuid :
    msDS-User-Account-Control-Computed :
    Name :
    nTSecurityDescriptor :
    ObjectCategory :
    ObjectClass :
    ObjectGUID :
    objectSid :
    Office :
    OfficePhone :
    Organization :
    OtherName :
    PasswordExpired :
    PasswordLastSet :
    PasswordNeverExpires :
    PasswordNotRequired :
    personalTitle :
    physicalDeliveryOfficeName :
    POBox :
    PostalCode :
    PrimaryGroup :
    primaryGroupID :
    PrincipalsAllowedToDelegateToAccount : {}
    ProfilePath :
    ProtectedFromAccidentalDeletion :
    proxyAddresses : {}
    pwdLastSet :
    SamAccountName :
    sAMAccountType :
    ScriptPath :
    sDRightsEffective :
    ServicePrincipalNames : {}
    SID :
    SIDHistory :
    SmartcardLogonRequired :
    sn :
    State :
    StreetAddress :
    Surname :
    targetAddress :
    Title :
    TrustedForDelegation :
    TrustedToAuthForDelegation :
    UseDESKeyOnly :
    userAccountControl :
    userCertificate :
    UserPrincipalName :
    uSNChanged :
    uSNCreated :
    whenChanged :
    whenCreated :

    Si cela peut servir à quelqu’un …

    Répondre
    • Bonjour William,

      Oui effectivement il s’agit de la liste des attributs. Pour les utiliser dans le script, il faut ajouter l’option « -Properties » et indiquer derrière les noms des attributs à « charger » car par défaut il y en a seulement quelques-uns d’affiché.

      Bonne journée
      Florian

      Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.