Подключение к Exchange Online PowerShell: пошаговое руководство
By Mirko Peters ·
Подключение к Exchange Online PowerShell с помощью Connect-ExchangeOnline: требования, интерактивный вход, MFA, варианты для партнёров и без участия пользователя, а также способы устранения ошибок.
Automatically translated with AI from the original post. Read the English original
Чтобы подключиться к Exchange Online PowerShell, загрузите модуль ExchangeOnlineManagement и выполните Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com. Откроется окно входа, вы вводите пароль и подтверждаете запрос MFA, после чего оболочка подключена. Эта статья предназначена для администраторов Exchange и Microsoft 365, которым нужны точные шаги, варианты доступа для партнёров и без участия пользователя, а также краткий список решений, если подключение не работает. Она соответствует актуальной документации Microsoft, поэтому команды здесь предполагают современную аутентификацию и отсутствие сеанса удалённого PowerShell.
Ключевые выводы
- Чтобы подключиться к Exchange Online PowerShell, загрузите модуль и выполните Connect-ExchangeOnline, указав учётную запись администратора в формате UPN.
- Интерактивный вход работает как с многофакторной аутентификацией, так и без неё, поэтому отдельный обходной путь для MFA не нужен.
- Базовая аутентификация и старый способ New-PSSession больше не поддерживаются, поэтому скрипты, которые на них опираются, нужно переписать.
- После подключения используйте Get-AcceptedDomain для быстрой проверки и всегда завершайте сеанс командой Disconnect-ExchangeOnline.
- Скрипты без участия пользователя должны использовать аутентификацию только для приложения или управляемое удостоверение вместо сохранённого пароля.
Что нужно подготовить перед подключением
Команда подключения входит в модуль, поэтому сначала модуль нужно установить. Если вы этого ещё не сделали, установите его из PowerShell Gallery командой Install-Module -Name ExchangeOnlineManagement. В документации Microsoft модуль называется модулем V3. Microsoft описывает работу и в Windows PowerShell 5.1, и в PowerShell 7. Для PowerShell 7 нужна версия модуля 2.0.4 или новее.
На то, работает ли подключение, влияют ещё четыре условия:
- Разрешения. Управление доступом на основе ролей определяет, какие командлеты вы можете выполнять после входа. Сложно не подключиться, а выполнить нужный командлет. У Microsoft есть страница о том, как найти разрешения, необходимые командлету, её стоит добавить в закладки.
- Доступ учётной записи к PowerShell. Учётной записи должно быть разрешено использовать Exchange Online PowerShell. Если администратор отключил этот доступ для вашего пользователя, вход выполняется успешно, но подключение не устанавливается.
- Сеть. Между вашим компьютером и Microsoft 365 должен быть открыт TCP-порт 80.
- Путь к профилю без спецсимволов. Microsoft отмечает, что команды подключения могут не работать, если путь к профилю пользователя содержит специальные символы PowerShell, например
$. Если у вас есть другая учётная запись, используйте её.
Настраивать WinRM тоже не нужно. Текущие подключения работают через REST, поэтому старая рекомендация включить базовую аутентификацию в WinRM больше не актуальна.
Подключение к Exchange Online PowerShell пошагово
Это стандартный интерактивный способ. Он одинаково работает в Windows PowerShell 5.1 и PowerShell 7, с многофакторной аутентификацией и без неё.
- Откройте новое окно PowerShell. Новое окно позволяет избежать конфликтов сборок с другими модулями, которые могли быть загружены ранее в этом сеансе.
- Загрузите модуль командой
Import-Module ExchangeOnlineManagement. Если модуль уже установлен, согласно Microsoft, этот шаг обычно можно пропустить и сразу перейти к команде подключения, так как PowerShell загружает модуль автоматически. - Выполните
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com, но с вашей учётной записью в формате UPN. В некоторых организациях параметр-UserPrincipalNameможно опустить, и тогда система запросит его. Если это не срабатывает, добавьте параметр. - Введите пароль в окне входа и выберите Sign in.
- Если для вашей учётной записи включена многофакторная аутентификация (MFA), введите код подтверждения и выберите Verify. Код отправляется выбранным вами способом, например текстовым сообщением или через Microsoft Authenticator. В PowerShell 7 вход по умолчанию выполняется через браузер.
- Дождитесь баннера. Отсутствие ошибок означает, что подключение установлено.
Это всё. Та же команда подключает вас к сеансам PowerShell для Microsoft 365 GCC без дополнительных параметров. Только для других облаков требуется настройка, о которой речь пойдёт дальше.
Если вы не хотите, чтобы приветственный баннер попадал в журнал скрипта, добавьте -ShowBanner:$false. Если нужно, чтобы Get-Help показывал справку по командлетам Exchange Online, добавьте -LoadCmdletHelp. Начиная с версии модуля 3.7.0 эта справка больше не загружается по умолчанию, что часто удивляет тех, кто обновил модуль и обнаружил, что Get-Help возвращает почти пустой результат.
Другие способы подключения: PowerShell 7, партнёры и облака
В документации описано несколько вариантов. Выберите тот, который соответствует вашей ситуации.
PowerShell 7 без браузера. Выполните Connect-ExchangeOnline -Device. Команда выведет сообщение с просьбой открыть https://microsoft.com/devicelogin и ввести код. Это делается на любом другом устройстве: вы входите в систему, подтверждаете действие, и исходный сеанс завершает подключение. Способ работает как с MFA, так и без неё и полезен на серверах или компьютерах под Linux без графического интерфейса.
PowerShell 7 с учётными данными в строке. Команда Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -InlineCredential работает для учётных записей без MFA. Большинство организаций требуют MFA для администраторов, поэтому этим способом вы будете пользоваться редко.
Windows PowerShell 5.1 с объектом учётных данных. Для учётных записей без MFA можно сначала выполнить $Credential = Get-Credential, а затем Connect-ExchangeOnline -Credential $Credential. Microsoft отмечает, что если это не срабатывает, следует использовать -UserPrincipalName.
Клиенты-арендаторы для партнёров. Партнёры программы Cloud Solution Provider и гостевые администраторы добавляют -DelegatedOrganization, например: Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization adatum.onmicrosoft.com. На странице Microsoft в части разрешений упоминаются программа Cloud Solution Provider и гранулярные делегированные права администратора (GDAP).
Государственные и региональные облака. Среда выбирается параметром -ExchangeEnvironmentName. По умолчанию используется O365Default, который охватывает Microsoft 365 и GCC. Документированные значения для остальных сред: O365USGovGCCHigh, O365USGovDoD, O365GermanyCloud и O365China.
Скрипты без участия пользователя. Не храните пароль администратора в скрипте. Microsoft описывает два более надёжных варианта. Управляемая идентификация, например Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com", подходит для скриптов, которые работают в Azure. Аутентификация приложения без пользователя с сертификатом подходит для всего остального. Параметр с отпечатком сертификата поддерживается только в Windows. Для настройки нужна регистрация приложения в Microsoft Entra ID, разрешение приложения Exchange.ManageAsApp с согласием администратора, сертификат и поддерживаемая роль, например Exchange Administrator, назначенная приложению. Microsoft рекомендует принцип минимальных привилегий, поэтому не давайте приложению роль глобального администратора, если без неё нельзя обойтись. Следуйте отдельной статье Microsoft о аутентификации приложения без пользователя, а не её сокращённой версии.
В службе Windows добавьте -SkipLoadingFormatData, чтобы избежать ошибок. Если вы видите ошибки, в которых упоминается Web Account Manager, для этого есть параметр -DisableWAM в модуле версии 3.7.2 или новее.
Делайте скрипты компактными: ограничивайте импорт
Подключение обычно импортирует командлеты Exchange Online, которые вам разрешено использовать. Для быстрой проверки почтового ящика это нормально, но скрипту, которому нужны три команды, не нужны все. На странице модуля Microsoft есть конкретный совет. Частые вызовы Connect-ExchangeOnline и Disconnect-ExchangeOnline в одном сеансе могут вызвать утечку памяти. Решение: подключаться один раз на скрипт и с помощью параметра -CommandName импортировать только нужные командлеты.
Например, скрипту, который только читает статистику почтового ящика, нужна только одна команда. Назовите несколько нужных команд, подключитесь один раз в начале, выполните работу и отключитесь один раз в конце. Такие скрипты легче проверять, потому что строка подключения сообщает читателю, какие команды использует скрипт.
Ещё две привычки помогают в командных окружениях. Во-первых, храните строку подключения в одном месте, например в небольшой функции, чтобы изменение метода аутентификации выполнялось один раз, а не в двадцати скриптах. Во-вторых, записывайте в журнал имя учётной записи или приложения, которое запустило скрипт, но никогда не его секрет. Когда в почтовом ящике происходит что-то неожиданное, эта строка в журнале может сэкономить вам часы работы.
Проверьте подключение и корректно отключайтесь
Подключение без ошибок — хороший знак, но проверьте его безопасной командой чтения. Get-AcceptedDomain выводит домены вашей организации и выполняется за секунду. Если домены отображаются, сеанс работает, а у вашей учётной записи есть как минимум доступ на чтение.
Чтобы посмотреть сведения о подключениях, используйте Get-ConnectionInformation. На странице модуля Microsoft отмечено, что Get-PSSession не возвращает полезных данных для этих подключений на основе REST, поэтому старым скриптам, которые проверяют Get-PSSession, нужно изменение.
Закончив работу, выполните Disconnect-ExchangeOnline. В скриптах добавьте -Confirm:$false, чтобы не получать запрос подтверждения. В статье Microsoft о подключении предупреждается, что закрытие окна без отключения может исчерпать доступные сеансы, и тогда придётся ждать, пока они истекут.
Устраните наиболее частые ошибки подключения
Большинство сбоев вызваны небольшим набором причин. Проверяйте их по порядку, сверху вниз.
- Неверное имя пользователя или пароль. Повторите шаги и проверьте оба значения. Звучит очевидно, но сначала проверьте формат UPN.
- Доступ к PowerShell отключён для учётной записи. Администратор может его включить. У Microsoft есть отдельная статья о включении и отключении доступа к PowerShell для Exchange Online.
- Порт 80 заблокирован. Попросите сетевую команду разрешить TCP-порт 80 к Microsoft 365.
- Федеративная учётная запись с недоступным поставщиком удостоверений. Если ваш IDP или STS не доступен из публичной сети, Microsoft советует для подключения использовать учётную запись Microsoft 365 без федерации.
- «The term 'Update-ModuleManifest' is not recognized» Для подключения нужны PowerShellGet и его зависимость PackageManagement. Обновите оба модуля и перезапустите PowerShell.
- «Could not load file or assembly 'System.IdentityModel.Tokens.Jwt'». Модуль конфликтует с другим модулем в той же сессии. Подключитесь в новом окне Windows PowerShell, прежде чем импортировать что-либо ещё.
- Ошибки в окне, открытом службой или запланированной задачей. Попробуйте
-SkipLoadingFormatData.
Если ни один из этих вариантов не подходит, следующее подозреваемое — версия модуля. Выполните Update-Module -Name ExchangeOnlineManagement в той же области, в которой вы устанавливали модуль, и повторите попытку в новом окне.
Распространённые ошибки
- Использование базовой проверки подлинности или
New-PSSession. Microsoft упоминает эти способы только как исторические справочные сведения и сообщает, что они больше не поддерживаются. Скрипт, который всё ещё создаёт сессию таким образом, нужно перевести наConnect-ExchangeOnline. - Закрытие окна вместо отключения. Это может исчерпать ваши сеансы. Сделайте
Disconnect-ExchangeOnlineпоследней строкой каждого скрипта. - Хранение пароля в открытом виде в скрипте. Вместо этого используйте управляемое удостоверение или сертификат.
- Импорт других модулей до подключения. Конфликт с другим модулем может сорвать вход. Сначала подключитесь к Exchange Online или используйте новое окно.
- Предположение, что подключение означает наличие разрешений. Если после подключения командлет выводит «not recognized», ваша роль не включает его. Это вопрос RBAC, а не проблема подключения.
Связанные темы для изучения
- Установка и обновление модуля: подключение зависит от нужного модуля и версии PowerShell, поэтому прочитайте требования к модулю Exchange Online PowerShell перед развёртыванием для команды.
- Разрешения для командлета: Microsoft объясняет, как узнать, какая роль нужна для конкретного командлета Exchange.
- Подключение к Security & Compliance PowerShell: тот же модуль предоставляет
Connect-IPPSSession, который недоступен в PowerShell 7 на Linux или macOS. - Автоматизация без участия пользователя: проверка подлинности только для приложений и управляемые удостоверения — безопасный способ запуска плановых скриптов Exchange.
- Крупные массовые задания: командлеты на основе REST имеют тайм-аут 15 минут, поэтому разбивайте большие обновления участников на пакеты.
Следующий шаг
Чтобы надёжно подключаться к Exchange Online PowerShell, начните с нового окна, выполните Connect-ExchangeOnline -UserPrincipalName с учётной записью администратора, проверьте подключение командой Get-AcceptedDomain и отключитесь по завершении работы. Затем планируйте автоматические скрипты на основе управляемого удостоверения или сертификата, чтобы никому не приходилось вводить или хранить пароль.