启用或禁用对 Exchange Online PowerShell 的访问

Exchange Online PowerShell 是一个管理界面,管理员可以从命令行管理 Microsoft 365 组织的Exchange Online部分 (包括Exchange Online Protection 和 中的许多安全功能Microsoft Defender for Office 365) 。

默认情况下,Microsoft 365 中的所有帐户都可以使用 Exchange Online PowerShell。 此访问权限不会为用户提供管理功能。 它们仍受 基于角色的访问控制 (RBAC) 的限制。 例如,他们可以在自己的邮箱上配置一些设置,并管理自己拥有的通讯组,但不能太多其他设置。

管理员可以使用本文中的过程来禁用或启用用户连接到 powerShell Exchange Online 的功能。

开始前,有必要了解什么?

  • 估计完成每个步骤时间:少于 5 分钟

  • 本文中的过程仅在 Exchange Online PowerShell 中可用。 若要连接到 Exchange Online PowerShell,请参阅连接到 Exchange Online PowerShell

  • 需要先分配权限,然后才能执行本文中的过程。 可以选择下列选项:

    • Exchange Online RBAC组织管理收件人管理角色组中的成员身份。
    • Microsoft Entra RBACExchange 管理员全局管理员*角色的成员身份为用户提供Microsoft 365 中其他功能所需的权限权限。

    重要

    在基于云的组织中快速全局禁用 PowerShell 访问时,请注意命令(例如 Get-User | Set-User -EXOModuleEnabled $false ,无需考虑管理员帐户)。 使用本文中的过程 选择性地 删除 PowerShell 访问,或者通过在全局删除命令中使用以下语法 保留对 PowerShell 访问权限的用户 的访问权限: Get-User | Where-Object {$_.UserPrincipalName -ne 'admin1@contoso.onmicrosoft.com' -and $_.UserPrincipalName -ne 'admin2@contoso.onmicrosoft.com'...} | Set-User -EXOModuleEnabled $false

    如果意外锁定了 PowerShell 访问权限,请在Microsoft 365 管理中心创建新的管理员帐户,然后使用本文中的过程使用该帐户授予自己 PowerShell 访问权限。

    * Microsoft建议使用权限最少的角色。 使用权限较低的帐户有助于提高组织的安全性。 全局管理员是一个权限很高的角色,应仅限于在无法使用现有角色的紧急情况下使用。

  • 有关 Exchange Online 中的 OPATH 筛选器语法的详细信息,请参阅其他 OPATH 语法信息

提示

是否有任何疑问? 在 Exchange 论坛中寻求帮助。 请访问以下论坛:Exchange OnlineExchange Online Protection

为用户启用或禁用远程 PowerShell 访问

本示例禁用对用户 david@contoso.onmicrosoft.comExchange Online PowerShell 的访问。

Set-User -Identity david@contoso.onmicrosoft.com -EXOModuleEnabled $false

此示例允许访问用户 chris@contoso.onmicrosoft.comExchange Online PowerShell。

Set-User -Identity chris@contoso.onmicrosoft.com -EXOModuleEnabled $true

为多个用户禁用远程 PowerShell 访问

为了防止现有用户的特定组具有远程 PowerShell 访问权限,您可以选择以下选项:

  • 基于现有属性筛选用户:此方法假定目标用户帐户都共享唯一的可筛选属性。 某些属性 (例如,标题、部门、地址信息和电话号码) 只能通过 Get-User cmdlet 使用。 其他属性 (例如,CustomAttribute1 到 CustomAttribute15) 仅在 Get-Mailbox cmdlet 中可用。
  • 使用特定用户列表:生成特定用户列表后,可以使用该列表禁用他们对 PowerShell Exchange Online 的访问权限。

基于现有特性筛选用户

若要基于现有属性为任意数量的用户禁用对 Exchange Online PowerShell 的访问,请使用以下语法:

$<VariableName> = <Get-Mailbox | Get-User> -ResultSize unlimited -Filter <Filter>

$<VariableName> | foreach {Set-User -Identity $_.WindowsEmailAddress -EXOModuleEnabled $false}

本示例将为 Title 属性包含"销售人员"这个值的所有用户删除远程 PowerShell 访问。

$DSA = Get-User -ResultSize unlimited -Filter "(RecipientType -eq 'UserMailbox') -and (Title -like 'Sales Associate*')"

$DSA | foreach {Set-User -Identity $_.WindowsEmailAddress -EXOModuleEnabled $false}

使用特定用户的列表

若要为特定用户列表禁用远程 PowerShell 访问,可使用以下语法。

$<VariableName> = Get-Content <text file>

$<VariableName> | foreach {Set-User -Identity $_ -EXOModuleEnabled $false}

以下示例使用文本文件 C:\My Documents\NoPowerShell.txt 按其帐户标识用户。 文本文件每行必须包含一个帐户,如下所示:

akol@contoso.onmicrosoft.com
tjohnston@contoso.onmicrosoft.com
kakers@contoso.onmicrosoft.com

使用要更新的用户帐户填充文本文件后,运行以下命令:

$NoPS = Get-Content "C:\My Documents\NoPowerShell.txt"

$NoPS | foreach {Set-User -Identity $_ -EXOModuleEnabled $false}

查看用户的Exchange Online PowerShell 访问状态

提示

EXOModuleEnabled新的属性不能与 Get-User cmdlet 上的 Filter 参数一起使用,但 属性和旧RemotePowerShellEnabled属性的值EXOModuleEnabled始终相同,因此请在 Get-User cmdlet 上将 属性与 Filter 参数一RemotePowerShellEnabled起使用。

若要查看特定用户的 PowerShell 访问状态,请将 UserIdentity> 替换为<用户的名称或用户主体名称 (UPN) ,并运行以下命令:

Get-User -Identity "<UserIdentity>" | Format-List EXOModuleEnabled

若要显示所有用户Exchange Online PowerShell 访问状态,请运行以下命令:

Get-User -ResultSize unlimited | Format-Table -Auto DisplayName,EXOModuleEnabled

若要显示无权访问 Exchange Online PowerShell 的所有用户,请运行以下命令:

Get-User -ResultSize unlimited -Filter 'RemotePowerShellEnabled -eq $false'

若要显示有权访问 Exchange Online PowerShell 的所有用户,请运行以下命令:

Get-User -ResultSize unlimited -Filter 'RemotePowerShellEnabled -eq $true'