L’un des problèmes les plus courants lors de l’interrogation d’Active Directory avec PowerShell est de savoir comment construire correctement la syntaxe du filtre. Les paramètres Filter
et Filtre LDAP sur toutes les cmdlets du module PowerShell ActiveDirectory sont une boîte noire pour beaucoup.
Dans ce billet de blog, nous allons plonger profondément dans la compréhension de l’utilisation des filtres Active Directory. J’espère qu’à la fin de ce post, vous ne serez plus tenté d’utiliser ce Where-Object
et filtrer correctement!
Prérequis
Pour que tout le code que je m’apprête à vous montrer fonctionne, je vais supposer quelques choses :
- vous avez le module PowerShell ActiveDirectory installé
- vous êtes sur un ordinateur joint à un domaine
- vous pouvez vous connecter et authentifier à un contrôleur de domaine AD
Il existe deux langages de filtre différents que vous pouvez utiliser lors de la recherche d’objets en utilisant de nombreuses cmdlets Active Directory : les filtres PowerShell et les filtres LDAP.
Filtres PowerShell
Les filtres PowerShell utilisent la syntaxe d’expression standard de PowerShell. Cela est couramment appelé syntaxe de filtre de recherche Active Directory.
Ces filtres sont utilisés avec le paramètre Filter
. La syntaxe du paramètre Filter
Opérateurs
Pendant la construction d’un filtre pour le paramètre Filter
, vous devrez utiliser au moins un opérateur. Les opérateurs utilisés ici sont les opérateurs familiers que vous pourriez avoir l’habitude d’utiliser avec des commandes telles que Where-Object
.
À l’intérieur du paramètre Filter
, vous pouvez utiliser les opérateurs suivants.
Operator | Explanation |
---|---|
-eq | Equal to |
-le | Less than or equal to |
-ge | Greater than or equal to |
-ne | Not equal to |
-lt | Less than |
-gt | Greater than |
-approx | Approximately equal to |
-bor | Bitwise OR |
-band | Bitwise AND |
-recursivematch | Recursive match |
-like | Like |
-notlike | Not like |
-and | Boolean AND |
-or | Boolean OR |
-not | Boolean NOT |
Référence aux propriétés des objets AD
À l’intérieur du filtre, vous comparerez diverses propriétés d’objets AD à l’aide d’opérateurs. Par exemple, la cmdlet Get-AdUser
retourne une propriété Name
. Si vous souhaitez trouver tous les utilisateurs correspondant à un nom spécifique, vous utiliseriez:
Les noms de propriétés peuvent être le nom ou le nom du filtre LDAP de la propriété retournée avec la cmdlet AD.
Les valeurs des propriétés sont normalement encapsulées entre guillemets simples ou doubles. Le seul joker accepté est l’astérisque (*). Vous pouvez voir ci-dessus que le filtre est entouré de guillemets doubles tandis que Adam Bertram est entouré de guillemets simples.
Certains caractères doivent être ‘échappés’ lorsqu’ils sont utilisés dans les filtres. Ceux-ci sont:
Character | Escaped As | Notes |
---|---|---|
“ | `” | Only required if the data is enclosed in double quotes. |
‘ | \’ | Only required if the data is enclosed in single quotes. |
NUL | \00 | This is a standard LDAP escape sequence. |
\ | \5c | This is a standard LDAP escape sequence. |
* | \2a | Automatically escaped. Only in -eq and -ne comparisons. You should use -like and -notlike operators for wildcard comparison. |
( | /28 | Automatically escaped. |
) | /29 | Automatically escaped. |
/ | /2f | Automatically escaped. |
Qu’est-ce que le LDAP Active Directory?
LDAP, ou Lightweight Directory Access Protocol, est un protocole neutre vis-à-vis des fournisseurs pour accéder et modifier des données d’annuaire. Vous pouvez penser à un annuaire téléphonique en entendant le mot annuaire, mais dans le contexte de Active Directory, cela signifie bien plus. De nombreux types d’objets différents sont stockés et rendus accessibles par Active Directory avec le protocole LDAP fonctionnant comme un moyen d’accéder à ces données.
Comme Active Directory peut stocker de nombreux types de données différents, les applications et les utilisateurs ont besoin d’un moyen de interroger facilement cet annuaire. Continuez à lire pour apprendre comment les filtres LDAP aident à filtrer ces données!
Filtres LDAP
Active Directory implémente LDAP, le Lightweight Directory Access Protocol. L’utilisation du paramètre LDAPFilter
avec les cmdlets vous permet d’utiliser des filtres LDAP, tels que ceux créés dans Utilisateurs et ordinateurs Active Directory.
La syntaxe des filtres LDAP est définie dans le numéro RFC 4515.
Chaque règle de filtre est entourée de parenthèses ( )
. Les règles de filtre peuvent être regroupées en entourant le groupe de parenthèses et en incluant un comparateur parmi les suivants:
Operator | Function |
---|---|
& | and |
| | or |
! | not |
Les filtres LDAP ont également une règle de correspondance spéciale Identifiants d’Objets (OID) :
OID | Purpose |
---|---|
1.2.840.113556.1.4.803 | Bitwise AND |
1.2.840.113556.1.4.804 | Bitwise OR |
1.2.840.113556.1.4.1941 | Chain matching (for distinguished name attributes) |
Il existe quatre types de filtres :
Operator | Explanation |
---|---|
= | Equal to |
~= | Approximately equal to |
>= | Greater than or equal to |
<= | Less than or equal to |
Il existe quatre types d’éléments :
Type | Explanation |
---|---|
= | Simple |
=* | Present |
=something* | Substring |
Extensible | varies depending on type |
Les règles de filtre LDAP doivent être utilisées avec les noms LDAP des attributs, et certaines valeurs de caractères doivent être « échappées » si elles sont utilisées dans un filtre LDAP. Ceux-ci sont :
assistant:
Character | Escaped As |
---|---|
* | \2a |
( | \28 |
) | \29 |
\ | \5c |
NUL | \00 |
Les valeurs des propriétés à comparer n’ont généralement pas besoin d’être placées entre guillemets.
Exemples de filtres LDAP
Construire des filtres LDAP peut être difficile. Voici quelques exemples utilisant des filtres de groupe d’annuaire actif que vous pouvez utiliser comme base pour commencer à créer les vôtres.
- Tous les groupes avec un nom (cn) de « Service professionnel »
'cn -eq "Service professionnel"'
ou `'(cn=Service professionnel)'
- Tous les groupes avec un nom de « Service professionnel » et une description de « En direct »
'(cn -eq "Service professionnel") -et (description -eq "En direct")'
ou'(&(cn=Service professionnel)(description=En direct))'
- Tous les groupes avec un nom soit « Service professionnel » soit « Accès partagé à tous les départements »
'(cn -eq "Service professionnel") -ou (cn -eq "Accès partagé à tous les départements")'
ou'(|(cn=Service professionnel)(cn=Accès partagé à tous les départements))'
- Tous les groupes n’ayant pas de description de « En direct ». Comprend ceux qui n’ont pas du tout de champ de description
'(!(description=En direct))'
- Tous les groupes n’ayant pas de description de « En direct ». Exclut ceux qui n’ont pas du tout de champ de description
'description -ne "En direct"'
- Tous les groupes ayant une description de « En direct » mais pas avec un nom de « Service professionnel »
'(description -eq "En direct") -and (cn -ne "Service professionnel")'
ou'(&(description=En direct)(!(cn=Service professionnel)))'
- Tous les groupes dont la description est « \\fileserver1\fileshare »
'description -eq "\5c\5cfileserver1\5cfileshare"'
ou'(description=\5c\5cfileserver1\5cfileshare)'
Utilisation de RecursiveMatch ou Chain Matching
Utiliser un OID de règle de correspondance, ou le paramètre RecursiveMatch
est un moyen puissant de résoudre une question souvent posée sur la requête AD: ‘Comment puis-je dire à quels groupes un utilisateur appartient, à la fois directement et indirectement?’ Vous utilisez la propriété de recherche Active Directory memberOf
pour le découvrir.
En utilisant une règle de correspondance LDAP simple peut être beaucoup plus efficace qu’un script volumineux. En utilisant notre exemple de domaine domain.local, Kristin Diaz est directement membre du groupe de sécurité du Service Professionnel. En examinant sa propriété memberOf
dans AD, seul Service Professionnel est affiché.
En utilisant l’OID de la règle de correspondance, ou le paramètre RecursiveMatch
, vous constaterez qu’ils sont indirectement membres de Tous les Départements Partagent l’Accès. Cela est dû au fait que le groupe Service Professionnel est membre de Tous les Départements Partagent l’Accès.
Les deux renvoient ce qui suit:
Les paramètres SearchBase et SearchScope
Dans de grands environnements, AD peut contenir des milliers d’objets. Une façon d’améliorer les performances et de réduire le nombre d’objets renvoyés pour une requête quelconque est de délimiter la recherche.
Le paramètre SearchBase
détermine où dans la hiérarchie AD commence la recherche. Lors de l’utilisation des cmdlets, il s’agit d’une représentation sous forme de chaîne d’un nom distingué (et par défaut, c’est le ‘top’ du domaine). Il existe également trois niveaux de SearchScope
:
- Base – L’objet spécifié comme SearchBase.
- OneLevel – Recherche des objets immédiatement contenus par SearchBase mais pas dans les sous-conteneurs.
- SubTree – Recherche des objets contenus par SearchBase et dans tous les sous-conteneurs, de manière récursive dans la hiérarchie AD.

Dans l’exemple ci-dessus, avec le SearchBase défini sur OU=Tous les comptes d’utilisateurs,DC=domaine,DC=local, un SearchScope
de Base
tenterait d’interroger l’objet OU lui-même, un SearchScope
de OneLevel
rechercherait uniquement la OU Tous les comptes d’utilisateurs, et un SearchScope
de SubTree
rechercherait à la fois les OUs Tous les comptes d’utilisateurs et Services professionnels.
Résumé
Vous devriez maintenant avoir une bonne compréhension de comment filtrer avec les cmdlets PowerShell Active Directory. Vous pouvez voir qu’il y a beaucoup à élaborer pour obtenir cette syntaxe de filtre parfaite. Il est beaucoup plus difficile de construire le filtre approprié que d’utiliser le cmdlet Where-Object
.
Mais prenez le temps d’apprendre la manière « correcte » de filtrer les objets AD et récoltez les récompenses d’une grande performance et efficacité !
Lecture complémentaire