需要分发列表中接受的发件人、ManagedBy 和 ModeratedBy 的 SMTP 地址

Need SMTP Address for Accepted Senders, ManagedBy and ModeratedBy in Distribution List

所以我正在使用 PowerShell 从我的交换服务器中提取一些数据。

我希望从通讯组列表中获取以下字段。

显示名称、SAM 帐户名称、主 SMTP 地址、已接受的发件人、已启用审核、审核人、仅限内部发件人和管理人。

我正在使用以下脚本来执行此操作。

$props = @(
    "DisplayName"
    "SamAccountName"
    "PrimarySmtpAddress"
    @{Name="Accepted Senders";Expression= {(([string]($_.AcceptMessagesOnlyFromSendersOrMembers | foreach {$_.tostring().split("/")[-1]+';'})).TrimEnd(";") | foreach {$_.split(", ")[2,3,0]})}}
    "ModerationEnabled"
    @{Name="ModeratedBy";Expression= {([string]($_.ModeratedBy | foreach {$_.tostring().split("/")[-1]+';'})).TrimEnd(";")}}
    @{Name="Internal Senders Only";E={$_.RequireSenderAuthenticationEnabled}}
    @{Name="ManagedBy";E= {(([string]($_.ManagedBy | foreach {$_.tostring().split("/")[-1]+';'})).TrimEnd(";").split(", ")[2,3,0])}}
)

Get-DistributionGroup -ResultSize Unlimited | select $props | export-Csv x:\xxxxx\test6.csv -NoTypeInformation

这基本上是完美的,除了它列出了接受的发件人、ManagedBy 和 ModeratedBy 的显示名称,而不是 smtp 地址。

为了让它更有趣,电子邮件 smtp 格式是 first.last@company.com 而显示名称是 Last, First 通常带有附加词,例如 inactive 和 mixed in。

我已经能够为 managedby 和 accepted Senders 设置数据格式,以便只要只有一个名称并且显示名称中没有其他单词,名称就会显示为倒数第一,但我可以' 让它插入一个句点,以便我可以将输出通过管道传输到 SMTP 的 get-aduser 请求。

无论如何,如果你能帮上忙,请告诉我。

瑞安

如果你想与 AD 互动,你可以用你计算的 属性 执行以下操作:

@{
    n='Accepted Senders'
    e={($_.acceptmessagesonlyfromsendersormembers | Foreach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$_'" -Property ProxyAddresses |
        Select -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}
}

我不知道您的代码 $_.tostring().split("/")[-1] 是否给您带来了问题。但是,如果您需要该功能,可以更改为以下内容:

@{
    n='Accepted Senders'
    e={($_.acceptmessagesonlyfromsendersormembers | Foreach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split('/')[-1])'" -Property ProxyAddresses |
        Select -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}
}