Powershell 通讯组列表中接受的发件人、ManagedBy和ModeratedBy需要SMTP地址

Powershell 通讯组列表中接受的发件人、ManagedBy和ModeratedBy需要SMTP地址,powershell,exchange-server,displayname-attribute,Powershell,Exchange Server,Displayname Attribute,因此,我正在PowerShell中工作,以便从exchange服务器中提取一些数据 我希望从通讯组列表中获取以下字段 显示名称、SAM帐户名称、主SMTP地址、接受的发件人、启用审核、审核人、仅内部发件人和管理人 我正在使用下面的脚本来执行此操作 $props = @( "DisplayName" "SamAccountName" "PrimarySmtpAddress" @{Name="Accepted Senders";Expression= {(([stri

因此,我正在PowerShell中工作,以便从exchange服务器中提取一些数据

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

显示名称、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和mediatedby,而不是smtp地址

为了让它更有趣,首先是电子邮件smtp格式。last@company.com虽然显示名称是最后一个,但通常是第一个,并带有其他单词,如inactive和mixed in

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

不管怎样,如果你能帮忙,请告诉我


Ryan

如果您想与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 ';'}
}
我不知道您的代码$\u0.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 ';'}
}

非常感谢!这真的很有帮助。我能够使用同样的逻辑让其他字段也工作。