将多值属性导出到CSV的新行



这是一点背景。

我在活动目录中有大约900个禁用的用户帐户需要删除。他们都有附加的邮箱,为了防止这些电子邮件地址被回收和重新用于新用户,我想将每个电子邮件地址以及任何电子邮件别名添加到一个基本上不会去任何地方的分发组中。

我有一个所有900个用户的fqdn列表,我在Powershell中创建了一个脚本,它将获取我的列表,然后它将为每个"每个用户的循环。该脚本收集他们的电子邮件地址,然后将其导出到CSV文件。

最终目标是有一个很长的电子邮件地址列表,以便我可以将它们添加到通讯组。

因为emailaddresses属性有多个值,所以我发现当它将其导出到excel时,它将每个电子邮件地址导出到同一行,当前以分号分隔。

我想要实现的是,每个单独的电子邮件地址要在一个全新的出口线上列出。这可能吗?

# Get list of users that we want to delete.
$Users = Get-Content "c:tempUsersToDelete.txt"
# For each user - find their email addresses and append them to a CSV.
foreach ($User in $Users) {
Get-Mailbox -Identity "$User" | select @{Name=’emailaddresses’;Expression={$_.emailaddresses -join “;”}} | export-csv -append "c:tempCollectedEmailAddresses.csv"
}

您需要为.emailaddresses属性中的每个值创建一个内部循环:

Get-Content "c:tempUsersToDelete.txt" | ForEach-Object {
foreach($email in (Get-Mailbox -Identity $_).emailaddresses) {
[pscustomobject]@{
User  = $_
Email = $email
}
}
} | Export-Csv "c:tempCollectedEmailAddresses.csv" -NoTypeInformation

同时,你的代码将更有效地移动Export-Csv作为管道中的最后一条语句,并删除-Append,假设这是一个新文件。在每个循环迭代中附加CSV行是低效的,只会减慢脚本的速度。

最新更新