关于 Remote

简短说明

介绍如何在 Windows PowerShell 中运行远程命令。

详细说明

您可以使用临时或持久连接在单台计算机或多台计算机上运行远程命令。 还可以使用单个远程计算机启动交互式会话。

本主题提供了一系列示例来向您展示如何运行不同类型的远程命令。 尝试这些基本命令后,请阅读介绍这些命令中使用的每个 cmdlet 的帮助主题。 这些主题提供了详细信息,并说明了如何修改命令以满足您的需求。

注: 要使用 Windows PowerShell 远程处理,必须为本地计算机和远程计算机配置远程处理。 有关详细信息,请参阅 about_Remote_Requirements

如何启动交互式会话 (ENTER-PSSESSION)

运行远程命令的最简单方法是启动与远程计算机的交互式会话。

会话启动时,您键入的命令将在远程计算机上运行,就像您直接在远程计算机上键入这些命令一样。 每个交互式会话中只能连接到一台计算机。

若要启动交互式会话,请使用 Enter-PSSession cmdlet。 以下命令启动与 Server01 计算机的交互式会话:

Enter-PSSession Server01

命令提示符将更改以指示您已连接到 Server01 计算机。

Server01\PS>

现在,可以在 Server01 计算机上键入命令。

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

Exit-PSSession

有关更多信息,请参阅 Enter-PSSession。

如何使用具有 COMPUTERNAME 参数的 CMDLET 获取远程数据

多个 cmdlet 具有 ComputerName 参数,该参数允许您从远程计算机获取对象。

由于这些 cmdlet 不使用基于 WS-Management 的 Windows PowerShell 远程处理,因此您可以在运行 Windows PowerShell 的任何计算机上使用这些 cmdlet 的 ComputerName 参数。 不必为计算机配置 Windows PowerShell 远程处理,并且计算机不必满足远程处理的系统要求。

以下 cmdlet 具有 ComputerName 参数:

Clear-EventLog    Limit-EventLog
Get-Counter       New-EventLog
Get-EventLog      Remove-EventLog
Get-HotFix        Restart-Computer
Get-Process       Show-EventLog
Get-Service       Stop-Computer
Get-WinEvent      Test-Connection
Get-WmiObject     Write-EventLog

例如,下面的命令获取 Server01 远程计算机上的服务:

Get-Service -ComputerName Server01

通常,支持远程处理而无需特殊配置的 cmdlet 具有 ComputerName 参数,但没有 Session 参数。 若要在会话中查找这些 cmdlet,请键入:

Get-Command | Where-Object {
	$_.Parameters.Keys -contains 'ComputerName' -and
	$_.Parameters.Keys -notcontains 'Session'
}

如何运行远程命令

要在远程计算机上运行其他命令,请使用 Invoke-Command cmdlet。

若要运行单个命令或几个不相关的命令,请使用 Invoke-Command 的 ComputerName 参数指定远程计算机。 使用 ScriptBlock 参数指定命令。

例如,以下命令在 Server01 计算机上运行 Get-Culture 命令。

Invoke-Command -ComputerName Server01 -ScriptBlock {Get-Culture}

ComputerName 参数适用于在一台或多台计算机上运行单个命令或多个不相关的命令的情况。 要建立与远程计算机的持久连接,请使用 Session 参数。

如何创建持久连接 (PSSESSION)

当您使用 Invoke-Command cmdlet 的 ComputerName 参数时,Windows PowerShell 会为该命令建立连接。 然后,它会在命令完成时关闭连接。 命令中定义的任何变量或函数都将丢失。

若要创建与远程计算机的持久连接,请使用 New-PSSession cmdlet。 例如,以下命令在 Server01 和 Server02 计算机上创建 PSSession,然后将 PSSession 保存在 $s 变量中。

$s = New-PSSession -ComputerName Server01, Server02

如何在 PSSESSION 中运行命令

使用 PSSession,可以运行一系列远程命令,这些命令共享数据,例如函数、别名和变量的值。 要在 PSSession 中运行命令,请使用 Invoke-Command cmdlet 的 Session 参数。

例如,以下命令使用 Invoke-Command cmdlet 在 Server01 和 Server02 计算机上的 PSSessions 中运行 Get-Process 命令。 该命令将进程保存在每个 PSSession 的 $p 变量中。

Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}

由于 PSSession 使用持久连接,因此您可以在使用 $p 变量的同一 PSSession 中运行另一个命令。 以下命令对 $p 中保存的进程数进行计数。

Invoke-Command -Session $s -ScriptBlock {$p.count}

如何在多台计算机上运行远程命令

若要在多台计算机上运行远程命令,请在 Invoke-Command 的 ComputerName 参数值中键入所有计算机名称。 用逗号分隔名称。

例如,以下命令在三台计算机上运行 Get-Culture 命令:

Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}

还可以在多个 PSSessions 中运行命令。 以下命令在 Server01、Server02 和 Server03 计算机上创建 PSSession,然后在每个 PSSession 中运行 Get-Culture 命令。

$s = New-PSSession -ComputerName S1, S2, S3
Invoke-Command -Session $s -ScriptBlock {Get-Culture}

要包含计算机的本地计算机列表,请键入本地计算机的名称,键入点 (.) 或键入 “localhost”。

Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}

如何在远程计算机上运行脚本

要在远程计算机上运行本地脚本,请使用 Invoke-Command 的 FilePath 参数。

例如,以下命令在 S1 和 S2 计算机上运行 Sample.ps1 脚本:

Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1

脚本的结果返回到本地计算机。 您无需复制任何文件。

如何停止远程命令

若要中断命令,请按 Ctrl+C。 中断请求将传递到远程计算机,并在其中终止远程命令。

更多信息

  • 有关远程处理系统要求的信息,请参阅 about_Remote_Requirements

  • 有关设置远程输出格式的帮助,请参阅 about_Remote_Output

  • 有关远程处理的工作原理、如何管理远程数据、特殊配置、安全问题和其他常见问题的信息,请参阅 about_Remote_FAQ

  • 有关解决远程处理错误的帮助,请参阅 about_Remote_Troubleshooting。

  • 有关 PSSessions 和持久性连接的信息,请参阅 about_PSSessions

  • 有关 Windows PowerShell 后台作业的信息,请参阅 about_Jobs

关键字

about_Remoting

另请参阅

about_PSSessions

about_Remote_Disconnected_Sessions

关于远程要求

about_Remote_FAQ

about_Remote_TroubleShooting

关于远程变量

进入 PSSession

调用命令

新 - PSSession