我需要检测不属于至少一个组的计算机对象。我已经提出了这个脚本,但它不是仅列出不是至少一个组成员的机器,而是返回所有工作站。我做错了什么?
2016-01-06 16:06:52,778 [1]DEBUG ...blah blah blah
答案 0 :(得分:1)
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
答案 1 :(得分:0)
您正在使用Should().Equal()
运算符,如果条目不完全匹配,则运算符将评估为true。使用-NotMatch
可以更好地为您提供服务,就像这样
-NotContain