檢閱 Windows PowerShell 的遠端功能

已完成

遠端功能會使用稱為 Web Services for Management (WS-Management 或 WS-MAN) 的開放標準通訊協定。 如名稱所示,此通訊協定是以網頁瀏覽器用來與網頁伺服器通訊的相同 HTTP 或 HTTPS 通訊協定為基礎。 這可讓通訊協定更容易管理和路由通過防火牆。 Windows 作業系統會使用 Windows 遠端管理 (WinRM) 服務來實作通訊協定。 PowerShell 支援 WMI、WS-Management 和安全殼層 (SSH) 遠端功能。 在 PowerShell 6 中,不支援遠端程序呼叫 (RPC) 式的通訊。 在 PowerShell 7 及更新版本中,只有 Windows 支援 RPC。

雖然起始傳出連線的電腦上不需要任何設定,但您必須在要接收傳入連線的電腦上啟用遠端功能。 預設會針對所有目前支援版本的 Windows Server 上的傳入連線啟用 PowerShell 遠端功能。 您也可以在執行 Windows PowerShell 3.0 或更新版本的任何電腦上將其啟用。

注意

在 Windows Server 作業系統上預設會啟用遠端功能,但預設不會在用戶端作業系統上 (包括Windows 10和Windows 11) 啟用遠端功能。

Windows PowerShell 遠端功能會使用 WinRM,WinRM 可管理其他應用程式的通訊。 例如,在預設 Windows Server 2016 或更新版本的安裝上,WinRM 會管理 64 位元 Windows PowerShell、32 位元 Windows PowerShell 和兩個伺服器管理員元件的通訊。

遠端功能結構

遠端功能的起點是 WinRM 服務。 該服務會註冊一或多個接聽程式,每個接聽程式會接受經由 HTTP 或 HTTPS 的傳入流量。 每個接聽程式都可以繫結至單一本地 IP 位址或多個 IP 位址。 Microsoft Internet Information Services (IIS) 沒有相依性,這表示不需要安裝 IIS,WinRM 就能運作。

傳入流量包含封包標頭,指出流量的預定目的地或端點。 在 Windows PowerShell 中,這些端點也稱為工作階段設定。 每個端點都會與特定應用程式相關聯。 當流量導向至端點時,WinRM 會啟動相關聯的應用程式、關閉傳入流量,然後等候應用程式完成其工作。 應用程式可以將資料傳回 WinRM,而 WinRM 會將資料傳回原始電腦。

在 Windows PowerShell 案例中,您會將命令傳送至 WinRM,然後執行命令。 程序在遠端電腦程序清單中會列為 Wsmprovhost。 Windows PowerShell 接著會執行這些命令,並將產生的物件 (如果有的話) 轉換成 XML。 XML 文字資料流接著會交回 WinRM,WinRM 會將 XML 文字資料流傳輸至原始電腦。 遠端電腦上的 Windows PowerShell 會將 XML 轉譯回靜態物件。 這會讓命令結果的行為與 Windows PowerShell 管線內的任何其他物件非常類似。

Windows PowerShell 可以使用 WinRM 註冊多個端點或工作階段設定。 事實上,根據預設,64 位元作業系統會同時為 64 位元 Windows PowerShell 主機和 32 位元主機註冊端點。 您也可以建立自己的自訂端點,這些端點具有指派給自己的高度精確權限和功能。

不需設定的 Windows PowerShell 遠端功能

許多 Windows PowerShell Cmdlet 都有 ComputerName 參數,可讓您收集資料,並變更一或多部遠端電腦的設定。 這些 Cmdlet 會使用不同的通訊協定,並在所有 Windows 作業系統上運作,而不需要任何特殊設定。

這些 Cmdlet 包含:

  • Restart-Computer
  • Test-Connection
  • Clear-EventLog
  • Get-EventLog
  • Get-HotFix
  • Get-Process
  • Get-Service
  • Set-Service
  • Get-WinEvent
  • Get-WmiObject

一般而言,不需特殊設定即可支援遠端功能的 Cmdlet 具有 ComputerName 參數,而且沒有 Session 參數。

若要在工作階段中尋找這些 Cmdlet,請輸入:

Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}

透過 SSH 的 PowerShell 遠端

PowerShell 遠端通常會使用 WinRM 進行連線交涉和資料傳輸。 SSH 目前適用於 Linux 與 Windows 平台,而且能夠執行真正的多平台 PowerShell 遠端。

WinRM 提供一個健全裝載模型以供 PowerShell 遠端工作階段使用。 SSH 型遠端目前不支援遠端端點設定和 Just Enough Administration (JEA)。

SSH 遠端功能可讓您在 Windows 與 Linux 電腦之間執行基本 PowerShell 工作階段遠端功能。 SSH 遠端會在目標電腦上建立 PowerShell 主機處理序作為 SSH 子系統。 最後,Microsoft 計畫將實作一般裝載模型 (類似 WinRM) 以支援端點設定與 JEA。

注意

New-PSSessionEnter-PSSessionInvoke-Command Cmdlet 現在有新的參數集,可支援這個新的遠端功能連線。

若要透過 SSH 使用 PowerShell 遠端功能,您必須在所有電腦上安裝 PowerShell 6 或更新版本和 SSH。 然後,您必須同時安裝 SSH 用戶端 (ssh.exe) 和伺服器 (sshd.exe) 可執行檔,以便遠端存取電腦。 現在已可開始在 Windows 10 組建 1809 與 Windows Server 2019 中使用適用於 Windows 的 OpenSSH。 針對 Linux,請安裝適用於您平台的 SSH 版本 (包括 sshd.exe 伺服器)。 您也需要從 GitHub 安裝目前的 PowerShell 版本,以確保 SSH 遠端功能可供使用。 您必須將 SSH 伺服器設定為建立 SSH 子系統,以便在遠端電腦上裝載 PowerShell 程序。 您也需要啟用密碼或金鑰型驗證。