0

所以我正在使用 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 和 mix in。

我已经能够为 managedby 和接受的发件人格式化数据,以便只要只有一个名称并且显示名称中没有其他单词,名称就会显示为第一个最后一个,但我无法得到它插入一个句点,以便我可以将输出通过管道传输到 SMTP 的 get-aduser 请求。

无论如何,让我知道您是否可以提供帮助。

瑞安

4

1 回答 1

1

如果您想与 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 ';'}
}
于 2020-01-13T17:16:08.340 回答