Подключение и управление Exchange Online с помощью PowerShell

PowerShell это основное средство администрирования как on-premises организаций Exchange Server, так и облачного Exchange Online в Microsoft 365. В этой статье мы покажем, как установить PowerShell модуль Exchange Online PowerShell v2 (EXO V2) в Windows, как подключиться к вашем тенанту Exchange Online и управлять ящиками и другими почтовыми объектами в Micrtosoft 365.

Обратите внимание, что сейчас одновременно существуют два модуля для управления Exchange Online: Exchange Online PowerShell v1 и современный Exchange Online PowerShell v2 (EXO v2). Если нет четких оснований использовать старый модуль (legacy скрипты и т.д.), старайтесь всегда использовать EXO v2: он работает быстрее (как и новый модуль Azure AD, он основан на REST API в реализации Microsoft Graph), командлеты оптимизированы для обработки множества объектов, вместо Basic используется Modern аутентификация, поддерживается MFA аутентификация, версии ExchangeOnlineManagement 2.0.4 и выше работают в версиях PowerShell Core 6.x, 7x и macOS, Ubintu 18.04/20.04.

Установка модуля Exchange Online PowerShell V2 (EXO V2))

Для установки модуля Exchange Online PowerShell в Windows нужна версия PowerShell 5.x (PowerShell Core поддерживается, начиная с версии модуля ExchangeOnlineManagement 2.0.4).

Настройки политики запуска скриптов PowerShell на компьютере должны разрешать запуск локальных PS файлов:

Set-ExecutionPolicy RemoteSigned

Установите и обновите модуль PowershellGet:

Install-Module PowershellGet -Force

Update-Module PowershellGet

Для установки модуля EXOv2 (ExchangeOnlineManagement) из галереи скриптов PowerShell для всех пользователей компьютера, выполните:

Install-Module -Name ExchangeOnlineManagement -Force -Scope AllUsers

Теперь модуль можно импортировать в сессию:

Import-Module ExchangeOnlineManagement

Проверьте, что модуль установлен. Также отображается его версия (2.0.5 в моем случае):

Get-Module ExchangeOnlineManagement

установка модуля EXOv2 (ExchangeOnlineManagement в Windows

В скриптах можно проверять наличие модуля такой командой:

(Get-Module -ListAvailable -Name ExchangeOnlineManagement) -ne $null

Для обновления модуля EXOv2 используйте команду:

Update-Module ExchangeOnlineManagement

Подключение к Exchange Online с помощью PowerShell

Для подключения к вашему тенанту Microsoft 365 с помощью модуля Exchange Online, исопльзуется командлет Connect-ExchangeOnline. Например, можно указать UPN пользователя с правами глобального администратора тенанта:

Connect-ExchangeOnline -UserPrincipalName dm.bak@winitpro.onmicrosoft.com -ShowProgress $true

MFA аутентфикация в Exchnage через PowerShell

Укажите пароль пользователя и подтвердите вход через MFA (удобнее всего использовать приложение Microsoft Authenticator на смартфоне).

Если на компьютере не установлен браузер (например, вы подключаетесь к Exchange Online из Linux или Windows Server Core), сформировать строку и код для авторизации в PowerShell Core 7.x можно так:

Connect-ExchangeOnline -Device

Сформированный URL и код нужно использовать для аутентификации на другом компьютере с браузером.

Или используйте параметр –InlineCredential для интерактивного ввода пароля в консоли.

Если у вашего аккаунта есть доступ к нескольким тенантам Azure, можно указать имя с помощью параметра DelegatedOrganization:

Connect-ExchangeOnline -UserPrincipalName dm.bak@winitpro.onmicrosoft.com -ShowProgress $true -DelegatedOrganization winitprotest2.onmicrosoft.com

Если для аккаунта отключен Modern Authentication, можно подключится так:

$cred = Get-Credential
Connect-ExchangeOnline -Credential $cred -UserPrincipalName dm.bak@winitpro.onmicrosoft.com -ShowProgress $true

Вы можете проверить, что в системе есть активное подключение к Exchange Online так:

Get-PSSession| ft –AutoSize

В нашем примере подключение к outlook.office365.com активно (State=Opened)

проверка наличия удаленной powershell сессии к exchange online

После завершения работы с Exchange Online не забывайте корректно закрывать свою сессию с помощью командлета Disconnect-ExchangeOnline. Дело в том, что Exchange Online поддерживает максимум 5 одновременных PowerShell сессий. Если вы попробуете открыть шестую сессию, появится ошибка:

Fail to create a runspace because you have exceeded the maximum number of connections allowed.

Следующий код можно использовать в ваших PowerShell скриптах для проверки, что подключение к Exchange Online через модуль EXOv2 уже активно. Это позволит избежать создания лишних удаленных PowerShell сессий к Microsoft 365.

$psSessions = Get-PSSession | Select-Object -Property State, Name
If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
Connect-ExchangeOnline -UserPrincipalName dm.bak@winitpro.onmicrosoft.com }

В следующей статье описан способ удалённого подключения к Exchange Online без установки модуля EXOv2:

https://winitpro.ru/index.php/2021/01/18/udalennoe-podklyuchenie-k-exchange-office-365-iz-powershell/

Управление Exchange Online с помощью командлетов модуля ExchangeOnlineManagement

Список доступных командлетов в модуле EXO v2 можно вывести командой:

Get-Command -Module ExchangeOnlineManagement

На данный момент доступно 23 командлета:

  • Connect-ExchangeOnline
  • Connect-IPPSSession
  • Disconnect-ExchangeOnline
  • Get-WrappedCommand
  • IsCloudShellEnvironment
  • UpdateImplicitRemotingHandler
  • Get-EXOCasMailbox
  • Get-EXOMailbox
  • Get-EXOMailboxFolderPermission
  • Get-EXOMailboxFolderStatistics
  • Get-EXOMailboxPermission
  • Get-EXOMailboxStatistics
  • Get-EXOMobileDeviceStatistics
  • Get-EXORecipient
  • Get-EXORecipientPermission
  • Get-MyAnalyticsFeatureConfig
  • Get-OwnerlessGroupPolicy
  • Get-UserBriefingConfig
  • Get-VivaInsightsSettings
  • Set-MyAnalyticsFeatureConfig
  • Set-OwnerlessGroupPolicy
  • Set-UserBriefingConfig
  • Set-VivaInsightsSettings

командлеты в модуле ExchangeOnlineManagement

Обратите внимание, что названия некоторых команндлетов в модуле Exchange Online изменились. У большинства из них появился суффикс EXO. Например, вместо Get-Mailbox нужно использовать Get-EXOMailbox, вместо Get-MailboxPermissionGet-EXOMailboxPermission и т.д. Поэтому, если у вас остались скрипты для EXOv1, придется внимательно их переписать под EXOv2.

Можно вывести список ящиков в вашем тенанте Exchange или информацию о конкретном ящике:

Get-EXOMailbox |ft
Get-EXOMailbox kbuldogov

вывести информацию о пользователях

Вывести пользователей, у которых разрешен POP и IMAP доступ:

Get-EXOCasMailbox -PropertySets Imap,pop

Вывести размер всех ящиков:

Get-EXOMailbox | Get-EXOMailboxStatistics

Размеры всех общих ящиков:

Get-EXOMailbox | Where-Object{$_.RecipientTypeDetails -eq "SharedMailbox"} | Get-EXOMailboxStatistics

Обратите внимание, что в модуле ExchangeOnlineManagement нет, например, командлета Set-Mailbox. Дело в том, что остальные доступные командлеты Exchange Online (более 750) импортируются в вашу PowerShell сессию после подключения к тенанту. Сначала вам нужно получить имя сессии:

Get-PSSession| select ConfigurationName,CurrentModuleName

По сгенерированному имени сессии можно получить список доступных командлетов:

Get-Command -Module tmp_4mpa2wak.dga

доступные poweshell командлеты в exchange online

Т.е. чтобы изменить SMTP адрес пользователя, можно использовать команду:

Get-EXOMailbox kbuldogov | Set-Mailbox -EmailAddresses @{Add='kbuldogov2 @winitpro.ru'}


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)