可以使用一个 Windows PowerShell 命令在一台或成百上千台计算机上运行命令。Windows PowerShell 使用包括 WMI、RPC 和 WS-Management 在内的各种技术来支持远程计算。

远程处理(无需进行配置)

许多 Windows PowerShell cmdlet 都有一个 ComputerName 参数,该参数允许您在一台或多台远程计算机上收集数据并更改设置。这些 cmdlet 使用各种各样的通信技术,其中许多不需要进行任何专门配置就可以在 Windows PowerShell 支持的所有 Windows 操作系统上工作。

其中包括以下 cmdlet:

通常,无需专门配置就支持远程处理的 cmdlet 有一个 ComputerName 参数,但没有 Session 参数。若要查找会话中的这些 cmdlet,请键入:

get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

Windows PowerShell 远程处理

Windows PowerShell 远程处理使用 WS-Management 协议,允许您在一台或多台远程计算机上运行任何 Windows PowerShell 命令。通过 Windows PowerShell 远程处理,您可以建立持续性连接,开始 1:1 交互式会话并在多台计算机上运行脚本。

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

配置了 Windows PowerShell 远程处理后,有多种远程处理策略可供您使用。本文档的其余部分仅列出了一小部分远程处理策略。有关详细信息,请参阅 about_Remoteabout_Remote_FAQ

开始交互式会话

若要与一台远程计算机开始交互式会话,请使用 Enter-PSSession cmdlet。例如,若要与远程计算机 Server01 开始交互式会话,请键入:

enter-pssession Server01

命令提示符更改以显示您已连接到的计算机的名称。之后,您在提示符下键入的所有命令都在远程计算机上运行,结果显示在本地计算机上。

若要终止交互式会话,请键入:

exit-pssession

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

运行远程命令

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

invoke-command -computername Server01, Server02 {get-UICulture}

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

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

有关 Invoke-Command cmdlet 的详细信息,请参阅 Invoke-Command

运行脚本

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

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

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

有关 Invoke-Command cmdlet 的详细信息,请参阅 Invoke-Command

建立持续性连接

若要运行共享数据的一系列相关命令,请在远程计算机上创建一个会话,然后使用 Invoke-Command cmdlet 在您创建的会话中运行命令。若要创建远程会话,请使用 New-PSSession cmdlet。

例如,以下命令在计算机 Server01 上创建一个远程会话,在计算机 Server02 上创建另一个远程会话。而且将会话对象保存在 $s 变量中。

$s = new-pssession -computername Server01, Server02

现在已经建立了会话,您可以在其中运行任何命令。并且由于会话是持续性的,您可以收集一个命令中的数据,将其用在随后的命令中。

例如,以下命令在变量 $s 中的会话内运行 Get-Hotfix 命令,并将结果保存在 $h 变量中。在 $s 中的每个会话内都会创建变量 $h,但本地会话中没有该变量。

invoke-command -session $s {$h = get-hotfix}

现在,可以将变量 $h 中的数据用在随后的命令中,如下面的命令。结果将显示在本地计算机上。

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"

高级远程处理

此处的内容只是 Windows PowerShell 远程管理的入门。通过使用随 Windows PowerShell 一起安装的 cmdlet,您可以在本地终端和远程终端上建立和配置远程会话,创建自定义会话和受限会话,允许用户从远程会话中导入实际上在该远程会话中隐式运行的命令,以及配置远程会话的安全性等。

为了方便远程配置,Windows PowerShell 中包含了一个 WS-Management 提供程序。通过该提供程序创建的 WSMAN: 驱动器,您可以在本地计算机和远程计算机上的配置设置层次结构中导航。有关该 WS-Management 提供程序的详细信息,请参阅 WSMan Providerabout_WS-Management_Cmdlets,或者在 Windows PowerShell 控制台中键入“get-help wsman”。

有关详细信息,请参阅 about_Remote_FAQNew-PSSessionConfigurationImport-PSSession。有关远程处理错误的帮助,请参阅 about_Remote_Troubleshooting

另请参阅




目录