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

时间:2015-03-11 13:36:44

标签: powershell active-directory

我有一个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; ......;用户名,   USERSURNAME

但有些团体还包含其他团体。我想要的是检查该成员是组还是用户;当小组 - 它不应该出现在我的名单上。

2 个答案:

答案 0 :(得分:2)

直接通过Where-Object

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

请注意,您可能需要考虑-Recursive Get-ADGroupMember上的Get-ADGroupMember开关,这将启用目标群组内的用户。

另请注意,objectClass为计算机对象提供了'Computer' objectClass。这与严格的LDAP不同,后者的'user'objectCategory。你不必担心在这里指定{{1}}(据我所知,不能这样做。)

答案 1 :(得分:0)

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}",""
";"
}