运行远程命令Running Remote Commands

本文内容

可以使用单个 PowerShell 命令在一台或数百台计算机上运行命令。Windows PowerShell 通过使用各种技术(包括 WMI、RPC 和 WS-Management)支持远程计算。

PowerShell Core 支持 WMI、WS-Management 和 SSH 远程处理。不再支持 RPC。

有关在 PowerShell Core 中进行远程处理的详细信息,请参阅以下文章:

无需配置即可进行 Windows PowerShell 远程处理Windows PowerShell Remoting Without Configuration

许多 Windows PowerShell cmdlet 都具有 ComputerName 参数,此参数可使你在一台或多台远程计算机上收集数据和更改设置。这些 cmdlet 使用不同的通信协议,无需进行任何特殊配置即可在所有 Windows 操作系统上工作。

这些 cmdlet 包括:

  1. Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

Windows PowerShell 远程处理Windows PowerShell Remoting

使用 WS-Management 协议,Windows PowerShell 远程处理使你可以在一台或多台远程计算机上运行任何 Windows PowerShell 命令。你可以建立持久连接、启动交互会话并在远程计算机上运行脚本。

若要使用 Windows PowerShell 远程处理,必须配置远程计算机以进行远程管理。有关详细信息(包括说明),请参阅关于远程要求

一旦配置了 Windows PowerShell 远程处理,就会有许多远程处理策略可供你使用。本文只列出了其中的几个策略。有关详细信息,请参阅关于远程

启动交互会话Start an Interactive Session

若要使用单台远程计算机启动交互会话,请使用 Enter-PSSession cmdlet。例如,若要使用 Server01 远程计算器启动交互会话,请键入:

  1. Enter-PSSession Server01

命令提示符更改为显示远程计算机的名称。你在提示符中键入的任何命令都将在远程计算机上运行,并且结果将显示在本地计算机上。

若要结束交互会话,请键入:

  1. Exit-PSSession

有关 Enter-PSSession 和 Exit-PSSession cmdlet 的详细信息,请参阅:

运行远程命令Run a Remote Command

若要在一台或多台计算机上运行一个命令,请使用 Invoke-Command cmdlet。例如,若要在 Server01 和 Server02 远程计算机上运行 Get-UICulture 命令,请键入:

  1. Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}

输出将返回到你的计算机。

  1. LCID Name DisplayName PSComputerName
  2. ---- ---- ----------- --------------
  3. 1033 en-US English (United States) server01.corp.fabrikam.com
  4. 1033 en-US English (United States) server02.corp.fabrikam.com

运行脚本Run a Script

若要在一台或多台远程计算机上运行脚本,请使用 Invoke-Command cmdlet 的 FilePath 参数。该脚本必须在你的本地计算机上或可由其访问。结果将返回到你的本地计算机。

例如,以下命令在远程计算机 Server01 和 Server02 上运行 DiskCollect.ps1 脚本。

  1. Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1

建立持久连接Establish a Persistent Connection

使用 New-PSSession cmdlet 在远程计算机上创建一个持久会话。以下示例在 Server01 和 Server02 上创建远程会话。会话对象存储在 $s 变量中。

  1. $s = New-PSSession -ComputerName Server01, Server02

建立会话后,你可以在这些会话中运行任何命令。此外,由于会话是持久的,因此你可以从一个命令收集数据,并在另一个命令中使用它。

例如,下面的命令在 $s 变量中的会话中运行 Get-Hotfix 命令,并且它将结果保存在 $h 变量中。将在 $s 中的每个会话中创建 $h 变量,但它不会存在于本地会话中。

  1. Invoke-Command -Session $s {$h = Get-HotFix}

现在,可以将 $h 变量中的数据与同一会话中的其他命令一起使用。结果将显示在本地计算机上。例如:

  1. Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NTAUTHORITY\SYSTEM"}}

高级远程处理Advanced Remoting

Windows PowerShell 远程管理就在此处开始。通过使用随 Windows PowerShell 一起安装的 cmdlet,你可以从本地和远程端点建立和配置远程会话、创建自定义和受限制的会话、允许用户从实际在远程会话上隐式运行的远程会话中导入命令、配置远程会话的安全性等。

Windows PowerShell 包含一个 WSMan 提供程序。提供程序创建 WSMAN: 驱动器,允许你在本地计算机和远程计算机上的配置设置层次结构之间导航。

有关 WSMan 提供程序的详细信息,请参阅 WSMan 提供程序关于 WS-Management Cmdlet,或在 Windows PowerShell 控制台中键入 Get-Help wsman

有关更多信息,请参阅:

另请参阅See Also