如何获取所选AD组的列表,即大量用户是哪些成员?

时间:2017-02-11 12:35:52

标签: powershell active-directory export-to-csv

我有以下工作脚本,用于检查CSV文件中的大量用户是否是AD组的成员,并将结果写入results.csv。

不确定如何转换脚本,以便将$group = "InfraLite"更改为$group = DC .\List_Of_AD_Groups.CSV

因此,脚本不仅返回一个AD组的匹配项,而且还返回List_of_AD_groups.csv中包含的80个AD组的匹配项。在CSV的新列中为每个AD组写入“是/否”(或者,如果不可能为每个组创建单独的.csv文件,则也会这样做。

我可以通过更改$group的值并导出文件名来手动执行此操作,并重新运行脚本80次,但必须快速使用PS才能执行此操作?

e.g。 results.csv

NAME   AD_GROUP1 AD_GROUP2 AD_GROUP80 etc etc.
user1     yes        no         yes
user2     no         no         yes
user3     no         yes        no
echo "UserName`InfraLite" >> results.csv

$users = GC .\user_list.csv
$group = "InfraLite"

$members = Get-ADGroupMember -Identity $group -Recursive |
           Select -ExpandProperty SAMAccountName

foreach ($user in $users) {
    if ($members -contains $user) {
        echo "$user $group`tYes" >> results.csv
    } else {
        echo "$user`tNo" >> results.csv
    }
}

2 个答案:

答案 0 :(得分:0)

解决问题的简单方法是将现有代码包装在另一个循环中,并为每个组创建一个输出文件:

$groups = Get-Content 'C:\groups.txt'

foreach ($group in $groups) {
    $members = Get-ADGroupMember ...
    ...
}

更优雅的方法是创建组映射模板,为每个用户克隆它,并使用用户的组成员身份填充副本。这样的事情应该有效:

$template = @{}
Get-Content 'C:\groups.txt' | ForEach-Object {
  $template[$_] = $false
}

$groups = @{}
Get-ADGroup -Filter * | ForEach-Object {
  $groups[$_.DistinguishedName] = $_.Name
}

Get-ADUser -Filter * -Properties MemberOf | ForEach-Object {
  $groupmap = $template.Clone()
  $_.MemberOf |
    ForEach-Object { $groups[$_] } |
    Where-Object { $groupmap.ContainsKey($_) } |
    ForEach-Object { $groupmap[$_] = $true }
  New-Object -Type PSObject -Property $groupmap
} | Export-Csv 'C:\user_group_mapping.csv' -NoType

答案 1 :(得分:0)

我玩了一段时间,我觉得我找到了一种方法可以让你得到你想要的东西。

我认为Ansgar是在正确的道路上,但我无法完全按照你的想法去做。他提到在撰写本文时他没有访问AD环境。

以下是我提出的建议:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slide">slide</div>
<div id="slide1">slide1</div>
<div id="slide2">slide2</div>
<div id="slide3">slide3</div>
<div id="slide4">slide4</div>

希望一切都有道理。我尽可能地评论了它。如果你在运行它的任何机器上没有安装RSAT,那么转换为使用ADSI会非常简单。如果您需要,请告诉我,我会做一些快速修改。

我还在Gist中略微修改了此版本以供日后参考。