3
votes

Résultats étranges avec Get-ADUser -Filter {displayname -like $ displayname}

Je souhaite voir si un nom d'affichage est partagé par plusieurs comptes.

J'utilise le code (Get-ADUser -Filter {displayname -like $ name}). Count .

Cela produit parfois le résultat correct et parfois aucun résultat. Tous les comptes sont correctement configurés sans espaces à la fin de leurs noms.


5 commentaires

Comment ça marche en utilisant -match plutôt que -like?


@ I.TDelinquent pas, Filter est traduit en un filtre LDAP en interne, et les filtres de requête LDAP ne prennent pas en charge l'expression régulière


Quelle est la valeur de $ name ?


$ name est le nom complet des utilisateurs, c'est-à-dire "John Smith"


Ensuite, vous ne trouverez que des correspondances exactes. Vous devez ajouter des caractères génériques * au début et / ou à la fin de la chaîne pour les correspondances partielles.


3 Réponses :


1
votes

Vous pouvez utiliser le code suivant:

Get-ADUser -Filter {displayname -like $name} | measure | select -ExpandProperty Count

En effet, lorsqu'un seul utilisateur est renvoyé, il n'est pas traité comme une collection mais comme un objet utilisateur unique.
Utilisation de la mesure ( Measure-Object ) vous permet de contourner cela.
Si aucun utilisateur n'est renvoyé, vous obtiendrez 0 , si un seul est renvoyé, vous obtiendrez 1 et si plusieurs utilisateurs sont renvoyés, vous obtiendrez le nombre réel d'utilisateurs. p>


0 commentaires

0
votes

Le problème est que lorsqu'il n'y a qu'un seul résultat, un seul objet est renvoyé, pas une collection. Étant donné que l'objet ne contient pas de propriété .Count , votre instruction ne retournera rien.

Vous pouvez forcer la sortie dans une collection en utilisant le littéral de tableau ( @ () code >)

(@(Get-ADUser -Filter {displayname -like $name})).Count

Ce qui précède renverra toujours le décompte de la collection, même s'il y a un ou zéro résultat.


0 commentaires

0
votes

Ansgar,

Est-ce que cela ferait ce que vous voulez?

$Filter = "displayname -like $name"
(Get-ADUser -Filter $Filter).Count

Il semble que je me souvienne que les applets de commande n'aiment pas les variables dans la syntaxe du filtre. p >


0 commentaires