Enable-PSRemoting

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

语法

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

说明

此 cmdlet 仅在 Windows 平台上可用。

cmdlet Enable-PSRemoting 将计算机配置为接收使用 WS-Management 技术发送的 PowerShell 远程命令。 基于 WS-Management PowerShell 远程处理目前仅在 Windows 平台上受支持。

在 Windows Server 平台上默认启用 PowerShell 远程处理。 可以使用 Enable-PSRemoting 在其他受支持的 Windows 版本上启用 PowerShell 远程处理,并在它被禁用时重新启用远程处理。

只需在接收命令的每台计算机上运行此命令一次。 不必在仅发送命令的计算机上运行它。 由于配置启动侦听器以接受远程连接,因此最好仅在需要时才运行它。

通常不允许在计算机位于公用网络上时在 Windows 的客户端版本上启用 PowerShell 远程处理,但你可以使用 SkipNetworkProfileCheck 参数跳过此限制。 有关详细信息,请参阅 SkipNetworkProfileCheck 参数的说明。

一台计算机上可以并行存在多个 PowerShell 安装。 运行 Enable-PSRemoting 将为运行 cmdlet 的特定安装版本配置远程处理终结点。 因此,如果在运行 PowerShell 6.2 时运行 Enable-PSRemoting ,则将配置运行 PowerShell 6.2 的远程处理终结点。 如果在运行 PowerShell 7 预览版时运行 Enable-PSRemoting ,则将配置运行 PowerShell 7 预览版的远程处理终结点。

Enable-PSRemoting 根据需要创建两个远程处理终结点配置。 如果终结点配置已存在,则只需确保启用它们。 创建的配置相同,但名称不同。 一个将具有与托管会话的 PowerShell 版本对应的简单名称。 另一个配置名称包含有关托管会话的 PowerShell 版本的更多详细信息。 例如,在 PowerShell 6.2 中运行时Enable-PSRemoting,将获得两个名为 PowerShell.6、PowerShell.6.2.2 的配置终结点。 这允许使用简单名称 PowerShell.6 创建与最新 PowerShell 6 主机版本的连接。 或者,可以使用较长的名称 PowerShell.6.2.2 连接到特定的 PowerShell 主机版本。

若要使用新启用的远程处理终结点,在使用 、New-PSSession、 cmdlet 创建远程连接Invoke-Command时,Enter-PSSession必须使用 ConfigurationName 参数按名称指定它们。 有关详细信息,请参阅示例 4。

Enable-PSRemoting cmdlet 执行以下操作:

  • 运行 Set-WSManQuickConfig cmdlet,该 cmdlet 执行以下任务:
    • 启动 WinRM 服务。
    • 将 WinRM 服务的启动类型设置为“自动”。
    • 创建一个可接受任何 IP 地址上的请求的侦听器。
    • 为 WS-Management 通信启用防火墙例外。
    • 根据需要创建简单和长名称会话终结点配置。
    • 启用所有会话配置。
    • 将所有会话配置的安全描述符更改为允许远程访问。
  • 重新启动 WinRM 服务以使上述更改生效。

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

注意

此 cmdlet 不会影响Windows PowerShell创建的远程终结点配置。 它仅影响使用 PowerShell 版本 6 及更高版本创建的终结点。 若要启用和禁用由 Windows PowerShell 托管的 PowerShell 远程处理终结点,请从Windows PowerShell会话中运行 Enable-PSRemoting cmdlet。

示例

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

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

Enable-PSRemoting

WARNING: PowerShell remoting has been enabled only for PowerShell Core configurations and does not
affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect
all PowerShell remoting configurations.

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

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

Enable-PSRemoting -Force

WARNING: PowerShell remoting has been enabled only for PowerShell Core configurations and does not
affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect
all PowerShell remoting configurations.

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

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

Get-NetFirewallRule -Name 'WINRM*' | Select-Object 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 操作系统的服务器版本,后者默认允许从同一本地子网中的公用网络进行远程访问。

Set-NetFirewallRuleNetSecurity 模块中的 cmdlet 添加了一个防火墙规则,该规则允许从任何远程位置从公用网络进行远程访问。 这包括不同子网中的位置。

示例 4:Create新启用的终结点配置的远程会话

此示例演示如何在计算机上启用 PowerShell 远程处理、查找配置的终结点名称,以及如何创建与其中一个终结点的远程会话。

第一个命令在计算机上启用 PowerShell 远程处理。

第二个命令列出终结点配置。

第三个命令创建与同一台计算机的远程 PowerShell 会话,并按名称指定 PowerShell.6 终结点。 远程会话将使用最新的 PowerShell 6 版本 (6.2.2) 托管。

最后一个 $PSVersionTable 命令访问远程会话中的 变量以显示托管会话的 PowerShell 版本。

Enable-PSRemoting -Force

Get-PSSessionConfiguration

$session = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.6

Invoke-Command -Session $session -ScriptBlock { $PSVersionTable }

WARNING: PowerShell remoting has been enabled only for PowerShell Core configurations and does not
affect Windows PowerShell remoting configurations. Run this cmdlet in Windows PowerShell to affect
all PowerShell remoting configurations.

Name          : PowerShell.6
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed,
                BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.6.2.2
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed,
                BUILTIN\Remote Management Users AccessAllowed

Name                           Value
----                           -----
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSEdition                      Core
PSRemotingProtocolVersion      2.3
Platform                       Win32NT
SerializationVersion           1.1.0.1
GitCommitId                    6.2.2
WSManStackVersion              3.0
PSVersion                      6.2.2
OS                             Microsoft Windows 10.0.18363

注意

防火墙规则的名称可能因 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 操作系统的服务器版本,默认情况下,该操作系统具有公用网络的本地子网防火墙规则。 如果在服务器版本上禁用了本地子网防火墙规则, Enable-PSRemoting 请重新启用它,而不考虑此参数的值。

若要删除本地子网限制并启用从公用网络上的所有位置进行远程访问,请使用 Set-NetFirewallRuleNetSecurity 模块中的 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 返回描述其结果的字符串。

备注

此 cmdlet 仅在 Windows 平台上可用。

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

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

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

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

Enable-PSRemoting 删除 Deny_AllNetwork_Deny_All 设置。 这提供对保留供本地使用的会话配置的远程访问。