当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何启用 PSRemoting(本地和远程)

作者:精品下载站 日期:2024-12-14 13:05:13 浏览:14 分类:玩电脑

如何启用 PSRemoting(本地和远程)


尽管在 Windows 上,PSRemoting 默认启用,但并非始终启用。如果您需要测试是否启用 PSRemoting 或在 Windows 上启用 PSRemoting,本教程适合您。

本教程将引导您通过多种不同的方式在运行 Windows 的本地和远程计算机上启用 PSRemoting。

让我们开始吧!

启用 PSRemoting 有很多作用

如果您第一次了解 PowerShell Remoting,您可能会认为启用只是一个命令。也许您看到了一些对 Enable-PSRemoting PowerShell cmdlet 的引用,并认为一旦运行它,它就会在某个地方发生一些翻转。你错了。

当您听说启用 PSRemoting 时,必须在后台执行许多任务才能实现这一点。由于 PowerShell Remoting 依赖于其他系统才能正常运行,因此它具有一些依赖性。

例如,在 Windows 上,当您运行不带参数的 Enable-PSRemoting cmdlet 时,它将执行以下所有任务:

  1. WinRM 服务已启动并设置为自动启动。
  2. 在默认 WinRM 端口 5985 上为 HTTP 流量创建侦听器。
  3. 启用 WS-Management 的防火墙例外。
  4. 向 WS-Management 注册 PowerShell 会话配置。
  5. 启用 PowerShell 会话配置。
  6. 设置 PowerShell 远程会话以允许远程访问。
  7. 重新启动 WinRM 服务器以应用所有更改。

您是否很高兴不必手动完成所有这些工作?如果 Enable-PSRemoting cmdlet 可以完成这一切,为什么要提到这一点呢?因为有时会出现某些问题无法正常工作的情况,您需要对发生的情况进行故障排除。

Windows 上的默认 PSRemoting 设置

由于 PSRemoting 诞生于 Windows,因此默认情况下启用它,但并非普遍启用,也不适用于所有 Windows 操作系统版本。

在所有 Windows 客户端操作系统上,PSRemoting 始终处于禁用状态。

在 Windows Server 上,PSRemoting 有时会启用,但并非始终启用,具体取决于 Windows 运行的网络配置文件。下面您将找到一个方便的表格,可帮助您确定您的 Windows 操作系统是否启用了 PSremoting。

Operating SystemNetwork ProfilePSRemotingWindows Server 2008 R2Domain/PrivateDisabledWindows Server 2008 R2PublicDisabledWindows Server 2012 & NewerDomain/PrivateEnabledWindows Server 2012 & NewerPublicEnabled within the same subnet

另一方面,Linux 则很简单。 PSRemoting 根本就不是一个东西!默认情况下甚至没有安装 PowerShell。如果您想在 Linux 上运行 PSRemoting,则必须对其进行设置。

说得够多了,让我们向您展示如何实际开始使用 PSRemoting!

先决条件

如果您打算按照本节中的示例进行操作,请确保您具备以下条件:

  • Windows Server 2008 R2 或更高版本的计算机
  • 本地管理员组中的本地或 Active Directory 域用户

本地启用 PSRemoting

启用 PSRemoting 最简单的方法之一是使用内置的 Enable-PSRemoting 命令。正如您在上面了解到的,此命令是配置许多不同服务以适应 PowerShell 远程处理的快捷方式。

使用 Enable-PSRemoting Cmdlet

当您在不带任何参数的情况下运行此命令时,它将根据您运行的操作系统采取不同的操作。在任何当前的 Windows 操作系统上,都会发生相同的基本步骤。 PSRemoting 已启用,WinRM HTTP 侦听器已创建,并且防火墙规则已启用。主要区别在于公共网络的处理方式。

在服务器操作系统(如 Windows Server 2019)上,公共网络的防火墙规则允许来自同一网络上其他设备的远程连接。在客户端操作系统(例如 Windows 10)上,您将收到一条错误消息,指出您是公共网络。

如果您不确定 Windows 在什么网络配置文件下运行,请运行以下命令:

Get-NetConnectionProfile

您应该只在受信任的网络上使用 PSRemoting,因为它本质上是运行一个 Web 服务器来侦听远程连接。

[玩转系统] 如何启用 PSRemoting(本地和远程)

如果您同意在除私有之外的网络配置文件上运行 PSRemoting,则可以使用 SkipNetworkProfileCheck 跳过网络配置文件检查范围。使用此参数将打开 Windows 防火墙上的 WinRM 端口。

Enable-PSRemoting -SkipNetworkProfileCheck

使用 SkipNetworkProfileCheck 参数将打开 Windows 防火墙,以便在当前网络配置文件上进行 PowerShell 远程处理,但仅允许来自同一子网上的计算机的远程连接。

可以与 Enable-PSRemoting 一起使用的两个参数协同工作。它们是-Force-Confirm 参数。您可以使用 -Force 跳过运行 Enable-PSRemoting 命令通常会出现的所有提示。您还可以使用 -Confirm:$false 来获得相同的结果。

使用 winrm Quickconfig 命令

在创建 Enable-PSRemoting cmdlet 之前,winrm Quickconfig 命令曾经是设置 PSRemoting 的流行方法,但它仍然占有一席之地。如果您仅运行 winrm Quickconfig,它将启用 WinRM 服务、创建 HTTP 侦听器并启用防火墙规则。这些都是 Enable-PSRemoting 已经完成的事情,但这不会将计算机设置为能够处理远程 PowerShell 会话。

winrm 命令派上用场的地方是设置 HTTPS 侦听器。虽然您可以手动执行此操作,但如果您有 HTTPS 侦听器的适当证书,则只需运行 winrm Quickconfig -transport:https 即可配置 HTTPS 侦听器和 HTTPS 防火墙规则。

远程启用 PSRemoting

到目前为止,您已经了解了可以通过在本地计算机上运行命令来启用 PSRemoting。这让我们陷入了先有鸡还是先有蛋的情况。 PSremoting 允许您在远程计算机上运行命令,但是如何在没有 PSRemoting 的情况下远程运行命令?

三种方式; PSexec 实用程序、WMI 和组策略。

使用 Psexec

PSExec 是一个方便的实用程序,允许您像 PSRemoting 一样运行远程命令。但是,PSexec 使用不同的通信方法,您可以利用它来发挥自己的优势!

借助 PSexec,您可以使用以下命令从本地计算机运行 Enable-PSRemoting。下面的命令调用 psexec 并连接到 ServerB 服务器。然后,它启动 PowerShell 进程并使用 -Force 开关执行 Enable-PSRemoting 命令以跳过通常的提示。

.\psexec.exe \ServerB -h -s powershell.exe Enable-PSRemoting -Force

此选项适用于需要在远程系统上启用 PSRemoting 的一次性实例,但对于必须在许多系统上启用 PSRemoting 并且需要下载 psexec 的情况则不太适用。

使用WMI

有时 PSexec 不起作用。许多安全软件都会阻止 psexec,但不用担心,您也有 WMI!

使用 PowerShell 和 Invoke-CimMethod cmdlet。使用 Invoke-CimMethod cmdlet,您可以指示 PowerShell 通过 DCOM 连接到远程计算机并调用方法。

幸运的是,WMI 有一个 Win32_Process 类,允许您调用进程。通过针对 Win32_Process 调用 Create 方法,Invoke-CimMethod 连接到远程计算机,调用 PowerShell 并运行 Enable-PSRemoting 如下所示。

下面的示例为会话连接创建一个哈希表,其中指定了服务器名称、凭据和协议。然后在下面的哈希表中,正在设置 Invoke-CimMethod 的参数。一旦运行这些,就会通过 DCOM 协议创建 CIM 会话,该协议启动 PowerShell 进程,然后运行 Enable-PSRemoting 命令。

$SessionArgs = @{
     ComputerName  = 'ServerB'
     Credential    = Get-Credential
     SessionOption = New-CimSessionOption -Protocol Dcom
 }
 $MethodArgs = @{
     ClassName     = 'Win32_Process'
     MethodName    = 'Create'
     CimSession    = New-CimSession @SessionArgs
     Arguments     = @{
         CommandLine = "powershell Start-Process powershell -ArgumentList 'Enable-PSRemoting -Force'"
     }
 }
 Invoke-CimMethod @MethodArgs

如果您在域环境中使用此命令,并且执行命令的用户在目标服务器上具有管理权限,则可以排除 Credential=Get-Credential 行。

使用组策略

最后,可以说是在各种计算机上启用 WinRM 的最佳选择是通过组策略。使用组策略时,您可以创建单个组策略对象并同时在数千台计算机上应用该策略。

所有计算机必须位于 Active Directory 域中才能使用组策略。

要使用组策略同时在多台计算机上启用 WinRM,您将需要设置三个不同的配置项:

  1. 启用 WinRM 服务。
  2. 打开 WinRm 的 Windows 防火墙端口。
  3. 创建 WinRM 侦听器并允许与其连接。

首先,通过 RDP 连接到域控制器,或者更好的是,在加入域的工作站上安装远程服务器管理员工具 (RSAT) 包。您现在应该可以使用组策略管理控制台 (GPMC)。

启用WinRM服务

要在所有目标计算机上启用 WinRM 服务:

  1. 打开 GPMC 并创建一个 GPO。在新 GPO 中,导航至计算机配置 —> Windows 设置 —> 安全设置 —> 系统服务
  2. 选择Windows 远程管理(WS-Management)
  3. 在配置面板中,选中定义此策略设置复选框。
  4. 选择自动单选按钮将 WinRm 服务设置为在启动时自动启动。
  5. 单击“确定”确认设置。

打开Windows防火墙端口

接下来,您需要在所有目标计算机上打开 WinRM 端口。仍在编辑上面创建的 GPO 时:

  1. 导航至计算机配置 —> Windows 设置 —> 安全设置 —> 具有高级安全性的Windows Defender 防火墙。

2. 单击新建入站规则以创建新的入站规则。

3. 在第一页上选择预定义,然后选择Windows 远程管理,如下所示。

[玩转系统] 如何启用 PSRemoting(本地和远程)

4. 在下一页上,选中域/专用网络规则复选框,除非您知道您的环境中使用公共网络并且需要允许来自它们的远程连接。

[玩转系统] 如何启用 PSRemoting(本地和远程)

5. 在下一页上保留默认值允许连接,然后单击“完成”以创建规则。

创建 WinRM 侦听器和筛选器列表

添加到 GPO 的最后一个配置项是创建 WinRM 侦听器广告,允许连接到该 WinRM 侦听器。此设置为 HTTP 创建 WinRM 侦听器,并允许从指定的 IP 或 IP 范围连接到它。

仍在编辑 WinRM GPO 时:

  1. 导航至计算机配置 —> 管理模板 —> Windows 组件 —> Windows 远程管理 (WinRM) —> WinRM 服务

2. 对于允许通过 WinRM 进行远程服务管理设置,选择启用

3. 在允许通过 WinRM 进行远程服务器管理设置下,为 IPv4 过滤器IPv6 过滤器提供星号 (*)如下所示。

请注意,如果您提前知道哪些主机将连接到所有目标计算机,则可以在每个过滤器列表中指定多个主机,并用逗号分隔。

[玩转系统] 如何启用 PSRemoting(本地和远程)

4. 单击确定确认最新的GPO 设置。

应用 GPO

此时,GPO 应该已创建并准备就绪。您现在必须执行的最后一个任务是将此 GPO 应用于您希望启用 WinRM 的所有目标计算机。在本教程中,您将不会学习如何将 GPO 分配给目标计算机。

如果您不知道如何将 GPO 分配给 Active Directory 中的一组计算机,您应该查看这篇文章。

下一步

在本教程中,您学习了如何以多种不同的方式启用 PSRemoting。如何启用 PSRemoting 在很大程度上取决于您的环境,我希望我已经在这里介绍了您的场景。

现在,利用您所学到的知识,走出去并开始在您的环境中使用 PSRemoting!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯