Экспорт адреса электронной почты для всех папок publi c - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть большая группа общих папок c. В каждой папке может быть от 3 до 20 адресов электронной почты, которые будут перенаправлены в эту папку c.

Я попытался написать сценарий ExchangeManagementShell для извлечения адресов электронной почты в CSV файл Команда для их извлечения делает то, что я хочу, чтобы она делала в окне powershell, но когда она входит в CSV, она просто показывает строку текста, которая ничего не значит.

Get-MailPublicFolder |Select Displayname, Emailaddresses | export-csv -Path $env:userprofile\Desktop\mail-enabled-public-folders.csv

все, что я получаю

 "27c87ef9bbda4f709f6b4002fa4af63c",,,,,

, повторяется 49 раз.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 04 февраля 2020

Я обнаружил, что это зависит от того, где вы запускаете скрипт. При запуске с локального сервера Exchange свойство Emailaddresses имеет значение Microsoft.Exchange.Data.SmtpProxyAddressCollection, а при удаленном запуске вы получите System.Collections.ArrayList.

Попробуйте следующий код:

    $result = Get-MailPublicFolder -ResultSize Unlimited -ErrorAction SilentlyContinue | 
        ForEach-Object {
            $primary = $_.PrimarySmtpAddress
            if ($_.EmailAddresses -is [System.Collections.ArrayList]) {
                # using a remote connection, this is a System.Collections.ArrayList
                # containing address strings with 'smtp:' of 'SMTP:' prefix
                $aliases = ($_.EmailAddresses | Where-Object { $_ -cmatch '^smtp:' }) | 
                           ForEach-Object { $_ -replace '^smtp:'}
            }
            else {
                # when run on an on-premise Exchange server, this is a 
                # Microsoft.Exchange.Data.SmtpProxyAddressCollection
                # where every object has these properties:
                    #   SmtpAddress        : address@company.com
                    #   AddressString      : address@company.com
                    #   ProxyAddressString : smtp:address@company.com
                    #   Prefix             : SMTP
                    #   IsPrimaryAddress   : False
                    #   PrefixString       : smtp
                $aliases = $_.EmailAddresses | 
                           Where-Object { !$_.IsPrimaryAddress -and $_.PrefixString -eq 'smtp' } | 
                           Select-Object -ExpandProperty AddressString
            }

            # output an object to be collected in variable $result
            [PsCustomObject]@{            
                DisplayName           = $_.DisplayName
                'PrimaryEmailAddress' = $primary
                'EmailAlias'          = $aliases -join '; '
            }
        }

# output on screen
$result | Format-Table -AutoSize  # or use Format-List if you like that output better

# output to CSV file
$fileOut = Join-Path -Path $env:USERPROFILE -ChildPath 'Desktop\mail-enabled-public-folders.csv'
$result | Export-Csv -Path $fileOut -Encoding UTF8 -NoTypeInformation -Force
...