MemberOf
Свойства содержит список выдающихся имен. Вы не можете проверить, не содержит ли он что-либо с оператором -notmatch
. Вместо того, чтобы получить список отличительных имен ваших групп:
$groups = 'Group1', 'Group2', 'Group3' |
ForEach-Object { Get-ADGroup -Filter "Name -eq '$_'" } |
Select-Object -Expand DistinguishedName
и проверить, если MemberOf
свойство не содержит какой-либо из них:
Get-ADComputer -Filter * -Property * | Where-Object {
-not (Compare-Object $groups $_.MemberOf -IncludeEqual -ExcludeDifferent)
} | Format-Table Name
Compare-Object
требуется, потому что вам нужно проверить если один массив содержит любой из элементов другого массива. Что-то вроде $_.MemberOf | Where-Object {$groups -contains $_}
также будет работать.
Отметьте, что MemberOf
property не включает основную группу компьютеров. Если основная группа также не должна быть одна из групп из вашего списка требуется дополнительная проверка в Where-Object
фильтра:
Get-ADComputer -Filter * -Property * | Where-Object {
-not (Compare-Object $groups $_.MemberOf -IncludeEqual -ExcludeDifferent) -and
$groups -notcontains $_.PrimaryGroup
} | Format-Table Name
Должен сказать, это лучший ответ. Я бы использовал этот, ОП. – FoxDeploy
Спасибо Ansgar, это прекрасно работает! – zimmerkm