需要分发列表中接受的发件人、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 ';'}
}
所以我正在使用 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 ';'}
}