Enable-PSRemoting

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

语法

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

说明

此 cmdlet 仅在 Windows 平台上可用。

Enable-PSRemoting cmdlet 可将计算机配置为接收使用 WS-Management 技术发送的 PowerShell 远程命令。 基于 WS 管理的 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.6PowerShell.6.2.2 的配置的终结点。 这样可使用简单名称 PowerShell.6 创建与最新 PowerShell 6 主机版本的连接。 也可以使用较长的名称 PowerShell.6.2.2 连接到特定的 PowerShell 主机版本。

若要使用新启用的远程处理终结点,需要在使用 Invoke-CommandNew-PSSessionEnter-PSSession cmdlet 创建远程连接时使用 ConfigurationName 参数指定相应的名称。 有关详细信息,请参阅示例 4。

Enable-PSRemoting cmdlet 执行以下操作:

  • 运行 Set-WSManQuickConfig 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 操作系统允许来自相同本地子网的公用网络的远程访问。

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

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

此示例演示如何在计算机上启用 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 会将其重新启用,而不考虑此参数的值。

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

备注

此 cmdlet 仅在 Windows 平台上可用。

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

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

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

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

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