Поиск по сайту:

Подключение к Exchange Online с помощью PowerShell - лучший метод


Некоторые настройки в Exchange Online можно изменить только с помощью PowerShell. Но как подключиться к Exchange Online с помощью PowerShell? Особенно если вы используете MFA или хотите запускать свой скрипт автоматически по расписанию или через Azure Runbook.

PowerShell также является отличным способом выполнения многих ежедневных задач в Exchange Online, таких как изменение настроек почтового ящика, добавление нового почтового ящика или получение информации из него.

В этой статье мы рассмотрим, как подключиться к Exchange Online в PowerShell, использовать модуль в Azure Runbook и многое другое.

Установите модуль Exchange Online

Нам необходимо установить модуль EXO V3 в PowerShell, прежде чем мы сможем подключиться к Exchange Online. Чтобы установить модуль PowerShell, мы откроем PowerShell в повышенном (административном) режиме:

  1. Откройте PowerShell в режиме администратора
    Нажмите клавишу Windows + X и выберите Windows PowerShell (администратор)
  2. Установите модуль EXO V3
    Введите команду ниже, чтобы установить модуль управления Exchange Online:
Add -Force to it when you need to update EXO V3.
Install-Module -Name ExchangeOnlineManagement -Force
  1. Нажмите Y дважды
    Если у вас не установлен NuGet, сначала вам предложат установить PowerShellGet. Просто нажмите Y. Снова нажмите Y, чтобы установить модуль Exchange Online из недоверенного репозитория.

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

Чтобы подключиться к Exchange Online, у вас есть несколько вариантов. Если вы просто введете команду Connect-ExchangeOnline, вам будет предложено ввести или выбрать вашу учетную запись Microsoft 365. Последний модуль, версия 3, поддерживает многофакторную аутентификацию, поэтому вы можете аутентифицироваться с помощью учетной записи, активированной для MFA.

Лично я предпочитаю указывать аккаунт, который хочу использовать для подключения, это можно сделать с помощью параметра UserPrincipalName:

Connect-ExchangeOnline -UserPrincipalName john@contoso.com

После того как вы подключитесь к Exchange Online, вы по умолчанию получите вывод с информацией о модуле EXO. Мы можем скрыть баннер, используя параметр -ShowBanner:$false.

Connect-ExchangeOnline -UserPrincipalName john@contoso.com -ShowBanner:$false

Новый модуль EXO V3 также поддерживает подключение к другому арендатору. Если вы являетесь партнером Microsoft или управляете несколькими арендаторами, то вы можете подключиться к другому арендатору, добавив параметр -DelgatedOrganization :

Connect-ExchangeOnline -UserPrincipalName john@contoso.com -DelegatedOrganization contoso.onmicrosoft.com

Автоматически проверьте, установлен ли модуль EXO

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

С помощью одной команды мы можем перечислить все установленные модули в PowerShell. Вы можете предотвратить ненужные ошибки, проверив, доступен ли модуль ExchangeOnlineManagement.

if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)){
 # Your script goes here
}

Команда выше должна вернуть список установленных модулей Exchange Online. Если результат пустой (null), значит, мы знаем, что модуль не установлен.

Обновите модуль PowerShell для Exchange Online

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

  • Лучшее выполнение - новые командлэты EXO основаны на REST API
  • Более безопасно – V3 использует Современную аутентификацию
  • Более надежный
  • Аутентификация на основе сертификатов
  • UseRPSSession Switch – Предоставляет доступ ко всем существующим удалённым командам PowerShell.

Чтобы обновить модуль Exchange Online PowerShell, мы можем использовать следующую команду в окне PowerShell с повышенными привилегиями:

Update-Module -Name ExchangeOnlineManagement

Подтвердите обновление с:

Get-Module ExchangeOnlineManagement

Чтобы воспользоваться новыми функциями, убедитесь, что вы обновили свои cmdlet’ы Get-* на их эквиваленты Get-EXO*. Вы можете найти актуальный список новых cmdlet’ов в документации.

Подключение к функции Exchange Online для PowerShell

Полная функция ниже может использоваться в скриптах для подключения к Exchange Online. Эта функция проверяет, установлен ли модуль Exchange Online, и при наличии такой возможности предлагает установить его автоматически.

Он также проверяет наличие любых существующих соединений с Exchange Online в PowerShell, предотвращая множественные соединения из одной сессии.

Function ConnectTo-EXO {
  <#
    .SYNOPSIS
        Connects to EXO when no connection exists. Checks for EXO v3 module
  #>
  param(
    [Parameter(
      Mandatory = $true
    )]
    [string]$adminUPN
  )
  
  process {
    # Check if EXO is installed and connect if no connection exists
    if ($null -eq (Get-Module -ListAvailable -Name ExchangeOnlineManagement))
    {
      Write-Host "Exchange Online PowerShell v3 module is requied, do you want to install it?" -ForegroundColor Yellow
      
      $install = Read-Host Do you want to install module? [Y] Yes [N] No 
      if($install -match "[yY]") { 
        Write-Host "Installing Exchange Online PowerShell v3 module" -ForegroundColor Cyan
        Install-Module ExchangeOnlineManagement -Repository PSGallery -AllowClobber -Force
      }else{
	      Write-Error "Please install EXO v3 module."
      }
    }

    if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)) {
      # Check which version of Exchange Online is installed
      if (Get-Module -ListAvailable -Name ExchangeOnlineManagement | Where-Object {$_.version -like "3.*"} ) {
        # Check if there is a active EXO sessions
        if ((Get-ConnectionInformation).tokenStatus -ne 'Active') {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }else{
        # Check if there is a active EXO sessions
        $psSessions = Get-PSSession | Select-Object -Property State, Name
        If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }
    }else{
      Write-Error "Please install EXO v3 module."
    }
  }
}

Подключитесь к Exchange Online в качестве делегированного администратора (партнера)

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

Таким образом, вы можете использовать свои собственные учетные данные для аутентификации. Для этого вам нужно будет использовать параметр -DelegatedOrganization.

Replace stonegrovebank.onmicrosoft.com with the organization that you want to manage
Connect-ExchangeOnline -DelegatedOrganization stonegrovebank.onmicrosoft.com

Optional, you can specify your username as well
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -DelegatedOrganization stonegrovebank.onmicrosoft.com

Теперь вы можете управлять всеми почтовыми ящиками из тенанта партнера.

Подключение Exchange Online к PowerShell без современного управления удостоверениями

Вы можете использовать следующий метод для подключения к Exchange Online в PowerShell, если ваша учетная запись еще не поддерживает современную аутентификацию:

$cred = Get-Credential

Connect-ExchangeOnline -Credential $cred -ShowProgress $true

Проверьте, подключен ли Exchange Online

Хорошая идея проверить, существует ли уже соединение при использовании модуля Exchange Online в скриптах. Имейте в виду, что вы можете иметь только 5 одновременных соединений с Exchange Online. И вам, вероятно, не нужно входить в систему, если это не обязательно.

Мы можем использовать командлет Get-ConnectionInformation начиная с EXO v3. Если вы используете более старую версию Exchange Online, вам нужно будет использовать Get-PSSession.

ПолучитьИнформациюПодключения

С помощью приведенного ниже фрагмента кода вы можете проверить, есть ли активная сессия ExchangeOnline как для версии V3, так и для более старых версий. Сначала мы проверяем, установлен ли модуль ExchangeOnline, а затем, установлена ли версия 3.x. Затем в зависимости от версии мы проверяем наличие существующих подключений.

if ($null -ne (Get-Module -ListAvailable -Name ExchangeOnlineManagement)) {
      # Check which version of Exchange Online is installed
      if (Get-Module -ListAvailable -Name ExchangeOnlineManagement | Where-Object {$_.version -like "3.*"} ) {
        # Check if there is a active EXO sessions
        if ((Get-ConnectionInformation).tokenStatus -ne 'Active') {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }else{
        # Check if there is a active EXO sessions
        $psSessions = Get-PSSession | Select-Object -Property State, Name
        If (((@($psSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
          write-host 'Connecting to Exchange Online' -ForegroundColor Cyan
          Connect-ExchangeOnline -UserPrincipalName $adminUPN
        }
      }
    }

Получение информации о почтовом ящике

С новым модулем EXO V3 вы теперь можете легко получить данные почтового ящика с помощью следующего сокращенного запроса:

Old way:
Get-ExoMailbox -identity johndoe@a-d.site

With the EXO V2 module you can write the following shorthand
Get-ExoMailbox johndoe

Отключение ваших сеансов

Всегда убедитесь, что вы отключили свою сессию Exchange Online перед закрытием окна PowerShell. Если вы не закроете сессию, вы можете использовать все 5 удаленных соединений PowerShell к Exchange Online. В таком случае вам придется подождать, пока сессии истекут, прежде чем вы сможете подключиться снова.

Disconnect-ExchangeOnline

Часто задаваемые вопросы

Если вы получили ошибку “Файлы не могут быть загружены, потому что выполнение скриптов на этой системе отключено. Укажите действительный сертификат для подписи файлов.”, значит, вы забыли установить политику выполнения.

Запустите следующую команду в окне PowerShell с повышенными правами:
Set-ExecutionPolicy RemoteSigned

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

Убедитесь, что вы установили последнюю версию модуля Exchange Online, EXO V3, как это объясняется в начале статьи.

Вы использовали все 5 доступных подключений к Exchange Online. Убедитесь, что вы отключили свои сеансы PowerShell.

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

Get-PSSession | Remove-PSSession

Для подключения к Exchange Online вам потребуется использовать учетную запись, которая является глобальным администратором в Office 365. Учетная запись, с которой вы подключаетесь, не имеет правильных разрешений.

Завершение

Новый модуль Exchange Online действительно мощный и делает работу с Exchange Online намного проще. Надеюсь, эта статья помогла вам начать. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.

Вам также могут понравиться следующие статьи:

  • Включить адресацию Office 365 Plus
  • Найдите все email-адреса с помощью PowerShell
  • Подключите PowerShell к Office 365