about_Remote

簡短描述

描述如何在PowerShell中執行遠端命令。

詳細描述

您可以使用暫時或持續性連線,在單一或多部遠端電腦上執行遠端命令。 您也可以使用單一遠端電腦啟動互動式工作階段。

注意

若要使用 PowerShell 遠端處理,您必須設定本機和遠端電腦進行遠端處理。 如需詳細資訊,請參閱 about_Remote_Requirements

如何啟動互動式會話

執行遠端命令最簡單的方式,就是使用遠端電腦啟動互動式會話。

當工作階段啟動時,您輸入的命令會在遠端電腦上執行,就像您直接在遠端電腦上輸入它們一樣。 每個互動式會話中只能連線到一部計算機。

若要啟動互動式會話,請使用 Enter-PSSession Cmdlet。 下列命令會啟動與 Server01 電腦的互動式工作階段:

Enter-PSSession Server01

PowerShell 會變更命令提示字元,以包含遠端電腦的名稱。

Server01\PS>

現在,您可以在 Server01 計算機上輸入命令。

若要結束互動式工作階段,請輸入:

Exit-PSSession

如需詳細資訊,請參閱 Enter-PSSession

如何使用具有 ComputerName 參數的 Cmdlet

數個 Cmdlet 都有 ComputerName 參數,可讓您從遠端電腦取得物件。

由於這些 Cmdlet 不會使用以 WS 管理為基礎的 PowerShell 遠端處理,因此您可以在任何執行 PowerShell 的電腦上,使用這些 Cmdlet 的 ComputerName 參數。 計算機不需要針對 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}

如何建立永續性連線

當您使用 Cmdlet 的 Invoke-Command ComputerName 參數時,PowerShell 會建立遠端電腦的暫時連線。 當命令完成時,它會關閉連接。 此暫存會話中定義的任何變數或函式都會遺失。

若要建立遠端電腦的持續性連線,請使用 New-PSSession Cmdlet。 例如,下列命令會在 Server01 和 Server02 計算機上建立 PSSession,然後將 PSSession 儲存在 變數中 $s

$s = New-PSSession -ComputerName Server01, Server02

如何在 PSSession 中執行命令

透過 PSSession,您可以執行一系列遠端命令來共享數據,例如函式、別名和變數的值。 若要在 PSSession 中執行命令,請使用 Cmdlet 的 Invoke-Command Session 參數。

例如,下列命令會 Invoke-Command 使用 Cmdlet 在 Server01 和 Server02 計算機上的 PSSessions 中執行 Get-Process 命令。 命令會將進程儲存在每個 $p PSSession 中的變數中。

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

由於 PSSession 使用持續性連線,因此您可以在使用 $p 變數的相同 PSSession 中執行另一個命令。 下列命令會計算儲存在 中的 $p進程數目。

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

如何在多部計算機上執行遠端命令

若要在多部計算機上執行遠端命令,請在的 ComputerName 參數Invoke-Command中輸入所有電腦名稱。 以逗號分隔名稱。

例如,下列命令會在三部 Get-Culture 計算機上執行命令:

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

您也可以在多個 PSSessions 中執行命令。 下列命令會在 Server01、Server02 和 Server03 計算機上建立 PSSession,然後在每個 PSSessions 中執行 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-CommandFilePath 參數。 您不需要複製任何檔案。 例如,下列命令會在 S1 和 S2 電腦上執行 Sample.ps1 文稿:

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

PowerShell 會將腳本的結果傳回至本機計算機。

如何停止遠端命令

若要中斷命令,請按 Ctrl+c。 PowerShell 會將中斷要求傳遞給終止遠端命令的遠端電腦。

如需相關資訊

另請參閱