启用或禁用对 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 RBAC:Exchange 管理员或全局管理员*角色的成员身份为用户提供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 Online 或 Exchange Online Protection。
为用户启用或禁用远程 PowerShell 访问
本示例禁用对用户 david@contoso.onmicrosoft.com
Exchange Online PowerShell 的访问。
Set-User -Identity david@contoso.onmicrosoft.com -EXOModuleEnabled $false
此示例允许访问用户 chris@contoso.onmicrosoft.com
Exchange 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'