所有Active Directory用户的输出列表以及每个用户所属的所有组

时间:2015-09-17 02:38:28

标签: powershell active-directory ldap windows-server-2012-r2

我正在尝试查询Active Directory以获取所有用户以及每个用户所属的所有组的列表。我只需要每个用户所属的直接组,而不是嵌套组。最终目标是将此列表输出到CSV文件。我试图在Windows Server 2012 R2中使用PowerShell执行此操作。

更新

所以我现在设法输出所有用户名称的列表,但是输出中只包含一些用户的组,使用以下命令:

Get-ADuser -LDAPFilter "(objectClass=user)" -property "memberOf" | 
select -Property @{n='name';e={$_.name}},@{n='groups';e
{$($_.MemberOf | Get-adgroup | % {$_.name}) -join ','}}

我无法确定为什么只有一些的用户输出(可能只有5-10个)包含用户所属的组,而其余的(95%)用户输出仅显示用户的名称,完全没有任何组。

来自这里的任何想法?

2 个答案:

答案 0 :(得分:1)

首先,我担心Get-ADuser -Filter {group -eq 'Domain Users'}什么都不给。

您可以尝试开始:

Get-ADuser -LDAPFilter "(objectClass=user)" -property "memberof" | select -Property @{n='name';e={$_.SamAccountName}},@{n='groups';e={$_.MemberOf -join ','}}

然后你可以修改过滤器以获取InetOrgPerson。

Get-ADuser -LDAPFilter "(|(objectClass=user)(objectClass=inetOrgPerson))" -property "memberof" | select -Property @{n='name';e={$_.SamAccountName}},@{n='groups';e={$_.MemberOf -join ','}}

然后你可以获取组DN的samAccountName

Get-ADuser -LDAPFilter "(|(objectClass=user)(objectClass=inetOrgPerson))" -property "memberof" | select -Property @{n='name';e={$_.SamAccountName}},@{n='groups';e={$($_.MemberOf | Get-adgroup | % {$_.SamAccountname}) -join ','}}

答案 1 :(得分:0)

对这篇文章的延迟回复,但我构建了一个脚本,输出特定OU中的所有组以及每个组的所有用户。唯一的缺点是每个组的“所有者”也是一个成员,所以有一些冗余,但没有什么打破我的目的。输出格式化为两列。

$mGroups=@(
Get-ADGroup -filter * -SearchBase "OU=,OU=,OU=,DC=,DC=" | select name);


$col = @()
for ($i=0
 $i -lt $mGroups.Count;
 $i++)
 {
      $agents=@(
      Get-ADGroupMember $mGroups[$i].name | select sAMAccountName)

        for ($n=0
             $n -lt $agents.Count;
             $n++)
             {
              $agentList = [PSCustomObject]@{
              Group = $mGroups[$i].name 
              Agents = $agents[$n].sAMAccountName
             }
            $col+=$agentList;
             }
   }          
$col
$col | Export-CSV -NoTypeInformation C:\Path\to\file.type