您曾经想过从您的工作站轻松运行远程计算机上的PowerShell命令吗?好吧,通过PowerShell远程您可以。使用远程PowerShell,您可以以可持续的方式在多个远程系统上运行命令和脚本。
听起来有趣吗?继续阅读以了解如何以PowerShell方式驾驭那些远程计算机。
先决条件
本教程将进行实际演示。如果您想跟着做,请确保您至少有三台安装了PowerShell 7的计算机。其中一台将是您的管理计算机,另外两台将是远程计算机。
本教程将使用以下计算机。
- A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
- A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
- A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
在Windows上通过WinRM启用远程PowerShell
安装PowerShell 7时,有一个选项可以启用PowerShell远程功能,您可能已经在那时启用了它。但为了确保,按照以下步骤启用远程PowerShell。
1. 登录到远程Windows 10 PC。
2. 以管理员身份打开PowerShell。
3. 运行以下命令以启用远程PowerShell。
该命令执行了几项配置更改,您将在控制台上看到。

在SSH上启用Linux上的远程PowerShell
WinRM专属于Windows,这意味着您无法使用它在Linux上启用远程PowerShell。相反,您可以在Linux上通过SSH启用远程PowerShell。假设您已经安装了PowerShell,请按照以下步骤操作。
1.登录到远程Linux系统并打开终端会话。
2.在文本编辑器中打开SSH服务器配置文件。使用您选择的文本编辑器,例如Gedit、Sublime或Nano。此示例使用Gedit。
3.接下来,在文件中添加以下行。此行创建了一个托管PowerShell进程的SSH子系统。

4.关闭编辑器。
5.最后,通过运行以下命令重新启动SSH服务器。
在本地机器上添加远程PowerShell受信任主机
此时,您的远程计算机已准备好接收命令。但是,如果远程PowerShell主机不在受信任主机列表上,则您的管理计算机可能会拒绝连接。为了避免可能的远程问题,您必须将远程主机添加到受信任主机列表中。
以管理员身份在管理计算机上打开PowerShell。
运行以下winrm
命令。此命令将您的远程Windows(192.168.8.107
)和Linux(192.168.8.171
)机器添加到计算机的可信主机列表中。

在远程计算机上运行命令
所有准备工作就绪后,您将在本节中执行远程计算机上的命令。
1. 在管理计算机上打开一个新的PowerShell会话。
2. 现在,执行以下Invoke-Command
命令,以列出用户ma
在远程计算机上的前五个服务。要运行的命令出现在ScriptBlock
开关的大括号之间,如下所示。

3. 要在远程Linux主机上执行相同操作,请改为运行以下命令。请注意,-HostName
替换了-ComputerName
,-UserName
替换了-ComputerName
。这些参数指示Invoke-Command
cmdlet目标是一个SSH主机。

在远程计算机上执行脚本
您还可以使用Invoke-Command
cmdlet在远程计算机上运行PowerShell脚本文件。但是,您将指定-FilePath
参数而不是指定-ScriptBlock
参数,后跟脚本本地路径。
1. 首先,在本地计算机上创建一个名为nametime.ps1
的PowerShell脚本文件。
2. 使用您喜欢的脚本编辑器打开脚本,并添加以下代码。然后保存该文件。

3. 使用 Invoke-Command
cmdlet,并使用 -FilePath
参数。 -FilePath
应指向脚本文件。在此示例中,脚本文件位于相同的工作目录。

以交互方式管理远程计算机
在前一节中,您了解了如何在远程计算机上运行单个命令。在本节中,您将学习如何打开一个交互式会话,以便您可以在远程计算机上运行多个命令,就像在本地一样。
1. 使用 Enter-PSSession
命令在位于 192.168.8.107
的机器上以用户 ma
的身份启动远程会话。
在提示符下输入远程用户帐户密码,如下所示,ma。

您将看到一个新的提示符,如下所示。方括号内的IP地址表示远程 PowerShell 主机。

3. 使用 dir
命令列出当前工作目录中的文件,如下所示。您可以在会话中执行任意数量的 PowerShell 命令 dir
目录内容应该显示在屏幕上,如下截图所示。

4. 使用 Exit-PSSession
cmdlet 退出会话,一旦完成远程计算机管理。
退出后,您应该返回到本地提示符,如下截图所示。

断开和重新连接远程 PowerShell 会话
可以将会话持久存储,作为交互式会话或一次性命令的替代选择。存储会话使您可以在不丢失上下文的情况下在会话之间切换。在本节中,您将学习创建和管理持久会话。
1. 运行 New-PSSession
cmdlet 在远程计算机 192.168.8.107
上,以用户 ma
的身份(-Credential
)创建一个会话。将会话保存在变量 $var
中,如下所示。
2. 执行变量 $var
,以查看其内容,如下所示。
如下所示,您应该看到一个具有 RemoteMachine ComputerType 和状态为 Opened 的会话对象。

3. 运行 Enter-PSSession
命令以进入存储在 $var
中的会话。
如果一切正常,提示符将更改为远程提示符,而不会有进一步的输出,如下所示。

4. 在会话内创建一个变量,$rem1
。使用任何适合您的变量名称和标识符字符串。稍后您将使用此变量来确定是否已连接到同一会话。
5. 运行下面的命令退出远程 PowerShell 会话。

6. 重新建立远程 PowerShell 会话。
7. 在远程会话提示符下执行变量 $rem1
,如下所示,以查看其值。
你应该在退出远程 PowerShell 会话之前看到之前设置的相同值,以确认你已重新连接到同一会话。

8. 运行Exit-PSSession
命令,再次退出会话,如下所示。
9. 最后,执行Invoke-Command
,将session
开关设置为$var
,以在同一远程会话中显示远程计算机的主机名。这种方法是在同一会话中运行命令的替代方式,而无需手动连接、断开连接和重新连接到单个会话。

10. 运行Remove-PSSession
以完全移除存储在$var
中的会话。
结论
恭喜!通过完成本教程,你已经学会如何使用远程 PowerShell 管理 Windows 或 Linux 系统。本指南旨在让你初窥门径。为什么不深入学习通过远程会话使用Linux 上的 PowerShell呢?