Атрибуты Get-Distribution Group в PowerShell и Печать в файл - PullRequest
0 голосов
/ 22 января 2020

Итак, я создал с помощью замечательных людей, плавающих вокруг Stack, сценарий, который опрашивает AD для групп рассылки и создает CSV, заполненный

  • Отображаемое имя
  • Имя учетной записи SAM
  • Основной SMTP-адрес группы
  • SMTP-адрес для принятых отправителей,
  • SMTP-адрес модерируемой
  • SMTP-адрес Управляется

Первые три легко получить, поскольку они являются стандартными атрибутами для группы рассылки. Проблема возникает, когда я пытаюсь преобразовать отображаемые имена в членстве в группе в первичные SMTP-адреса для Принятых отправителей, Умеренный и Управляемый. Текущий скрипт работает для получения SMTP-адресов, однако отображаемое имя, которое мы используем для фильтрации, также иногда используется для вторичных и третичных учетных записей, поэтому иногда мы возвращаем несколько результатов для каждого отображаемого имени. Мне нужно отфильтровать эти вторичные и третичные учетные записи электронной почты из списка. К счастью, у нас есть вторичное поле, extensionAttribute, которое всегда заполняется 1, если это основная учетная запись пользователя. Поэтому я попытался изменить -Filter с помощью -and "extensionAttribute8 -eq '1'", и он взорвался. Я также попытался добавить дополнительное поле -Properties, которое ссылается на атрибут extension, но также ничего не сделало.

Просто происходит сбой с

ActiveDirectlyCmdlet.Microsoft.ActiveDirectly.Management.AdfilterParsingException, Microsoft.adtiveDirectory.Management.Commands.GetADUser

Ниже приведен сценарий, который я ' Мы пытались собрать вместе, надеюсь, один из вас, гуру PowerShell, может помочь мне здесь.

Заранее благодарим за помощь!

Райан

$props = @(
    "DisplayName"
    "SamAccountName"
    "PrimarySmtpAddress"
    @{n='Accepted Senders';e= {($_.acceptmessagesonlyfromsendersormembers | Foreach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split('/')[-1])'" -And "extensionAttribute8 -eq '1'" -Properties ('extensionattribute8', 'ProxyAddresses') |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}}
    "ModerationEnabled"
    @{N="ModeratedBy";E= {($_.ModeratedBy | ForEach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split('/')[-1])'" -And "extensionAttribute8 -eq '1'" -Properties ('extensionattribute8', 'ProxyAddresses') |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}}
    @{Name="Internal Senders Only";E={$_.RequireSenderAuthenticationEnabled}}
    @{N="ManagedBy";E= {($_.ManagedBy | ForEach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split('/')[-1])'" -And "extensionAttribute8 -eq '1'" -Properties ('extensionattribute8', 'ProxyAddresses') |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}}
        )
Get-DistributionGroup -ResultSize Unlimited | Select-Object $props | export-Csv C:\temp\testforformat.csv -NoTypeInformation

Для справки ниже приведен скрипт, который я пытаюсь изменить.

$props = @(
    "DisplayName"
    "SamAccountName"
    "PrimarySmtpAddress"
    @{n='Accepted Senders';e= {($_.acceptmessagesonlyfromsendersormembers | Foreach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split('/')[-1])'" -Property ProxyAddresses |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:*.*@*.com'}) -replace '^SMTP:*.*@*.com'}) -join ';'}}
    "ModerationEnabled"
    @{N="ModeratedBy";E= {($_.ModeratedBy | ForEach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split("/")[-1])'" -Property ProxyAddresses |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}}
    @{Name="Internal Senders Only";E={$_.RequireSenderAuthenticationEnabled}}
    @{N="ManagedBy";E= {($_.ManagedBy | ForEach-Object {
    (Get-AdUser -Filter "DisplayName -eq '$($_.Split("/")[-1])'" -Property ProxyAddresses |
        Select-Object -Expand ProxyAddresses | Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'}) -join ';'}}
        )
Get-DistributionGroup -ResultSize Unlimited | Select-Object $props | export-Csv C:\temp\testforformat.csv -NoTypeInformation
``


1 Ответ

1 голос
/ 23 января 2020

Мне кажется, что вы повторяете тот же код Get-ADUser, что делает его очень трудным для чтения / изменения.
Я бы предложил вам создать небольшую вспомогательную функцию для получения основного адреса электронной почты SMTP. Примерно так:

function Get-SMTPAddress ([string]$DisplayName) {
    $filter = "DisplayName -eq '$DisplayName' -and extensionAttribute8 -eq '1'"
    ((Get-AdUser -Filter $filter -Properties DisplayName, ProxyAddresses, extensionAttribute8).ProxyAddresses |
      Where-Object {$_ -cmatch '^SMTP:'}) -replace '^SMTP:'
}

С этим построение массива свойств может стать намного понятнее:

$props = 'DisplayName',
         'SamAccountName',
         'PrimarySmtpAddress',
         @{Name = 'Accepted Senders'
           Expression = {($_.acceptmessagesonlyfromsendersormembers | Foreach-Object { Get-SMTPAddress $_.Split('/')[-1] }) -join ';'}},
         'ModerationEnabled',
         @{Name = 'ModeratedBy'
           Expression = {($_.ModeratedBy | Foreach-Object { Get-SMTPAddress $_.Split('/')[-1] }) -join ';'}},
         @{Name = 'Internal Senders Only'; Expression = {$_.RequireSenderAuthenticationEnabled}},
         @{Name = 'ManagedBy'
           Expression = {($_.ManagedBy | Foreach-Object { Get-SMTPAddress $_.Split('/')[-1] }) -join ';'}}

Очевидно, что не проверено, тогда это должно дать вам вывод:

Get-DistributionGroup -ResultSize Unlimited | 
    Select-Object $props | 
    Export-Csv C:\temp\testforformat.csv -NoTypeInformation
...