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

[玩转系统] 远程 PowerShell 深入入门指南

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

远程 PowerShell 深入入门指南


您是否曾经想在舒适的工作站上在远程计算机上运行 PowerShell 命令?那么,使用 PowerShell 远程处理就可以做到。使用远程 PowerShell,您可以以可持续的方式在多个远程系统上运行命令和脚本。

听起来不错?继续阅读以了解如何通过 PowerShell 方式驯服这些远程计算机。

先决条件

本教程将是一个实践演示。如果您想继续操作,请确保您至少有三台装有 PowerShell 7 的计算机。其中一台是您的管理计算机,另外两台是远程计算机。

本教程将使用以下计算机。

  • 安装了 PowerShell 7 的 Windows 10 PC 作为管理计算机。您将从这台机器启动远程命令。
  • 安装了 PowerShell 7 的 Windows 10 电脑。该计算机将成为通过 WinRM 的远程 PowerShell 的端点。

    • 远程 Windows 计算机上具有本地管理员权限的用户帐户。本教程使用名为 ma 的用户帐户。
  • 启用 SSHD 的 Linux 计算机可通过 SSH 作为远程 PowerShell 端点。本教程使用 Fedora 35。

    • 用于在 Linux 计算机上执行远程命令的用户帐户。该帐户应具有 sudo 和 SSH 访问权限。本教程使用名为test的帐户。如果您的 Linux 计算机上没有用户帐户,请在此时创建一个用户帐户

通过 WinRM 在 Windows 上启用远程 PowerShell

当您安装 PowerShell 7 时,有一个启用 PowerShell 远程处理的选项,您可能已经启用了它。但是,可以肯定的是,请按照以下步骤启用远程 PowerShell。

1. 登录远程Windows 10 PC。

2. 以管理员身份打开 PowerShell。

3. 运行以下命令启用远程 PowerShell。

Enable-PSRemoting

该命令执行多项配置更改,您将在控制台上看到这些更改。

[玩转系统] 远程 PowerShell 深入入门指南

通过 SSH 在 Linux 上启用远程 PowerShell

WinRM 是 Windows 独有的,这意味着您无法使用它在 Linux 上启用远程 PowerShell。相反,您可以在 Linux 上通过 SSH 启用远程 PowerShell。假设您已经安装了 PowerShell,请按照以下步骤操作。

1. 登录到远程 Linux 系统并打开终端会话。

2. 在文本编辑器中打开 SSH 服务器配置文件。使用您选择的文本编辑器,例如 Gedit、Sublime 或 Nano。本示例使用 Gedit。

sudo nano /etc/ssh/sshd_config

3. 接下来,将以下行添加到文件中。此行创建一个托管 PowerShell 进程的 SSH 子系统。

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo

[玩转系统] 远程 PowerShell 深入入门指南

4. 关闭编辑器。

5. 最后,通过运行以下命令重新启动 SSH 服务器。

sudo systemctl restart sshd

在本地计算机上添加远程 PowerShell 可信主机

此时,您的远程计算机已准备好接收命令。但是,如果远程 PowerShell 主机不在受信任的主机列表中,您的管理计算机可能会拒绝连接。为了避免可能的远程处理问题,您必须将远程主机添加到受信任的主机中。

在管理计算机上以管理员身份打开 PowerShell。

运行以下 winrm 命令。此命令将您的远程 Windows (192.168.8.107) 和 Linux (192.168.8.171) 计算机添加到计算机的可信主机列表中。

winrm set winrm/config/client '@{TrustedHosts=" 192.168.8.171,192.168.8.107"}'

[玩转系统] 远程 PowerShell 深入入门指南

在远程计算机上运行命令

所有部分就位后,您将在本节中在远程计算机上执行命令。

1. 在管理计算机上打开一个新的 PowerShell 会话。

2. 现在,执行以下 Invoke-Command 命令,以用户 ma 的身份列出远程计算机上的前五个服务。要运行的命令出现在 ScriptBlock 开关的大括号之间,如下所示。

Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }

[玩转系统] 远程 PowerShell 深入入门指南

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

Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }

[玩转系统] 远程 PowerShell 深入入门指南

在远程计算机上执行脚本

您还可以使用 Invoke-Command cmdlet 在远程计算机上运行 PowerShell 脚本文件。但您无需指定 -ScriptBlock 参数,而是指定 -FilePath 参数,后跟脚本本地路径。

1. 首先,在本地计算机上创建一个名为 nametime.ps1 的 PowerShell 脚本文件。

2. 在您喜欢的脚本编辑器中打开脚本并添加以下代码。之后保存文件。

# nametime.ps1
hostname
Get-Date

[玩转系统] 远程 PowerShell 深入入门指南

3. 使用 -FilePath 参数执行 Invoke-command cmdlet。 -FilePath 应指向脚本文件。在此示例中,脚本文件位于同一工作目录中。

# Invoke the script on the remote PowerShell over WinRM
Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -FilePath .\nametime.ps1

# Invoke the script on the remote PowerShell over SSH
Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -FilePath .\nametime.ps1

[玩转系统] 远程 PowerShell 深入入门指南

交互式管理远程计算机

在上一节中,您了解了如何在远程计算机上运行单个命令。在本节中,您将学习如何打开交互式会话,以便可以在远程计算机上运行多个命令,就像在本地计算机上一样。

1. 执行 Enter-PSSession 命令以用户 ma 在位于 192.168.8.107 的计算机上启动远程会话。

Enter-PSSession -ComputerName 192.168.8.107 -Credential ma

在提示符下输入远程用户帐户密码 ma,如下所示。

[玩转系统] 远程 PowerShell 深入入门指南

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

[玩转系统] 远程 PowerShell 深入入门指南

3. 使用dir命令列出当前工作目录中的文件,如下所示。您可以在会话 dir 中执行任意数量的 PowerShell 命令

dir

该目录的内容应该显示在您的屏幕上,如下面的屏幕截图所示。

[玩转系统] 远程 PowerShell 深入入门指南

4. 管理完远程计算机后,执行下面的 Exit-PSSession cmdlet 退出会话。

Exit-PSSession

退出后,您应该返回到本地提示符,如下面的屏幕截图所示

[玩转系统] 远程 PowerShell 深入入门指南

断开和重新连接远程 PowerShell 会话

可以永久存储会话作为交互式会话或一次性命令的替代方案。存储会话使您能够在会话之间切换而不会丢失上下文。在本节中,您将学习创建和管理持久会话。

1. 运行 New-PSSession cmdlet,以用户 ma (-凭证)。将会话保存在变量 $var 中,如下所示。

$var = New-PSSession -ComputerName 192.168.8.107 -Credential ma

2、执行变量$var,查看其内容如下

$var

如下所示,您应该会看到一个会话对象,其 RemoteMachine ComputerTypeState 设置为 Opened

[玩转系统] 远程 PowerShell 深入入门指南

3. 运行Enter-PSSession命令进入$var中存储的会话。

Enter-PSSession $var

如果一切顺利,提示符将更改为远程提示符,没有任何进一步的输出,如下所示。

[玩转系统] 远程 PowerShell 深入入门指南

4. 在会话中创建变量$rem1。使用适合您的任何变量名称和标识符字符串。稍后您将使用此变量来确定您是否已连接到同一会话。

$rem1 = "same session"

5. 运行以下命令退出远程 PowerShell 会话。

Exit-PSSession

[玩转系统] 远程 PowerShell 深入入门指南

6. 重新建立远程 PowerShell 会话。

Enter-PSSession $var

7. 在远程会话提示符处执行 $rem1 变量(如下所示)以查看其值。

$rem1

在退出远程 PowerShell 会话之前,您应该会看到与之前设置的值相同的值,从而确认您已重新连接到同一会话。

[玩转系统] 远程 PowerShell 深入入门指南

8. 运行 Exit-PSSession 命令再次退出会话,如下所示。

Exit-PSSession

9. 最后,执行 Invoke-Command,并将 session 开关设置为 $var,以在同一远程会话中显示远程计算机的主机名。此方法是在同一会话中运行命令的另一种方法,无需手动连接、断开连接和重新连接到单个会话。

Invoke-Command -Session $var -ScriptBlock {hostname}

[玩转系统] 远程 PowerShell 深入入门指南

10. 运行 Remove-PSSession 以完全删除存储在 $var 中的会话。

Remove-PSSession $var

结论

恭喜!通过完成本教程,您已经了解了如何使用远程 PowerShell 管理 Windows 或 Linux 系统。本指南旨在让您入门。为什么不尝试通过远程会话在 Linux 上更深入地使用 PowerShell?

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

取消回复欢迎 发表评论:

关灯