如何在 ActiveDirectory 中获取没有子组的用户?

How to get users without subgroups in ActiveDirectory?

我有一个 PowerShell 脚本,可以将来自特定组的所有用户作为列表(用户、用户、用户 - 其中“,”是我的列表分隔符)然后我将它们添加到 *.xlsx 文件中(拆分后) ).我想要的是检查实际组成员是用户还是子组。

实际上,我检查了每个组成员是否在我的列表中,但这个解决方案不够好。

当我收到每个组的成员列表时,有什么方法可以检查它吗?

编辑

获取特定组中所有成员的脚本:

Import-Module ActiveDirectory

$groups = Get-ADGroupMember "CN=${GroupName},OU=Members,OU=FolderMain,OU=Start,DC=local"

foreach($element in $groups)
{
 $element.name -creplace " - [0-9]{6}",""
";"
}

这段代码给我一个群组成员列表,例如:

USERNAME, USERSURNAME ; USERNAME, USERSURNAME ; ... ; USERNAME, USERSURNAME

但是有些组包含其他组。我想要的是检查成员是组还是用户;当组 - 它不应该显示在我的列表中。

Import-Module ActiveDirectory

$groups = Get-ADGroupMember "CN=${GroupName},OU=Members,OU=FolderMain,OU=Start,DC=local"

foreach($element in $groups)
{
if (!$element.Members)
{
Write-Host "Group $element.Name have no members;"
}
 $element.name -creplace " - [0-9]{6}",""
";"
}

直接通过 Where-Object:

Get-ADGroupMember [...] | Where-Object { $_.objectClass -eq 'user' }

请注意,您可能需要考虑启用 -Recursive 开关 Get-ADGroupMember,这将使用户进入目标组中的组。

另请注意,Get-ADGroupMember 为计算机对象提供了 'Computer'objectClass。这与严格的 LDAP 不同,后者的 objectClass'user'。您不必担心在此处指定 objectCategory(据我所知不能)。