about_Remote

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主題

about_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 管理之 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 { $_.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,然後將 PSSessions 儲存在 $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 電腦上建立 PSSessions,然後在每個 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。

-- 如需 PSSessions 和持續連線的相關資訊,請參閱 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