Enable-PSRemoting

将计算机配置为接收远程命令。

语法

Enable-PSRemoting
      [-Force]
      [-SkipNetworkProfileCheck]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

说明

Enable-PSRemoting cmdlet 可将计算机配置为接收使用 WS-Management 技术发送的 PowerShell 远程命令。

默认情况下,在 Windows Server 2012 上启用 PowerShell 远程处理。 可以使用 Enable-PSRemoting 在其他受支持的 Windows 版本上启用 PowerShell 远程处理,并在 Windows Server 2012 上重新启用远程处理(如果它已禁用)。

仅需要在要接收命令的每台计算机上运行一次此命令。 不需要在仅发送命令的计算机上运行此命令。 由于该配置会启动侦听器,因此仅在需要时运行该命令是谨慎的做法。

从 PowerShell 3.0 开始,如果计算机位于公用网络,Enable-PSRemoting cmdlet 可以在 Windows 的客户端版本上启用 PowerShell 远程处理。 有关详细信息,请参阅 SkipNetworkProfileCheck 参数的说明。

Enable-PSRemoting cmdlet 执行以下操作:

  • 运行 Set-WSManQuickConfig cmdlet 以执行以下任务:
    • 启动 WinRM 服务。
    • 将 WinRM 服务的启动类型设置为“自动”。
    • 创建一个可接受任何 IP 地址上的请求的侦听器。
    • 为 WS-Management 通信启用防火墙例外。
    • 注册 Microsoft.PowerShellMicrosoft.PowerShell.Workflow 会话配置(如果尚未注册)。
    • 在 64 位计算机上注册 Microsoft.PowerShell32 会话配置(如果尚未注册)。
    • 启用所有会话配置。
    • 将所有会话配置的安全描述符更改为允许远程访问。
  • 重新启动 WinRM 服务以使上述更改生效。

若要在 Windows 平台上运行此 cmdlet,请使用“以管理员身份运行”选项启动 PowerShell。 这不适用于 Linux 或 MacOS 版本的 PowerShell。

注意

在同时具有 PowerShell 3.0 和 PowerShell 2.0 的系统上,不使用 PowerShell 2.0 运行 Enable-PSRemotingDisable-PSRemoting cmdlet。 这些命令可能看起来是成功的,但并未正确配置远程处理。 远程命令以及之后启用和禁用远程访问的尝试都很可能会失败。

示例

示例 1:将计算机配置为接收远程命令

此命令将计算机配置为接收远程命令。

Enable-PSRemoting

示例 2:将计算机配置为在不显示确认提示的情况下接收远程命令

此命令将计算机配置为接收远程命令。 Force 参数禁止显示用户提示。

Enable-PSRemoting -Force

示例 3:允许对客户端进行远程访问

此示例演示如何在客户端版本的 Windows 操作系统上允许来自公用网络的远程访问。 不同版本 Windows 上的防火墙规则名称可能有所不同。 使用 Get-NetFirewallRule 查看规则列表。 在启用防火墙规则之前,请查看规则中的安全设置,以验证配置是否适合你的环境。

Get-NetFirewallRule -Name 'WINRM*' | Select-Object -Property Name

Name
----
WINRM-HTTP-In-TCP-NoScope
WINRM-HTTP-In-TCP
WINRM-HTTP-Compat-In-TCP-NoScope
WINRM-HTTP-Compat-In-TCP

Enable-PSRemoting -SkipNetworkProfileCheck -Force
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any

默认情况下,Enable-PSRemoting 会创建相应的网络规则来允许来自专用网络和域网络的远程访问。 该命令使用 SkipNetworkProfileCheck 参数允许来自相同本地子网的公用网络的远程访问。 该命令指定 Force 参数来禁止显示确认消息。

SkipNetworkProfileCheck 参数不会影响服务器版本的 Windows 操作系统,默认情况下,该版本的 Windows 操作系统允许来自相同本地子网的公用网络的远程访问。

NetSecurity 模块中的 Set-NetFirewallRule cmdlet 可添加相应的防火墙规则来允许来自任何远程位置的公用网络的远程访问。 这包括不同子网中的位置。

注意

防火墙规则的名称可能因 Windows 版本而异。 使用 Get-NetFirewallRule cmdlet 列出系统上的规则的名称。

参数

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

强制运行命令而不要求用户确认。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipNetworkProfileCheck

指示当计算机在公用网络上时,此 cmdlet 在客户端版本的 Windows 操作系统上启用远程处理。 此参数只允许为公用网络启用防火墙规则,该规则只允许远程访问同一本地子网中的计算机。

此参数不会影响服务器版本的 Windows 操作系统,默认情况下,该版本的 Windows 操作系统设有针对公用网络的本地子网防火墙规则。 如果本地子网防火墙规则在服务器版本上处于禁用状态,Enable-PSRemoting 会将其重新启用,而不考虑此参数的值。

若要删除本地子网限制并启用从公用网络上的所有位置进行远程访问,请使用 NetSecurity 模块中的 Set-NetFirewallRule cmdlet。

此参数是在 PowerShell 3.0 中引入的。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

None

不能通过管道将对象传递给此 cmdlet。

输出

String

此 cmdlet 返回描述其结果的字符串。

备注

在 PowerShell 3.0 中,Enable-PSRemoting 为 WS-Management 通信创建以下防火墙例外。

在服务器版本的 Windows 操作系统上,Enable-PSRemoting 为专用网络和域网络创建防火墙规则以允许远程访问,并为公用网络创建防火墙规则,以仅允许从相同本地子网中的计算机进行远程访问。

在客户端版本的 Windows 操作系统上,PowerShell 3.0 中的 Enable-PSRemoting 为允许不受限制远程访问的专用和域网络创建防火墙规则。 若要为公用网络创建防火墙规则,允许来自相同本地子网的远程访问,请使用 SkipNetworkProfileCheck 参数。

在客户端或服务器版本的 Windows 操作系统上,若要为公用网络创建相应的防火墙规则来删除本地子网限制并允许远程访问,请使用 NetSecurity 模块中的 Set-NetFirewallRule cmdlet 来运行以下命令:Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

在 PowerShell 2.0 中,Enable-PSRemoting 为 WS-Management 通信创建以下防火墙例外。

在服务器版本的 Windows 操作系统上,它将为所有网络创建防火墙规则,以允许远程访问。

在客户端版本的 Windows 操作系统上,PowerShell 2.0 中的 Enable-PSRemoting 仅为域和专用网络位置创建防火墙例外。 为了尽量降低安全风险,Enable-PSRemoting 将不会在客户端版本的 Windows 上为公用网络创建防火墙规则。 如果当前网络位置为公用,则 Enable-PSRemoting 将返回以下消息:无法检查防火墙的状态。

从 PowerShell 3.0 开始,Enable-PSRemoting 通过将所有会话配置的 Enabled 属性值设置为 $True 来启用所有会话配置。

在 PowerShell 2.0 中,Enable-PSRemoting 从会话配置的安全描述符中删除了 Deny_All 设置。 在 PowerShell 3.0 中,Enable-PSRemoting 删除了 Deny_AllNetwork_Deny_All 设置。 这提供对保留供本地使用的会话配置的远程访问。