本文包含有关如何使用 Exchange Online PowerShell 模块(无论是否具有多重身份验证 (MFA) )连接到 Exchange Online PowerShell 的说明。
提示
本文中的连接说明也适用于 Exchange Online Protection PowerShell,以便对没有云邮箱的本地电子邮件环境进行云保护。
Exchange Online PowerShell 模块使用新式身份验证连接到 Exchange Online PowerShell 和安全 & 合规性 PowerShell。 有关Exchange Online PowerShell 模块的详细信息,请参阅关于 Exchange Online PowerShell 模块。
若要连接到 Exchange Online PowerShell 实现自动化,请参阅无人参与脚本的仅限应用的身份验证和使用 Azure 托管标识连接到 Exchange Online PowerShell。
若要从 C# 连接到 Exchange Online PowerShell,请参阅使用 C# 连接到 Exchange Online PowerShell。
开始前,有必要了解什么?
安装和维护 Exchange Online PowerShell 模块中介绍了安装并使用模块的要求。
Exchange Online PowerShell V3 模块中的 REST API 连接需要 PowerShellGet 和 PackageManagement 模块。 有关详细信息,请参阅 PowerShellGet for 基于 REST 的连接在 Windows 中。
连接后,基于角色的访问控制 (RBAC) 控制你有权或无权访问的 cmdlet 和参数。 有关详细信息,请参阅 Exchange Online 中权限。
要查找运行特定 Exchange Online cmdlet 所需的权限,请参阅 查找运行任何 Exchange cmdlet 所需的权限。
步骤 1:加载Exchange Online PowerShell 模块
注意
如果模块已安装,通常可以跳过此步骤并运行 Connect-ExchangeOnline ,而无需先手动加载模块。
安装模块后,打开 PowerShell 窗口,并通过运行以下命令加载模块:
Import-Module ExchangeOnlineManagement
步骤 2:连接并进行身份验证
注意
如果用于连接的帐户的配置文件路径包含特殊 PowerShell 字符, (例如) , $
连接命令可能会失败。 解决方法是使用配置文件路径中没有特殊字符的其他帐户进行连接。
需要运行的命令使用以下语法:
Connect-ExchangeOnline [-UserPrincipalName <UPN>] [-ExchangeEnvironmentName <Value>] [-ShowBanner:$false] [-LoadCmdletHelp] [-DelegatedOrganization <String>] [-SkipLoadingFormatData] [-DisableWAM]
有关详细的语法和参数信息,请参阅 Connect-ExchangeOnline。
<UPN> 是用户主体名称格式的帐户, (例如
navin@contoso.onmicrosoft.com
) 。如果使用 ExchangeEnvironmentName 参数,则无需使用 ConnectionUri 或 AzureADAuthorizationEndPointUrl 参数。 下表介绍了 ExchangeEnvironmentName 参数的通用值:
环境 值 Microsoft 365 或 Microsoft 365 GCC 不适用* Microsoft 365 GCC High O365USGovGCCHigh
Microsoft 365 DoD O365USGovDoD
Office 365 德国 O365GermanyCloud
由世纪互联运营的 Office 365 O365China
* 所需的值
O365Default
也是默认值,因此无需在 Microsoft 365 或 Microsoft 365 GCC 环境中使用 ExchangeEnvironmentName 参数。在版本 3.7.0 或更高版本中,默认情况下不再加载Exchange Online PowerShell cmdlet 的命令行帮助。 使用 LoadCmdletHelp 开关,以便 Get-Help cmdlet 可以使用 PowerShell cmdlet Exchange Online帮助。
DelegatedOrganization 参数指定要作为授权的 Microsoft 合作伙伴管理的客户组织。 有关详细信息,请参阅 本文后面的连接示例。
根据组织的性质,可以在连接命令中省略 UserPrincipalName 参数。 而是在运行 Connect-ExchangeOnline 命令后输入用户名和密码或选择存储的凭据。 如果不起作用,则需要使用参数 UserPrincipalName 参数。
如果不使用 MFA,则应能够使用 Credential 参数,而不是 UserPrincipalName 参数。 首先,运行命令
$Credential = Get-Credential
,输入用户名和密码,然后使用 凭据参数 ( ) 的变量-Credential $Credential
。 如果不起作用,则需要使用参数 UserPrincipalName 参数。使用 SkipLoadingFormatData 开关避免从 Windows 服务内连接到 Exchange Online PowerShell 时出错。
PowerShell 7 需要版本 2.0.4 或更高版本。
在版本 3.7.2 或更高版本中,如果遇到与 WAM 相关的连接错误,则 DisableWAM 开关可用于禁用 Web 帐户管理器 (WAM) 。
以下部分中的连接示例使用新式身份验证,并且无法使用基本身份验证。
使用交互式登录提示连接到 Exchange Online PowerShell
以下示例适用于具有或不带 MFA 的帐户的 Windows PowerShell 5.1 和 PowerShell 7:
此示例连接到 Microsoft 365 或 Microsoft 365 GCC 组织中的 Exchange Online PowerShell:
Connect-ExchangeOnline -UserPrincipalName navin@contoso.onmicrosoft.com
此示例连接到 Microsoft GCC High 组织中的 Exchange Online PowerShell:
Connect-ExchangeOnline -UserPrincipalName laura@blueyonderairlines.us -ExchangeEnvironmentName O365USGovGCCHigh
此示例连接到 Microsoft 365 DoD 组织中的 Exchange Online PowerShell:
Connect-ExchangeOnline -UserPrincipalName julia@adatum.mil -ExchangeEnvironmentName O365USGovDoD
此示例连接到 Office 365 Germany 组织中的 Exchange Online PowerShell:
Connect-ExchangeOnline -UserPrincipalName lukas@fabrikam.de -ExchangeEnvironmentName O365GermanyCloud
在打开的登录窗口中,输入密码,然后选择“ 登录”。
注意
在 PowerShell 7 中,默认使用基于浏览器的单一登录 (SSO) ,因此登录提示会在默认 Web 浏览器中打开,而不是在独立对话框中打开。
仅限 MFA:根据为帐户配置的响应选项生成并传递验证码, (例如,) 设备上的短信或Microsoft Authenticator 应用。
在打开的验证窗口中,输入验证码,然后选择“ 验证”。
PowerShell 7 独占连接方法
对于 没有 MFA 的帐户,在 PowerShell 7 中,此示例提示在 PowerShell 窗口中输入凭据:
Connect-ExchangeOnline -UserPrincipalName navin@contoso.onmicrosoft.com -InlineCredential
在具有或不带 MFA 的帐户的 PowerShell 7 中,此示例使用另一台计算机进行身份验证并完成连接。 通常,在没有 Web 浏览器的计算机上使用此方法, (用户无法在 PowerShell 7) 中输入其凭据:
在要连接的计算机上运行以下命令:
Connect-ExchangeOnline -Device
连接命令在以下输出处等待:
若要登录,请使用 Web 浏览器打开页面 https://microsoft.com/devicelogin 并输入代码 <XXXXXXXXX> 进行身份验证。
记下 <XXXXXXXXX> 代码值。
在具有 Web 浏览器和 Internet 访问的任何其他设备上,打开 https://microsoft.com/devicelogin 并输入 <上一步中的 XXXXXXXXX> 代码值。
在生成的页面上输入凭据。
在确认提示中,选择“ 继续”。 下一条消息应指示成功,你可以关闭浏览器或选项卡。
步骤 1 中的命令继续将你连接到 Exchange Online PowerShell。
在没有登录提示的情况下连接到 Exchange Online PowerShell, (无人参与的脚本)
有关完整说明,请参阅 Exchange Online PowerShell 中无人参与脚本的仅限应用身份验证和安全性 & 合规性 PowerShell。
在客户组织中连接到 Exchange Online PowerShell
有关合作伙伴和客户组织的详细信息,请参阅以下文章:
此示例在以下方案中连接到客户组织:
使用 CSP 帐户连接到客户组织。
使用 GDAP 连接到客户组织。
以来宾身份连接到客户组织。
Connect-ExchangeOnline -UserPrincipalName navin@contoso.onmicrosoft.com -DelegatedOrganization adatum.onmicrosoft.com
使用托管标识连接到 Exchange Online PowerShell
有关详细信息,请参阅使用 Azure 托管标识连接到 Exchange Online PowerShell。
系统分配的托管标识:
Connect-ExchangeOnline -ManagedIdentity -Organization "cohovinyard.onmicrosoft.com"
用户分配的已分配托管标识:
Connect-ExchangeOnline -ManagedIdentity -Organization "constoso.onmicrosoft.com" -ManagedIdentityAccountId <ManagedIdentityAccountIdGuid>
步骤 3:完成后断开连接
完成后,请务必断开会话的连接。 如果在未断开会话连接的情况下关闭 PowerShell 窗口,则可能会用尽所有可用会话,并且需要等待会话过期。 若要断开会话连接,请运行以下命令:
Disconnect-ExchangeOnline
若要在无确认提示的情况下以无提示方式断开连接,请运行以下命令:
Disconnect-ExchangeOnline -Confirm:$false
注意
如果用于连接的帐户的配置文件路径包含特殊 PowerShell 字符, (例如,) , $
则 disconnect 命令可能会失败。 解决方法是使用配置文件路径中没有特殊字符的其他帐户进行连接。
如何知道连接成功?
如果未收到任何错误,说明连接成功。 快速测试是运行Exchange Online PowerShell cmdlet(例如 Get-AcceptedDomain),并查看结果。
如果收到错误,则查看以下要求:
常见问题是密码错误。 再次运行连接步骤,并密切关注使用的用户名和密码。
必须启用用于连接到的帐户才能访问 PowerShell。 有关详细信息,请参阅启用或禁用对 Exchange Online PowerShell 的访问。
需要在本地计算机和 Microsoft 365 之间打开 TCP 端口 80 通信。 它可能已经打开了,但是要考虑您的组织是否存在严格的 Internet 访问政策。
如果你的组织使用联合身份验证,并且标识提供者 (IDP) 和/或安全令牌服务 (STS) 未公开提供,则无法使用联合帐户连接到 Exchange Online PowerShell。 相反,请在 Microsoft 365 中创建并使用非fedederated 帐户连接到 Exchange Online PowerShell。
Exchange Online PowerShell 的基于 REST 的连接需要 PowerShellGet 模块。 根据依赖项,PowerShellGet 模块需要 PackageManagement 模块。 如果在未安装这两个模块的情况下尝试连接,则会出现错误。 例如,你可能会看到以下错误:
不能将术语“Update-ModuleManifest”识别为 cmdlet、函数、脚本文件或可作程序的名称。 检查名称的拼写,或者是否包含路径,验证路径是否正确,然后重试。
有关 PowerShellGet 和 PackageManagement 模块要求的详细信息,请参阅 Windows 中基于 REST 的连接的 PowerShellGet。
连接后,可能会收到如下所示的错误:
无法加载文件或程序集“System.IdentityModel.Tokens.Jwt,Version=<Version,Culture>=neutral,PublicKeyToken=<TokenValue>”。 找不到或加载特定文件。
当Exchange Online PowerShell 模块与导入到运行空间中的另一个模块冲突时,会发生此错误。 在导入其他模块之前,请尝试在新的Windows PowerShell窗口中进行连接。
附录:新旧连接方法的比较
本部分尝试比较替换Exchange Online PowerShell 模块的旧连接方法。 基本身份验证和 OAuth 令牌过程包含在内,仅供历史参考,不再受支持。
无需多重身份验证进行连接
使用交互式凭据提示Exchange Online PowerShell 模块:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com
Exchange Online没有交互式凭据提示的 PowerShell 模块:
$secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd) Connect-ExchangeOnline -Credential $o365cred
基本身份验证:
$secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/ -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
具有 OAuth 令牌的 New-PSSession:
$oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?BasicAuthToOAuthConversion=true -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
使用多重身份验证进行连接
使用交互式凭据提示Exchange Online PowerShell 模块:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com
基本身份验证:不可用。
具有 OAuth 令牌的 New-PSSession:不可用。
使用 CSP 帐户连接到客户组织
Exchange Online PowerShell 模块:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization delegated.onmicrosoft.com
基本身份验证:
$secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
具有 OAuth 令牌的 New-PSSession:
$oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/? DelegatedOrg=delegated.onmicrosoft.com&BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
使用 GDAP 连接到客户组织
Exchange Online PowerShell 模块:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization delegated.onmicrosoft.com
基本身份验证:
$secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
具有 OAuth 令牌的 New-PSSession:
$oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
以来宾身份连接到客户组织
Exchange Online PowerShell 模块:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization delegated.onmicrosoft.com
基本身份验证:
$secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
具有 OAuth 令牌的 New-PSSession:
$oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
连接以运行无人参与的脚本
Exchange Online PowerShell 模块:
证书指纹:
注意
CertificateThumbprint 参数仅在 Microsoft Windows 中受支持。
Connect-ExchangeOnline -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contoso.onmicrosoft.com"
Certificate 对象:
Connect-ExchangeOnline -Certificate <%X509Certificate2Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contoso.onmicrosoft.com"
证书文件:
Connect-ExchangeOnline -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (ConvertTo-SecureString -String "<Password>" -AsPlainText -Force) -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contoso.onmicrosoft.com"
有关详细信息,请参阅 Exchange Online PowerShell 中无人参与脚本的仅限应用身份验证和安全性 & 合规性 PowerShell。
基本身份验证:
$secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/ -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
具有 OAuth 令牌的 New-PSSession:
$oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword) $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@contoso.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $Session
使用托管标识进行连接
Exchange Online PowerShell 模块:
系统分配的托管标识:
Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com"
用户分配的托管标识:
Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com" -ManagedIdentityAccountId <UserAssignedManagedIdentityPrincipalIdValue>
有关详细信息,请参阅使用 Azure 托管标识连接到 Exchange Online PowerShell。
基本身份验证:不可用。
具有 OAuth 令牌的 New-PSSession:不可用。