关于远程

简短说明

介绍如何在 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 管理的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 计算机上的 PSSession 中运行 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}

还可以在多个 PSSession 中运行命令。 以下命令在 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。

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

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

关键 字

about_Remoting

另请参阅

about_PSSessions

about_Remote_Disconnected_Sessions

about_Remote_Requirements

about_Remote_FAQ

about_Remote_TroubleShooting

about_Remote_Variables

Enter-PSSession

Invoke-Command

New-PSSession