La propriété MemberOf
contient une liste de noms distinctifs. Vous ne pouvez pas vérifier s'il ne contient pas quelque chose avec l'opérateur -notmatch
. Au lieu d'obtenir une liste des noms distinctifs de vos groupes:
$groups = 'Group1', 'Group2', 'Group3' |
ForEach-Object { Get-ADGroup -Filter "Name -eq '$_'" } |
Select-Object -Expand DistinguishedName
et vérifier si la propriété MemberOf
ne contient aucun d'entre eux:
Get-ADComputer -Filter * -Property * | Where-Object {
-not (Compare-Object $groups $_.MemberOf -IncludeEqual -ExcludeDifferent)
} | Format-Table Name
Le Compare-Object
est nécessaire, parce que vous devez vérifier si un tableau contient l'un des éléments d'un autre tableau. Quelque chose comme $_.MemberOf | Where-Object {$groups -contains $_}
fonctionnerait également.
Notez que la propriété MemberOf
ne pas inclure le groupe principal d'un ordinateur. Si le groupe primaire doit aussi ne pas être l'un des groupes de votre liste, vous avez besoin d'un contrôle supplémentaire dans le filtre Where-Object
:
Get-ADComputer -Filter * -Property * | Where-Object {
-not (Compare-Object $groups $_.MemberOf -IncludeEqual -ExcludeDifferent) -and
$groups -notcontains $_.PrimaryGroup
} | Format-Table Name
Je dois dire que c'est une meilleure réponse. J'utiliserais celui-ci, OP. – FoxDeploy
Merci Ansgar, cela fonctionne parfaitement! – zimmerkm