Exchange Online PowerShell 是一个管理界面,使你能够从命令行管理 Microsoft 365 组织的Exchange Online部分 (包括针对所有云邮箱的许多默认电子邮件保护以及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权限:组织管理或收件人管理角色组中的成员身份。
- 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 语法信息。
为用户启用或禁用远程 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'