如何使用 PowerShell 连接和管理 Exchange Online
PowerShell 是 Microsoft 365 中本地 Exchange Server 组织和基于云的 Exchange Online 的主要管理工具。在本文中,我们将展示如何在 Windows 上安装 Exchange Online PowerShell v2 (EXO V2) 模块、如何连接到 Exchange Online 租户、管理邮箱和其他 Microsoft 365 对象。
请注意,当前有两个模块可用于管理 Exchange Online:Exchange Online PowerShell v1 和现代 Exchange Online PowerShell v2 (EXO v2)。除非有明确的理由使用旧模块(旧脚本等),否则尝试始终使用 EXO v2:它运行速度更快(就像新的 Azure AD 模块,它基于 Microsoft Graph 实现中的 REST API),cmdlet 经过优化以处理多个对象,使用现代身份验证而不是基本身份验证,支持 MFA 身份验证,ExchangeOnlineManagement 2.0.4 和更新版本可在 PowerShell Core 6.x、7x 和 macOS、Ubuntu 18.04/ 上运行20.04。
安装 Exchange Online PowerShell V2 (EXO V2) 模块
要在 Windows 中安装 Exchange Online PowerShell,您需要 PowerShell 5.x(ExchangeOnlineManagement 2.0.4 或更高版本支持 PowerShell Core)。
您计算机上的 PowerShell 脚本执行策略设置必须允许本地 *.PS 文件运行:
Set-ExecutionPolicy RemoteSigned安装并更新 PowershellGet 模块:
Install-Module PowershellGet -Force
Update-Module PowershellGet
要从 PowerShell 脚本库为所有用户安装 EXOv2 (ExchangeOnlineManagement) 模块,请运行以下命令:
Install-Module -Name ExchangeOnlineManagement -Force -Scope AllUsers然后您可以将该模块导入到您的会话中:
Import-Module ExchangeOnlineManagement确保模块已安装。它还显示了它的版本(在我的例子中是 2.0.5):
Get-Module ExchangeOnlineManagement在脚本中,您可以使用以下命令确保已安装该模块:
(Get-Module -ListAvailable -Name ExchangeOnlineManagement) -ne $null要更新 EXOv2 模块,请使用以下命令:
Update-Module ExchangeOnlineManagement使用 PowerShell 连接到 Exchange Online
要使用 Exchange Online 模块连接到 Microsoft 365 租户,请使用 Connect-ExchangeOnline cmdlet。例如,您可以指定具有全局管理员角色的用户的 UPN:
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $true输入用户密码并使用 MFA 确认登录(使用智能手机上的 Microsoft Authenticator 应用程序更方便)。
如果计算机上未安装浏览器(例如,当您从 Linux 或 Windows Server Core 连接到 Exchange Online 时),您可以显示 PowerShell Core 7.x 的身份验证代码以及用于输入该代码的框,如下所示:
Connect-ExchangeOnline -Device
使用您在另一台计算机上通过浏览器获得的 URL 和代码。
或者使用
-InlineCredential在控制台中以交互方式输入密码的选项。
如果您的帐户有权访问多个 Azure 租户,您可以使用 DeleatedOrganization 选项指定租户名称:
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $true -DelegatedOrganization a-dpreprod.onmicrosoft.com如果帐户禁用了新式身份验证,您可以按如下方式连接:
$cred = Get-Credential
Connect-ExchangeOnline -Credential $cred -UserPrincipalName max.bak@a-d.onmicrosoft.com -ShowProgress $true您可以确保是否存在与 Exchange Online 的活动连接,如下所示:
Get-PSSession| ft -AutoSize在我们的示例中,与 Outlook.office365.com 的连接处于活动状态(State=
Opened)。
使用完 Exchange Online 后,使用 Disconnect-ExchangeOnline cmdlet 正确退出会话。问题是 Exchange Online 仅支持 5 个并发 PowerShell 会话。如果您尝试打开第六个,则会出现以下错误:
Fail to create a runspace because you have exceeded the maximum number of connections allowed.
您可以在 PowerShell 脚本中使用以下代码来确保通过 EXOv2 模块与 Exchange Online 的连接处于活动状态。它将允许避免与 Microsoft 365 进行额外的 PowerShell 会话。
$PSSessions = Get-PSSession | Select-Object -Property State, Name
If (((@($PSSessions) -like '@{State=Opened; Name=ExchangeOnlineInternalSession*').Count -gt 0) -ne $true) {
Connect-ExchangeOnline -UserPrincipalName max.bak@a-d.onmicrosoft.com }以下文章介绍了如何在不安装 EXOv2 模块的情况下通过 PowerShell 远程连接到本地 Exchange 或 Exchange Online:
https://a-d.site/connect-exchange-microsoft-365-remote-powershell/
使用 ExchangeOnlineManagement Cmdlet 管理 Exchange Online
您可以使用以下命令显示 EXOv2 模块中可用 cmdlet 的列表:
Get-Command -Module ExchangeOnlineManagement目前,有 32 个 cmdlet 可用:
- 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
请注意,Exchange Online 模块中某些 cmdlet 的名称已更改。现在大多数都带有EXO后缀。例如,使用 Get-EXOMailbox 代替 Get-Mailbox,使用 Get-EXOMailboxPermission 代替 Get-MailboxPermission 等。因此,如果您有任何适用于 EXOv1 的脚本,则需要仔细更新它们以与 EXOv2 一起使用。
您可以显示 Exchange 租户中的邮箱列表或有关特定邮箱的信息:
Get-EXOMailbox |ft
Get-EXOMailbox jsergo要显示允许 POP 和 IMAP 访问的用户:
Get-EXOCasMailbox -PropertySets Imap,pop显示所有邮箱的大小:
Get-EXOMailbox | Get-EXOMailboxStatistics所有共享邮箱的大小:
Get-EXOMailbox | Where-Object{$_.RecipientTypeDetails -eq "SharedMailbox"} | Get-EXOMailboxStatistics请注意,ExchangeOnlineManagement 模块中没有 Set-Mailbox cmdlet。问题在于,连接到租户后,其他可用的 Exchange Online cmdlet(超过 750 个)会导入到您的 PowerShell 会话中。首先,您必须获得一个会话名称:
Get-PSSession| select ConfigurationName,CurrentModuleName使用生成的会话名称,您可以获得可用 cmdlet 的列表:
Get-Command -Module tmp_4amp2awk.dga要更改用户的 SMTP 地址,可以使用以下命令:
Get-EXOMailbox jsergo | Set-Mailbox -EmailAddresses @{Add='j.sergo@a-d.site'}




