Удаленное подключение к серверу Exchange/Office 365 с помощью PowerShell

В этой статье мы рассмотрим, как удаленно подключится к on-premises серверу Exchange или Office 365 (Exchange Online) из консоли PowerShell.

Удаленное подключение к Exchange из консоли PowerShell (без установки Exchange Management Tools)

Для управления on-premises Exchange (версии Exchange Server 2010, 2013, 2016 и 2019) используются командлеты из модуля Exchange Management Shell (устанавливается как часть Exchange management tools). Если у вас на компьютере не установлен модуль Exchange Management Shell, вы можете удаленно подключиться к серверу Exchange и импортировать командлеты с сервера в свою сессию локальную сессию PowerShell.

В Exchange Server удаленные подключения выполняются через отдельный виртуальный каталог IIS (Internet Information Services), который называется PowerShell . Для аутентфикации по-умолчанию используется Kerberos, а взаимодействие происходит через WinRM.

Совет . Обратите внимание, что некоторые командлеты EMS не поддерживаются полноценно через удаленную сессию PowerShell. Например, Get-ExchangeCertificate . Для его использования вам придется установить Exchange Management Shell на свой компьютер.

Прежде чем начать, убедитесь, что ваш локальный PowerShell разрешает запускать локальные PS скрипты (Execution Policy). Следующая команда разрешит запуск локальных скриптов для текущего пользователя.

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Откройте на своем компьютере PowerShell консоль и выполните следующую команду:

$UserCredential = Get-Credential

Введите логин и пароль учетной записи, которую вы будете использовать для подключения к Exchange.

учетная запись с правами администратора в exchnage

Создайте удаленную PowerShell сессию с вашим Exchange сервером:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://msk-exch1.remontka.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential

Обратите внимание, что для доступа к Web PowerShell используется http , а не https .

Проверьте, что сессию создана и имеет State=Opened :

Get-PSSession

New-PSSession Microsoft.Exchange - удаленное подключение к on-prem exchange из powershell

Импортируйте удаленную сессиюPowerShell в свою локальную:

Import-PSSession $Session

Import-PSSession $Session - импорт сессии с удаленного сервера exchange в powershell

Теперь вы сможете использовать все командлеты Exchange в своем локальном PowerShell сеансе.

Не забывайте корректно завершать удаленные PowerShell сессии. Если вы будете просто закрывать консоль Windows PowerShell без отключения сессии, вы можете исчерпать лимит сеансов удалённой среды PowerShell.

Для завершения сессии, выполните:

Remove-PSSession $Session

Проверьте, что запущенных сессий PowerShell не осталось:

Get-PSSession

Чтобы каждый раз при запуске консоли не выполнять командлеты импорта командлетов PowerShell с удаленного сервера, вы можете использовать профиль PowerShell.

Создайте файл профиля:

New-Item -Path $profile -ItemType file -force

Откройте созданный файл Microsoft.PowerShell_Profile.ps1 с помощью блокнота:

notepad $profile

Добавьте в файл команды подключения к Exchange и импорта командлетов из удаленного сеанса в локальную сессию PowerShell:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://msk-exch1.remontka.com/PowerShell/ -Authentication Kerberos -Credential (Get-Credential)
Import-PSSession $Session

создать профиль powershell для автоматического запуска команда при запуске консоли

Удаленное подключение к Exchange Online (Office 365) из Powershell

Похожим способом вы можете подключаться к своем тенанту Exchange Online (Office 365) для управления ящиками, переговорными комнатами, списками рассылки, и другими параметрами Office 365.

Рассмотрим, как удаленно подключится к Exchange Online из консоли PowerShell без установки модуля Microsoft Exchange Online PowerShell (EXO/ EXOv2) с помощью базовой аутентификации.

Сначала нужно разрешить запуск локальных скриптов:
Set-ExecutionPolicy RemoteSigned

Запросить имя и пароль учетной записи с правами администратора Exchange Online.

$UserCredential = Get-Credential

Для данного пользователя Azure должно быть предварительно разрешено удаленное подключение через PowerShell:

Set-User -Identity [email protected] -RemotePowerShellEnabled $true

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

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic –AllowRedirection

Если для вашего аккаунта включена мультифакторная аутентификация (Multi-Factor Authentication -MFA рекомендуется Microsoft для всех аккаунтов администраторов), то при подключении через New-PSSession появится ошибка:

New-PSSession : [outlook.office365.com] Connecting to remote server outlook.office365.com failed with the following error message : Access is denied._x000D_+ CategoryInfo : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException + FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed

В этом случае вам придется установить модуль Exchange Online PowerShell V2 (EXO V2) :

Install-Module ExchangeOnlineManagement

Для подключения к Exchange Online в этом случае используется командлет:

Connect-ExchangeOnline -UserPrincipalName [email protected] -ShowProgress $true

Либо можно отключить MFA для аккаунта:

Set-MsolUser -UserPrincipalName [email protected] -StrongAuthenticationRequirements @()

Затем импортируйте удаленную сессию в свою консоль:

Import-PSSession $Session

удаленное подключение к exchnage online (office 365) из powershell

Максимально количество удаленных PowerShell подключений к организации Exchange Online ограничено тремя сессиями. При превышении появится ошибка:

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

Теперь вы можете управлять ящиками Office 365.

Чтобы закрыть всея удаленные PowerShell сессии, выполните:

Get-PSSession | Remove-PSSession

EnglishRussianUkrainian