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.6和 PowerShell.6.2.2。 这允许使用简单名称 PowerShell.6创建与最新 PowerShell 6 主机版本的连接。 也可以使用较长的名称 PowerShell.6.2.2 连接到特定的 PowerShell 主机版本。
若要使用新启用的远程处理终结点,需要在使用 Invoke-Command
、New-PSSession
、Enter-PSSession
cmdlet 创建远程连接时使用 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。
有关使用 PowerShell 远程处理的详细信息,请参阅以下文章:
示例
示例 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 操作系统的服务器版本,默认情况下允许从同一本地子网中的公用网络进行远程访问。
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 之前,提示你进行确认。
类型: | SwitchParameter |
别名: | cf |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Force
强制命令运行而不要求用户确认。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-SkipNetworkProfileCheck
指示当计算机在公用网络上时,此 cmdlet 在客户端版本的 Windows 操作系统上启用远程处理。 此参数为公共网络启用一条防火墙规则,该规则仅允许来自同一本地子网内计算机的远程访问。
此参数不会影响 Windows 操作系统的服务器版本,默认情况下,该操作系统具有公用网络的本地子网防火墙规则。 如果在服务器版本上禁用了本地子网防火墙规则,Enable-PSRemoting
重新启用它,而不考虑此参数的值。
若要删除本地子网限制并启用来自公共网络上所有位置的远程访问,请使用 NetSecurity 模块中的 Set-NetFirewallRule
cmdlet。
此参数是在 PowerShell 3.0 中引入的。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-WhatIf
显示 cmdlet 运行时会发生什么情况。 cmdlet 未运行。
类型: | SwitchParameter |
别名: | wi |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
None
不能通过管道将对象传递给此 cmdlet。
输出
此 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_All 和 Network_Deny_All 设置。 这提供对保留供本地使用的会话配置的远程访问。