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

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

作者:精品下载站 日期:2024-12-15 00:32:45 浏览:14 分类:玩电脑

Invoke-Command:如何远程运行 PowerShell 命令


在本指南中,您将了解如何使用 invoke-command 在远程计算机上执行 PowerShell 命令和脚本。

目录:

  • 调用命令要求
  • 组策略设置
  • 调用命令示例

让我们开始吧。

调用命令要求

在使用调用命令之前,远程计算机必须具备:

  1. Windows 远程管理服务必须正在运行
  2. 允许 Windows 防火墙中的 Windows 远程管理

在下一节中,我将介绍如何使用组策略为多台计算机启用此功能。

组策略设置

默认情况下,Windows 远程管理服务未运行,防火墙会阻止入站连接。您可以使用组策略来控制所有加入域的计算机上的这些设置。

第 1 步:创建新的 GPO

您可以将这些设置添加到现有 GPO 或创建新的 GPO。在此示例中,我将创建一个新的 GPO。

1. 创建或编辑现有的 GPO,我将我的 GPO 链接到域的根目录并将其命名为 PSRemoting。在域根目录处的链接会将此 GPO 应用于所有用户和计算机。您可以将其链接到 OU 以限制范围。

2. 编辑 GPO 并导航至计算机配置 -> Windows 设置 -> 安全设置 -> 系统服务

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

3. 选择Windows 远程管理(WS-Management)并将服务启动模式设置为自动。

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

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

5. 右键单击入站规则并选择“新建规则”

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

在规则类型屏幕上选择预定义并选择“Windows 远程管理”,然后单击“下一步”。

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

选择“域,私有”配置文件并取消选中公共配置文件。点击下一步

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

选择“允许连接”并单击完成

提示:出于安全原因,我建议仅允许特定授权的计算机远程使用 PowerShell 命令。您可以通过使用防火墙规则的范围设置来限制这一点。在远程 IP 地址部分列出您的计算机或您想要允许的任何其他计算机的 IP 地址。

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

这样就完成了 GPO 设置。

步骤 2:运行 gpupdate 或重新启动计算机

接下来,远程计算机需要刷新其策略以拉取新的 GPO。它们将每 90 分钟自行刷新一次,但要强制刷新,请在计算机上运行 gpupdate。这将启动 Windows 远程管理服务并在远程计算机上添加防火墙规则。

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

现在我将检查服务和防火墙。

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

该服务现已运行。

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

防火墙规则已添加。

调用命令示例

以下是使用调用命令的一些示例。

示例 1:获取远程计算机上的服务

scriptblock 参数指定要运行的 PowerShell 命令。

invoke-command -ComputerName pc1 -scriptblock {Get-Service} 

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

示例2:在多台计算机上获取服务

要在多台远程计算机上运行 PowerShell 命令,只需用逗号分隔它们即可。您可以使用主机名或 IP 地址。

invoke-command -ComputerName pc1, srv-vm1 -scriptblock {Get-Service} 

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

示例 3. 在远程计算机上运行脚本

此示例将在远程计算机 pc1 和 srv-vm1 上运行 getinfo.ps1 脚本。

Invoke-Command -FilePath c:\scripts\getinfo.ps1 -ComputerName pc1, srv-vm1

示例 4:在远程计算机上获取 Windows 版本

使用 systeminfo 命令从远程计算机获取 Windows 版本信息。

invoke-command -ComputerName pc1 -scriptblock {systeminfo} 

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

示例 5:从文本文件在所有计算机上运行命令

如果您有大量计算机,可以将它们放入文本文件中。例如,我在名为computers.txt 的文件中有一个计算机列表。

Invoke-Command -ComputerName (Get-Content c:\it\computers.txt) -scriptblock {systeminfo}

示例 6:设置凭据

如果计算机位于不同的安全上下文中,您可能需要指定凭据。

$Credential = Get-Credential
Invoke-Command -ComputerName pc1 -Credential $Credential -ScriptBlock { Get-service}

示例 7:从远程计算机获取事件日志

在此示例中,我将从远程计算机获取事件 ID 4624

invoke-command -ComputerName pc1 -scriptblock {Get-WinEvent @{logname='security';ID=4624} -MaxEvents 5}

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

示例 8:获取 PowerShell 版本

此示例将获取远程计算机上的 PowerShell 版本

Invoke-Command -ComputerName pc1, srv-vm1 -ScriptBlock {$PSVersionTable.PSVersion}

[玩转系统] Invoke-Command:如何远程运行 PowerShell 命令

示例 9:运行多个命令

在此示例中,我在远程计算机上运行 get-process 和 get-service。

Invoke-Command -ComputerName pc1 -ScriptBlock {(get-process), (get-service)}

希望上述示例能让您了解如何远程运行 PowerShell 命令。查看 Microsoft 调用命令文档以了解更多信息。

调用命令的替代方法是 psexec 命令。 PsExec 命令是一个轻量级实用程序,可让您在远程命令上执行进程,还可以让您启动程序并与控制台交互。

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

取消回复欢迎 发表评论:

关灯