我需要创建一个CSV,其中包含Active Directory用户拥有的所有可能的电子邮件地址。 CSV必须采用以下格式(非常严格的API,用于将其导入的位置):
Username | EmailAddress1 | EmailAddress2 | EmailAddressN
到目前为止,我的脚本看起来像这样:
$Group = "GroupNAme
$usersObj = @()
$countMax = 0
$GetAdGroup = Get-AdGroup -Identity $Group -Properties *
[array]$members = $GetAdGroup.Members
ForEach ($member in $members) {
$currentUser = get-aduser -Identity $member `
-Properties EmailAddress, ProxyAddresses |
Where {$_.Enabled -eq "True"}
$countTemp = ($currentUser.ProxyAddresses).count
if ($countTemp -gt $countMax){ $countMax = $countTemp}
foreach ($mailAdd in $currentUser.ProxyAddresses) {
$usersOBJ += [pscustomobject]@{
'Username' = $currentUser.SamAccountName;`
'ProxyAddresses' = $mailAdd.SubString(5)
}
}
$usersOBJ | Export-CSV -NoTypeInformation C:\Export.csv
现在我的现有对象按如下方式吐出用户:
UserName | Emailaddress1
Username | Emailaddress2
Username | EmailsaddressN
我似乎无法实现如何创造更好的对象。我可以获得发生的最大ProxyAddresses数,但我不确定如何构建我的对象,然后将$ currentUser.ProxyAddresses的值填充到这些列中。
我已经阅读过哈希表,但它们似乎不符合我的要求,通常采用以下形式:
Username1 | Username2
Emailaddress1 | Emailaddress1
Emailaddress2 | Emailaddress2
任何人都可以指出我正确的方向吗?
干杯!
答案 0 :(得分:1)
您只需要将您添加的值分开即可。在循环之前将用户名添加到单个对象,然后根据需要添加其他属性。最后,将对象添加到要导出的数组中。
试试这个:
...
$x = New-Object System.Object
$x | Add-Member –type NoteProperty –Name UserName –Value $currentUser.SamAccountName
$i=0
foreach ($mailAdd in $currentUser.ProxyAddresses) {
$i++
$x | Add-Member –type NoteProperty –Name "Emailaddress$i" –Value $mailAdd.SubString(5)
}
$usersOBJ += $x
假设您在导出csv之前将所有用户添加到$ usersOBJ,这些列应该适用于任意数量的代理地址。