我的脚本在这里:
$Results = @()
Get-Mailbox | % {
$o = New-Object -Type PSCustomObject -Property @{
'DisplayName' = $_.DisplayName
'alias' = $_.alias
'UserPrincipalName' = $_.UserPrincipalName
'PrimarySmtpAddress' = $_.PrimarySmtpAddress
'PrimaryProxyAddress' = ($_.EmailAddresses) -cmatch "SMTP:" -replace '^smtp:' -join ' '
}
$i = 1
$_.EmailAddresses -cmatch "smtp:" | % {
$o | Add-Member -Type NoteProperty -Name "OtherProxyAddress$i" `
-Value ($_ -replace '^smtp:')
$i++
}
$Results += $o
}
$results| ConvertTo-Csv -Delimiter "`t" -NoTypeInformation | clip
问题是当我转换为CSV时。转换为CSV时,第一个邮箱需要有多少OtherProxyAddress
。如果第一个邮箱中有两个OtherProxyAddress
,它将使用此选项并继续创建CSV文件的标题。但是,某些邮箱可能包含2个OtherProxyAddress
个字段。在这种情况下,当我在Excel中打开CSV时,我会错过具有两个以上OtherProxyAddress
字段的邮箱的其他条目。
我希望能够以CSV格式捕获,因此我可以在Excel中粘贴足够的标题,使邮箱与OtherProxyAddress
个字段最匹配。
答案 0 :(得分:1)
不是我最好的工作,但它似乎完成了工作。我想我可能已经改变了你想要的属性,但我需要重新安排一些东西以获得动态的部分工作。
$all = Get-Mailbox
$maxProxyIndex = $all | Select EmailAddresses | Where-Object{$_.EmailAddresses -cmatch "smtp"} | ForEach-Object{
($_.EmailAddresses -split "," | Where-Object{$_ -cmatch "smtp"} | Measure-Object).Count
} | Measure-Object -Maximum | Select -ExpandProperty Maximum
$propertyOrder = "DisplayName","Alias","UserPrincipalName","PrimarySmtpAddress" + (1..$maxProxyIndex | ForEach-Object{"ProxyAddress$_"})
$all | ForEach-Object{
$props = @{
'DisplayName' = $_.DisplayName
'alias' = $_.alias
'UserPrincipalName' = $_.UserPrincipalName
'PrimarySmtpAddress' = $_.PrimarySmtpAddress
}
$proxyAddresses = @(($_.EmailAddresses -split ","| Where-Object{$_ -cmatch "smtp"})) -replace "^smtp:"
For($proxyIndex = 1; $proxyIndex -le $maxProxyIndex;$proxyIndex++){
$props."ProxyAddress$proxyIndex" = If($proxyAddresses){$proxyAddresses[$proxyIndex - 1]}
}
New-Object -TypeName PSCustomObject -Property $props
} | Select-Object $propertyOrder | ConvertTo-Csv -Delimiter "`t" -NoTypeInformation | Clip
首先,就像你说的那样,我们需要找出代理地址数最多的邮箱,这是$maxProxyIndex
。我们收集所有邮箱数据,因为我们需要解析它两次。一次为最大索引,第二次为整体输出。
对于$maxProxyIndex
,我们会获取每个邮箱的emailaddresses
并过滤次要的smtp电子邮件。然后我们使用Measure-Object -Maximum
来获取神奇数字。
当我们在主循环中创建对象输出时,我们需要始终创建其他代理属性,即使它们不存在。
您将看到我们正在使用$propertyOrder
,这很重要,因为动态创建属性不会在输出中提供正确的顺序。
这些都不是必需的,因为您可以利用Excel功能来实现类似的目标。根据他的评论:
附录:将数据粘贴到Excel中时,可以使用
Text to Columns
拆分带有分隔值的列。您只需确保在数据栏右侧有足够的空白列(因此您不会覆盖其他值)