的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
屬性確實不包括計算機的主要組。如果主組也不能是從列表中的羣體之一,你需要在Where-Object
過濾器的額外檢查:
Get-ADComputer -Filter * -Property * | Where-Object {
-not (Compare-Object $groups $_.MemberOf -IncludeEqual -ExcludeDifferent) -and
$groups -notcontains $_.PrimaryGroup
} | Format-Table Name
我必須說,這是一個更好的答案。我會用這個,OP。 – FoxDeploy
謝謝Ansgar,這個作品完美! – zimmerkm