Требуется SMTP-адрес для принятых отправителей, ManagedBy и ModeratedBy в списке рассылки

Итак, я работаю в 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 имеет формат [email protected], а отображаемые имена - Last, First, часто с дополнительными словами, такими как неактивный и смешанный.

Мне удалось отформатировать данные для управляемых и принятых отправителей так, чтобы имена отображались как первые последние, пока есть только одно имя и у него нет дополнительных слов в отображаемом имени, но я не могу его передать вставьте точку, чтобы я мог передать вывод в запрос get-aduser для SMTP.

В любом случае, дайте мне знать, если сможете помочь.

Райан


person Ryan    schedule 13.01.2020    source источник


Ответы (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 ';'}
}
person AdminOfThings    schedule 13.01.2020
comment
Благодаря тонну! Это действительно помогло. Я смог использовать ту же логику, чтобы заставить работать и другие поля. - person Ryan; 13.01.2020