Enable-PSRemoting

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

语法

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

说明

此 cmdlet 仅在 Windows 平台上可用。

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

在 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-preview 时运行 Enable-PSRemoting ,则会配置运行 PowerShell 7-preview 的远程处理终结点。

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

若要使用新启用的远程处理终结点,在使用 Invoke-CommandNew-PSSession、 cmdlet 创建远程连接时,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 -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 操作系统允许从同一本地子网中的公用网络进行远程访问。

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

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

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

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

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

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

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

Enable-PSRemoting -Force

Get-PSSessionConfiguration

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

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.7
PSVersion     : 7.3
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed,
                BUILTIN\Administrators AccessAllowed,
                BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.7.3.0
PSVersion     : 7.3
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 操作系统的服务器版本,默认情况下,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 设置。 这提供对保留供本地使用的会话配置的远程访问。