我正在尝试查询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%)用户输出仅显示用户的名称,完全没有任何组。
来自这里的任何想法?
答案 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