问题描述
我正在编写一个脚本来检查来自特定 OU 的用户是否不是组 1、组 2、组 3 或组 4 的成员。
我已经尝试过这个,但有些用户在他们不应该被列出的情况下被列出。
get-aduser -filter * -searchbase "$Ou" | where-object {((get-aduser $_.samaccountname -properties memberof).memberof -ne "$grp1") -or ((get-aduser $_.samaccountname -properties memberof).memberof -ne "grp2") -or ((get-aduser $_.samaccountname -properties memberof).memberof -ne "grp3") -or ((get-aduser $_.samaccountname -properties memberof).memberof -ne "grp4")} | Select SamAccountName
解决方法
不确定我是否遵循,但听起来您要求的是这样的:
$ou = 'OU=crowleytest,DC=contoso,DC=local'
$group1 = 'CN=group1,OU=crowleytest,DC=local'
$group2 = 'CN=group2,DC=local'
$group3 = 'CN=group3,DC=local'
$group4 = 'CN=group4,DC=local'
$users = Get-ADUser -SearchBase $ou -Filter * -Properties memberof
$results = $users | where {
$_.memberof -notcontains $group1 -and
$_.memberof -notcontains $group2 -and
$_.memberof -notcontains $group3 -and
$_.memberof -notcontains $group4
}
$results
e - 此过滤器也可以将 moved to the left 放入 -filter 参数中以获得更好的性能,但这需要不同的语法。如果您的用户列表不是很大,那么上面的示例就足够了。