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.
3 Réponses :
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>
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.
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 >
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èreQuelle 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.