我有以下工作脚本,用于检查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
}
}
答案 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中略微修改了此版本以供日后参考。