当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 连接到 Exchange Online - 最佳方法

作者:精品下载站 日期:2024-12-14 03:40:18 浏览:13 分类:玩电脑

使用 PowerShell 连接到 Exchange Online - 最佳方法


Exchange Online 中的某些设置只能使用 PowerShell 进行更改。但是如何使用 PowerShell 连接到 Exchange Online?特别是当您使用 MFA,或者想要按照计划或 Azure Runbook 自动运行脚本时。

PowerShell 也是在 Exchange Online 中执行许多日常任务的好方法,例如更改邮箱设置、添加新邮箱或从中检索信息。

在本文中,我们将了解如何在 PowerShell 中连接到 Exchange Online、如何在 Azure Runbook 中使用该模块等等。

安装 Exchange 在线模块

我们需要在 PowerShell 中安装 EXO V3 模块,然后才能连接到 Exchange Online。要安装 PowerShell 模块,我们将以提升(管理员)模式打开 PowerShell:

  1. 以提升模式打开 PowerShell
    Windows 键 + X 并选择Windows PowerShell (admin)
  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 模块

[玩转系统] 使用 PowerShell 连接到 Exchange Online - 最佳方法

使用 PowerShell 连接到 Exchange Online

要连接到 Exchange Online,您有多种选择。如果您仅输入命令 Connect-ExchangeOnline,系统将提示您输入或选择您的 Microsoft 365 帐户。最新模块 v3 支持 MFA,因此您可以使用启用了 MFA 的帐户进行身份验证。

就个人而言,我更喜欢指定要用于连接的帐户,您可以使用 UserPrincipalName 参数来执行此操作:

Connect-ExchangeOnline -UserPrincipalName [email protected]

连接到 Exchange Online 后,默认情况下您将获得包含有关 EXO 模块信息的输出。我们可以通过使用参数-ShowBanner:$false来隐藏横幅

Connect-ExchangeOnline -UserPrincipalName [email protected] -ShowBanner:$false

新的 EXO V3 模块还支持连接到另一个租户。如果您是 Microsoft 合作伙伴或管理多个租户,则可以通过添加 -DeleratedOrganization 参数连接到另一个租户:

Connect-ExchangeOnline -UserPrincipalName [email protected] -DelegatedOrganization contoso.onmicrosoft.com

自动检查EXO模块是否安装

您要在脚本中使用 Exchange Online 模块吗?然后确保在尝试连接之前自动检查模块是否已安装。

使用单个 cmdlet,我们可以列出 PowerShell 中所有已安装的模块。您可以通过验证 ExchangeOnlineManagement 模块是否可用来防止不必要的错误。

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

上面的 cmd 应返回已安装的 Exchange Online 模块的列表。如果结果为空 (null),则我们知道该模块未安装。

更新 Exchange Online PowerShell 模块

PowerShell 模块经常更新,包括 Exchange Online 模块。最新版本的 EXO v3 进行了一些改进,值得更新您的 PowerShell 模块。

  • 更好的性能 - 新的 EXO cmdlet 基于 REST API
  • 更安全 - V3 使用现代身份验证
  • 更可靠
  • 基于证书的身份验证
  • UseRPSSession Switch - 授予对所有现有远程 PowerShell cmdlet 的访问权限。

要更新 Exchange Online PowerShell 模块,我们可以在提升的 PowerShell 窗口中使用以下命令:

Update-Module -Name ExchangeOnlineManagement

使用以下命令验证更新:

Get-Module ExchangeOnlineManagement

要受益于新功能,请确保将 Get-* cmdlet 更新为 Get-EXO* 对应项。您可以在文档中找到新 cmdlet 的最新列表。

连接到 PowerShell 的 Exchange Online 功能

下面的完整函数可以在脚本中使用来连接到 Exchange Online。此函数检查是否安装了 Exchange Online 模块,以及何时提供自动安装的选项。

它还检查 PowerShell 中任何现有的 Exchange Online 连接,防止来自同一会话的多个连接。

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,而不是使用客户端租户的专用管理员登录名。

这样,您就可以使用自己的凭据进行身份验证。为此,您需要使用参数-DeleatedOrganization

# 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 [email protected] -DelegatedOrganization stonegrovebank.onmicrosoft.com

您现在可以管理合作伙伴租户的所有邮箱。

在没有现代身份验证的情况下将 Exchange Online 连接到 PowerShell

如果您的帐户尚不支持新式身份验证,您可以使用以下方法在 PowerShell 中连接到 Exchange Online:

$cred = Get-Credential

Connect-ExchangeOnline -Credential $cred -ShowProgress $true

检查 Exchange Online 是否已连接

在脚本中使用 Exchange Online 模块时,最好检查连接是否已存在。请记住,您只能有 5 个同时连接到 Exchange Online。如果不需要,您可能不想登录。

从 EXO v3 开始,我们可以使用 cmdlet Get-ConnectionInformation。如果您使用的是旧版本的 Exchange Online,则需要使用 Get-PSSession

[玩转系统] 使用 PowerShell 连接到 Exchange Online - 最佳方法

通过下面的代码片段,您可以检查 V3 和旧版本是否有活动的 ExchangeOnline 会话。我们首先检查是否安装了 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 [email protected]

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

断开您的会话

在关闭 PowerShell 窗口之前,请务必确保断开 Exchange Online 会话。如果不关闭会话,您最终可能会使用所有 5 个与 Exchange Online 的远程 PowerShell 连接。如果发生这种情况,您将需要等待会话过期才能重新连接。

Disconnect-ExchangeOnline

常见问题解答

如果您收到错误“无法加载文件,因为该系统上禁用了运行脚本。提供用于签署文件的有效证书。” 那么您忘记设置执行策略。

在提升的 PowerShell 窗口中运行以下 cmd:
Set-ExecutionPolicy RemoteSigned

您正尝试在使用基本身份验证选项时使用启用了 MFA 的帐户连接到 Exchange Online。

请确保安装最新的 Exchange Online 模块 EXO V3,如本文开头所述。

您已使用所有 5 个可用的 Exchange Online 连接。确保断开 PowerShell 会话连接。

要关闭当前会话,您需要运行以下 cmd:

Get-PSSession |删除-PSSession

要连接到 Exchange Online,您需要使用 Office 365 中的全局管理员帐户。您连接的帐户没有正确的权限。

总结

新的 Exchange Online 模块非常强大,使使用 Exchange Online 变得更加容易。我希望这篇文章可以帮助您入门。如果您有任何疑问,请在下面发表评论。

您可能还喜欢以下文章:

  • 启用 Office 365 Plus 寻址
  • 使用 PowerShell 查找所有电子邮件地址
  • 将 PowerShell 连接到 Office 365

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯