关于远程要求

简短说明

介绍在 PowerShell 中运行远程命令的系统要求和配置要求。

详细说明

本主题介绍在 PowerShell 中建立远程连接和运行远程命令的系统要求、用户要求和资源要求。 它还提供有关配置远程操作的说明。

注意:许多 cmdlet (包括 Get-Service、Get-Process、Get-WMIObject、Get-EventLog 和 Get-WinEvent cmdlet,) 使用 Microsoft .NET Framework 方法来检索对象,从远程计算机获取对象。 它们不使用 PowerShell 远程处理基础结构。 本文档中的要求不适用于这些 cmdlet。

若要查找具有 ComputerName 参数但不使用 PowerShell 远程处理的 cmdlet,请阅读 cmdlet 的 ComputerName 参数的说明。

系统要求

若要在 Windows PowerShell 3.0 上运行远程会话,本地计算机和远程计算机必须具有以下条件:

  • Windows PowerShell 3.0 或更高版本
  • Microsoft .NET Framework 4 或更高版本
  • Windows 远程管理 3.0

若要在 Windows PowerShell 2.0 上运行远程会话,本地计算机和远程计算机必须具有以下条件:

  • Windows PowerShell 2.0 或更高版本
  • Microsoft .NET Framework 2.0 或更高版本
  • Windows 远程管理 2.0

可以在运行 Windows PowerShell 2.0 和 Windows PowerShell 3.0 的计算机之间创建远程会话。 但是,仅当两台计算机都运行 Windows PowerShell 3.0 时,才可使用仅在 Windows PowerShell 3.0 上运行的功能(例如断开连接和重新连接到会话的功能)。

若要查找已安装版本的 PowerShell 的版本号,请使用$PSVersionTable自动变量。

Windows 远程管理 (WinRM) 3.0 和 Microsoft .NET Framework 4 包含在 windows 操作系统的 Windows 8、Windows Server 2012 和较新版本中。 WinRM 3.0 包含在适用于较旧操作系统的 Windows Management Framework 3.0 中。 如果计算机没有所需的 WinRM 版本或 Microsoft .NET Framework,则安装将失败。

用户权限

若要创建远程会话并运行远程命令,默认情况下,当前用户必须是远程计算机上的管理员组的成员或提供管理员凭据。 否则,该命令将失败。

(远程计算机或本地计算机上的远程会话) 的远程会话中创建会话和运行命令所需的权限由会话配置 (也称为“终结点”) 在会话连接到的远程计算机上建立。 具体而言,会话配置上的安全描述符确定谁有权访问会话配置,以及谁可以使用会话配置进行连接。

默认会话配置(Microsoft.PowerShell、Microsoft.PowerShell32 和 Microsoft.PowerShell.Workflow)上的安全描述符仅允许管理员组的成员访问。

如果当前用户无权使用会话配置,则运行命令 (使用临时会话) 或在远程计算机上创建持久会话的命令将失败。 用户可以使用创建会话的 cmdlet 的 ConfigurationName 参数来选择其他会话配置(如果可用)。

计算机上的管理员组的成员可以通过更改默认会话配置上的安全描述符以及使用不同的安全描述符创建新的会话配置来确定谁有权远程连接到计算机。

有关会话配置的详细信息,请参阅 about_Session_Configurations

WINDOWS 网络位置

从 Windows PowerShell 3.0 开始,Enable-PSRemoting cmdlet 可以在专用、域和公共网络上的 Windows 客户端和服务器版本上启用远程处理。

在具有专用和域网络的 Windows 的服务器版本上,Enable-PSRemoting cmdlet 会创建允许无限制远程访问的防火墙规则。 它还为公用网络创建防火墙规则,该规则仅允许从同一本地子网中的计算机进行远程访问。 默认情况下,此本地子网防火墙规则在公用网络上的服务器版本 Windows 上启用,但 Enable-PSRemoting 会重新应用该规则,以防它被更改或删除。

在具有专用和域网络的 Windows 客户端版本上,默认情况下,Enable-PSRemoting cmdlet 会创建允许无限制远程访问的防火墙规则。

若要在具有公用网络的 Windows 客户端版本上启用远程处理,请使用 Enable-PSRemoting cmdlet 的 SkipNetworkProfileCheck 参数。 它创建一个防火墙规则,该规则仅允许从同一本地子网中的计算机进行远程访问。

若要删除公用网络上的本地子网限制,并允许从 Windows 客户端和服务器版本上的所有位置进行远程访问,请使用 NetSecurity 模块中的 Set-NetFirewallRule cmdlet。 运行以下命令:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

在 Windows PowerShell 2.0 中,在 Windows 的服务器版本中,Enable-PSRemoting 创建允许在所有网络上进行远程访问的防火墙规则。

在 Windows PowerShell 2.0 中,在 Windows 的客户端版本中,Enable-PSRemoting 仅在专用和域网络上创建防火墙规则。 如果网络位置是公共的,则 Enable-PSRemoting 失败。

以管理员身份运行

以下远程处理操作需要管理员权限:

  • 建立与本地计算机的远程连接。 这通常称为“环回”方案。

  • 管理本地计算机上的会话配置。

  • 在本地计算机上查看和更改 WS-Management 设置。 这些是 WSMAN: 驱动器的 LocalHost 节点中的设置。

若要执行这些任务,必须使用“以管理员身份运行”选项启动 PowerShell,即使你是本地计算机上的管理员组的成员也是如此。

在 Windows 7 和 Windows Server 2008 R2 中,使用“以管理员身份运行”选项启动Windows PowerShell:

  1. 依次单击“开始”、“所有程序”、“附件”和Windows PowerShell文件夹。
  2. 右键单击Windows PowerShell,然后单击“以管理员身份运行”。

使用“以管理员身份运行”选项启动Windows PowerShell:

  1. 单击“开始”,单击“所有程序”,然后单击“Windows PowerShell”文件夹。
  2. 右键单击Windows PowerShell,然后单击“以管理员身份运行”。

“以管理员身份运行”选项在Windows PowerShell的其他 Windows 资源管理器条目(包括快捷方式)中也可用。 只需右键单击该项,然后单击“以管理员身份运行”。

从其他程序(如 Cmd.exe)开始Windows PowerShell时,请使用“以管理员身份运行”选项启动程序。

如何配置计算机进行远程处理

运行所有受支持的 Windows 版本的计算机可以在 PowerShell 中建立远程连接,并在不进行任何配置的情况下运行远程命令。 但是,若要接收连接,并允许用户创建本地和远程用户管理的 PowerShell 会话 (“PSSessions”) 并在本地计算机上运行命令,必须在计算机上启用 PowerShell 远程处理。

默认情况下,Windows Server 2012和较新版本的 Windows Server 启用 PowerShell 远程处理。 如果更改了设置,可以通过运行 Enable-PSRemoting cmdlet 来还原默认设置。

在所有其他受支持的 Windows 版本上,需要运行 Enable-PSRemoting cmdlet 才能启用 PowerShell 远程处理。

WinRM 服务支持 PowerShell 的远程处理功能,WinRM 服务是用于管理的 Web 服务 (WS-Management) 协议的 Microsoft 实现。 启用 PowerShell 远程处理时,可以更改 WS-Management 的默认配置,并添加允许用户连接到 WS-Management 的系统配置。

配置 PowerShell 以接收远程命令:

  1. 使用“以管理员身份运行”选项启动 PowerShell。
  2. 在命令提示符处,键入:Enable-PSRemoting

若要验证远程处理是否已正确配置,请运行测试命令,例如以下命令,以在本地计算机上创建远程会话。

New-PSSession

如果远程处理配置正确,该命令将在本地计算机上创建会话,并返回表示该会话的 对象。 输出应类似于以下示例输出:

Id Name        ComputerName    State    ConfigurationName
-- ----        ------------    -----    -----
1  Session1    localhost       Opened   Microsoft.PowerShell

如果命令失败,请参阅 about_Remote_Troubleshooting以获取帮助。

了解策略

远程工作时,将使用两个 PowerShell 实例,一个在本地计算机上,另一个在远程计算机上。 因此,你的工作会受到本地和远程计算机上的 Windows 策略和 PowerShell 策略的影响。

通常,在连接之前和建立连接时,本地计算机上的策略将生效。 使用连接时,远程计算机上的策略将生效。

Linux 和 macOS 上的基本身份验证限制

从 Linux 或 macOS 系统连接到 Windows 时,不支持通过 HTTP 进行基本身份验证。 通过在目标服务器上安装证书,可以通过 HTTPS 使用基本身份验证。 证书必须具有与主机名匹配的 CN 名称,不会过期或吊销。 自签名证书可用于测试目的。

有关更多详细信息 ,请参阅如何:为 HTTPS 配置 WINRM

以下命令从提升的命令提示符运行,将使用已安装的证书在 Windows 上配置 HTTPS 侦听器。

$hostinfo = '@{Hostname="<DNS_NAME>"; CertificateThumbprint="<THUMBPRINT>"}'
winrm create winrm/config/Listener?Address=*+Transport=HTTPS $hostinfo

在 Linux 或 macOS 端,选择“基本”进行身份验证,选择“-UseSSl”。

注意:基本身份验证不能与域帐户一起使用;需要本地帐户,并且该帐户必须位于管理员组中。

# The specified local user must have administrator rights on the target machine.
# Specify the unqualified username.
$cred = Get-Credential username
$session = New-PSSession -Computer <hostname> -Credential $cred `
  -Authentication Basic -UseSSL

通过 HTTPS 进行基本身份验证的替代方法是 Negotiate。 这会导致客户端和服务器之间的 NTLM 身份验证,并且有效负载通过 HTTP 进行加密。

下面演示了如何通过 New-PSSession 协商:

# The specified user must have administrator rights on the target machine.
$cred = Get-Credential username@hostname
$session = New-PSSession -Computer <hostname> -Credential $cred `
  -Authentication Negotiate

注意

Windows Server 需要一个附加的注册表设置,使除内置管理员之外的管理员能够使用 NTLM 进行连接。 请参阅远程身份验证中的协商身份验证下的 LocalAccountTokenFilterPolicy 注册表设置Connections

另请参阅

about_Remote

about_Remote_Variables

about_PSSessions

Invoke-Command

Enter-PSSession

New-PSSession