运行远程命令
可以使用单个 PowerShell 命令在一台或数百台计算机上运行命令。 Windows PowerShell 使用各种技术(包括 WMI、RPC 和 WS-Management)支持远程计算。
PowerShell 支持 WMI、WS-Management 和 SSH 远程处理。 在 PowerShell 7 及更高版本中,RPC 仅在 Windows 上受支持。
有关在 PowerShell 中进行远程处理的详细信息,请参阅以下文章:
无需配置的 Windows PowerShell 远程处理
许多 Windows PowerShell cmdlet 都具有 ComputerName 参数,此参数可使你在一台或多台远程计算机上收集数据和更改设置。 这些 cmdlet 使用不同的通信协议,无需进行任何特殊配置即可在所有 Windows 操作系统上工作。
这些 cmdlet 包括:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
通常情况下,支持无需特殊配置的远程处理的 cmdlet 具有 ComputerName 参数,但不具有 Session 参数。 若要在会话中查找这些 cmdlet,请键入:
Get-Command | Where-Object {
$_.Parameters.Keys -contains "ComputerName" -and
$_.Parameters.Keys -notcontains "Session"
}
Windows PowerShell 远程功能
使用 WS-Management 协议,Windows PowerShell 远程处理使你可以在一台或多台远程计算机上运行任何 Windows PowerShell 命令。 你可以建立持久连接、启动交互会话并在远程计算机上运行脚本。
若要使用 Windows PowerShell 远程处理,必须配置远程计算机以进行远程管理。 有关详细信息(包括说明),请参阅关于远程要求。
一旦配置了 Windows PowerShell 远程处理,就会有许多远程处理策略可供你使用。 本文只列出了其中的几个策略。 有关详细信息,请参阅关于远程。
启动交互式会话
若要使用单台远程计算机启动交互会话,请使用 Enter-PSSession cmdlet。 例如,若要使用 Server01 远程计算器启动交互会话,请键入:
Enter-PSSession Server01
命令提示符更改为显示远程计算机的名称。 你在提示符中键入的任何命令都将在远程计算机上运行,并且结果将显示在本地计算机上。
若要结束交互会话,请键入:
Exit-PSSession
有关 Enter-PSSession
和 Exit-PSSession
cmdlet 的详细信息,请参阅:
运行远程命令
若要在一台或多台计算机上运行一个命令,请使用 Invoke-Command cmdlet。 例如,若要在 Server01 和 Server02 远程计算机上运行 Get-UICulture 命令,请键入:
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {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 的 FilePath 参数。 该脚本必须在你的本地计算机上或可由其访问。 结果将返回到你的本地计算机。
例如,以下命令会在名为 Server01 和 Server02 的远程计算机上运行 DiskCollect.ps1
脚本。
Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1
建立持久连接
使用 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 "NT AUTHORITY\SYSTEM"}}
高级远程处理
PowerShell 包括的 cmdlet 可支持你执行以下操作:
- 从本地和远程端配置和创建远程会话
- 创建自定义和受限会话
- 从实际在远程会话上隐式运行的远程会话导入命令
- 配置远程会话的安全性
Windows 上的 PowerShell 包括 WSMan 提供程序。 提供程序创建 WSMAN:
驱动器,允许你在本地计算机和远程计算机上的配置设置层次结构之间导航。
有关 WSMan 提供程序的详细信息,请参阅 WSMan 提供程序和关于 WS-Management Cmdlet,或在 Windows PowerShell 控制台中键入 Get-Help wsman
。
有关详细信息,请参阅:
有关远程处理错误的帮助,请参阅 about_Remote_Troubleshooting。