關於遠端

簡短描述

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

詳細描述

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

本主題提供一系列範例,示範如何執行不同類型的遠端命令。 嘗試這些基本命令之後,請閱讀說明主題,以描述這些命令中使用的每個 Cmdlet。 主題提供詳細資料,並說明如何修改命令以符合您的需求。

注意:若要使用 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 管理為基礎的 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}

ComputerName 參數是針對您在一或多部電腦上執行單一命令或數個不相關的命令的情況所設計。 若要建立與遠端電腦的持續性連線,請使用 Session 參數。

如何建立 PSSESSION (持續性連線)

當您使用 Invoke-Command Cmdlet 的 ComputerName 參數時,Windows PowerShell只針對 命令建立連線。 然後,在命令完成時,就會關閉連線。 命令中定義的任何變數或函式都會遺失。

若要建立遠端電腦的持續性連線,請使用 New-PSSession Cmdlet。 例如,下列命令會在 Server01 和 Server02 電腦上建立 PSSessions,然後將 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,然後在每個 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-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

  • 如需 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