查找不属于多个组的用户

Find users who don't belong to multiple groups

我的公司使用 Microsoft Intune。我们在控制条件访问的本地 AD 中有 4 个组。我们只称它们为 AllowGroup1AllowGroup2BlockGroup1BlockGroup2。我想知道找到的是不在所有组中的所有用户。我想要查找的结果是不在上述组中的任何用户对象。这样我就可以提供证据证明我们的整个系统是合规的。请参阅下面我从 post List AD Users who do not belong to one of several groups

中借用的 Powershell 代码

我正在 运行 我的家庭域控制器上进行这些测试。我遇到的问题是脚本没有在整个域中查找用户。具体来说,我的个人 DC 中有一个 OU,名为 Home(我创建了 OU),子 OU 中有 2 个用户对象,名为 Users 这个脚本不是从中提取的。我 运行 这个脚本的用户是 Enterprise Admins 组中的一个用户,所以我知道它有足够的权限。它应该通过 PowerShell 在 AD 中搜索不在多个组中的用户,并将这些用户放在一个名为 NotInGroup

的组中

进一步说明,一些用户将在 AllowGroup1BlockGroup2 中。一些用户将在 BlockGroup1BlockGroup2 中。我想找到 不在上面列出的任何组 中的所有用户。

Import-Module ActiveDirectory
$groupname = "NotInGroup"
$members = Get-ADGroupMember -Identity $groupname

    foreach($member in $members)
    {
     Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
    }
    $users = Get-ADUser -Filter 
    {
        ((memberof -notlike "CN=AllowGroup1,OU=Intune,OU=Groups,DC=domain,DC=local") 
    -AND (memberof -notlike "CN=AllowGroup2,OU=Intune,OU=Groups,DC=domain,DC=local")
    -AND (memberof -notlike "CN=BlockGroup1,OU=Intune,OU=Groups,DC=domain,DC=local") 
    -AND (memberof -notlike "CN=BlockGroup2,OU=Intune,OU=Groups,DC=domain,DC=local"))
     } 
    -SearchBase "dc=domain,dc=local" -SearchScope Subtree
    
    foreach($user in $users)
    {
    Add-ADGroupMember -Identity $groupname -Members $user.samaccountname -ErrorAction SilentlyContinue
    }

我不认为像那​​样的复杂过滤器会起作用,我会选择使用正则表达式。

也许像

# get users not in groups 'AllowGroup1', 'AllowGroup2', 'BlockGroup1', 'BlockGroup2'
$regex = 'CN=(AllowGroup[12]|BlockGroup[12])'
$users = Get-ADUser -Filter * -Properties MemberOf | Where-Object { ($_.MemberOf -join ';') -notmatch $regex }

或者您可以尝试使用 LDAPFilter 参数:

$filter = '(!(|(memberof=CN=AllowGroup1,OU=Intune,OU=Groups,DC=domain,DC=local)
               (memberof=CN=AllowGroup2,OU=Intune,OU=Groups,DC=domain,DC=local)
               (memberof=CN=BlockGroup1,OU=Intune,OU=Groups,DC=domain,DC=local)
               (memberof=CN=BlockGroup2,OU=Intune,OU=Groups,DC=domain,DC=local)))'
$users = Get-ADUser -LDAPFilter $filter

两个参数 FilterLDAPFilter 都需要 字符串 ,而不是脚本块