控制对 Exchange 服务器的远程 PowerShell 访问

Microsoft Exchange 中的远程 PowerShell 允许从内部网络或 Internet 上的远程计算机管理 Exchange 组织。 可以禁用或启用用户使用远程 PowerShell 和 Exchange 命令行管理程序连接到 Exchange 服务器的功能。 有关远程 PowerShell 的详细信息,请参阅 Exchange Server PowerShell (Exchange Management Shell)

有关与远程 PowerShell 相关的其他管理任务,请参阅使用远程 PowerShell 连接到 Exchange 服务器

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

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

  • 默认情况下,所有用户帐户都有权访问远程 PowerShell。 不过,若要实际使用远程 PowerShell 连接到 Exchange 服务器,用户必须是管理角色组的成员,或者直接分配有能够让用户运行 Exchange cmdlet 的管理角色。 有关角色组和管理角色的详细信息,请参阅Exchange Server权限

    重要

    在匆忙地在组织中快速全局禁用远程 PowerShell 访问时,请注意命令(例如 Get-User | Set-User -RemotePowerShellEnabled $false ,无需考虑需要远程 PowerShell 访问的管理员帐户、服务帐户或运行状况监视邮箱)。 使用本文中的过程有选择地删除远程 PowerShell 访问,或者通过在全局删除命令中使用以下语法保留需要它的用户的访问权限: Get-User | Where-Object {$_.UserPrincipalName -ne 'admin1@contoso.com' -and $_.UserPrincipalName -ne 'admin2@contoso.com'...} | Set-User -RemotePowerShellEnabled $false

    如果意外地将自己锁定在远程 PowerShell 访问之外,则需要使用否则极不推荐的方法直接加载 Exchange 命令行管理单元 (Add-PSSnapIn Microsoft.Exchange.Management.PowerShell.SnapIn) 来授予自己访问权限。 最大程度地减少使用此方法的时间和更改。 修复一个帐户并打开 Exchange 命令行管理程序进行任何其他更改。

  • 只能使用 PowerShell 来执行这些过程。 若要了解如何在本地 Exchange 组织中打开 Exchange 命令行管理程序,请参阅 Open the Exchange Management Shell

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

  • 你必须先获得权限,然后才能执行此过程或多个过程。 若要查看所需的权限,请参阅 Exchange 基础结构和 PowerShell 权限 一文中的“远程 PowerShell”条目。

  • 如果使用第三方工具来自定义用户的电子邮件地址,则需要在执行本文中的过程之前禁用受影响用户的电子邮件地址策略。 否则, Set-User 命令会更改用户的电子邮件地址,以匹配适用的电子邮件地址策略。 若要对用户禁用电子邮件地址策略,请在 Set-Mailbox cmdlet 上将 EmailAddressPolicyEnabled 参数的值设置为 $false。

提示

是否有任何疑问? 在Exchange Server论坛中寻求帮助。

查看用户的远程 PowerShell 访问

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

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

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

Get-User -ResultSize unlimited | Format-Table Name,DisplayName,RemotePowerShellEnabled -AutoSize

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

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

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

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

使用 Exchange 命令行管理程序 启用或禁用用户对远程 PowerShell 的访问权限

此示例禁用名为 Therese Lindqvist 的用户的远程 PowerShell 访问。

Set-User "Therese Lindqvist" -RemotePowerShellEnabled $false

此示例启用了名为“Sirirat Kitjakarn”的用户对远程 PowerShell 的访问权限。

Set-User "Sirirat Kitjakarn" -RemotePowerShellEnabled $true

使用 Exchange 命令行管理程序为许多用户禁用远程 PowerShell 访问

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

  • 基于现有属性筛选用户:此方法假定目标用户帐户都共享唯一的可筛选属性。 某些特性(如职务、部门、地址信息和电话号码)仅在您使用 Get-User cmdlet 时可见。 其他特性(如 CustomAttribute1-15)仅在您使用 Get-Mailbox cmdlet 时可见。

  • 使用特定用户列表:生成特定用户列表后,可以使用该列表禁用他们对远程 PowerShell 的访问。

基于现有特性筛选用户

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

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

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

此示例删除其 Title 属性包含值“Sales Associate”的所有用户对远程 PowerShell 的访问权限。

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

$DSA | foreach {Set-User -Identity $_ -RemotePowerShellEnabled $false}

使用特定用户的列表

若要为特定用户列表禁用对远程 PowerShell 的访问,请使用以下语法:

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

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

此示例使用文本文件 C:\My Documents\NoPowerShell.txt 按用户主体名称 (UPN) 标识用户。 文本文件必须在每行中包含一个 UPN,如下所示:

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

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

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

$NPS | foreach {Set-User -Identity $_ -RemotePowerShellEnabled $false}