我有一些代码可以从AD中的OU中提取用户帐户。我正在使用Group-Object
对其进行排序,因此我知道有多少用户使用相同的电子邮件地址。
在下面的代码中,$OuUser
使用Get-ADUser
,其中属性和过滤器设置为*
。
$Duplicates = $OUUser | Select samaccountname, mail,UserPrincipalName |
Group-Object Mail
然后我有一个ForEach
循环来完成$Duplicates
,然后放入
数据输入另一个变量用于输出。
我想在这里实现的是将信息输出到CSV,因此我可以使用Excel进行报告。我希望组数据中只包含一封电子邮件,而不是其中包含{}@=
个字符的表达式数据。
$NewData = New-Object PSObject
ForEach ($x in $Duplicates) {
IF ($x.Count -gt 1 ) {
$NewData | Add-Member -NotePropertyName Name($x.Name) -Force | Format-Table -AutoSize -Wrap
$NewData | Add-Member -NotePropertyName Count($x.Count) -Force | Format-Table -AutoSize -Wrap
$NewData | Add-Member -NotePropertyName Group($x.Group) -Force | Format-Table -AutoSize -Wrap
$NewData
#$Duplicates | Select Count, Name, Group
}
}
答案 0 :(得分:1)
你的第二段代码伤害了我的大脑,但我认为你想要的是输出多个帐户使用相同的电子邮件地址,按电子邮件地址分组。所以,让我们从重复开始。你的第一段代码有点功能,但它确实收集了比你想要的更多的方式。您应该做的是在分配Where
时通过$Duplicates
语句管道该命令,以便它实际上只包含重复项。这应该适合你:
$Duplicates = $OUUser | Select samaccountname, mail,UserPrincipalName |
Group-Object Mail | Where{$_.Count -gt 1}
所以,现在你只有一组分组对象中的重复项。您想要什么取决于您希望如何布置CSV。让我们以简单的方式执行此操作,每个电子邮件地址只有1行,其中包含电子邮件地址,使用它的帐户数以及以分号分隔的帐户名。
$Duplicates | Select Name,Count,@{l='Accounts';e={($_.Group|Select -Expand samaccountname) -join ';'}} | ExportTo-CSV C:\Path\To\Duplicates.csv -NoTypeInfo
这将选择组的Name
(它们都按电子邮件地址分组,这是名称),该组中的Count
个帐户,然后添加计算属性每个组的Group
属性并从中扩展samaccountname
属性,然后用分号连接这些帐户名。你的输出看起来像这样:
“名称”, “计数”, “帐户”
“jim.smith@company.com”,“2”,“Jim Smith; Jims服务帐户”
“arcgroup@company.com”,“3”,“行动反应创建DL; arcsrvcacct; arcReadOnly”