Powershell - 如果不是多个组的成员,则将 OU 中的用户广告到安全组

问题描述

我正在编写一个脚本来检查来自特定 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 参数中以获得更好的性能,但这需要不同的语法。如果您的用户列表不是很大,那么上面的示例就足够了。