- 遠端處理使用 WinRM/WS-Man (HTTP/HTTPS) 並允許具有安全控制的一對一、一對多和持久性會話。
- Enable-PSRemoting 設定服務、偵聽器和防火牆;HTTPS 需要有效的憑證和 CN/SAN 匹配。
- 結果以反序列化形式返回;方法在遠端腳本區塊內調用,並使用自訂端點進行細粒度委派。
您可能已經在本機上使用 PowerShell 自動執行了許多任務,但您真正需要做的是什麼? PowerShell Remoting 帶來不同 遠端伺服器是指在遠端電腦上執行命令,無論是幾台還是幾百台,以互動方式還是並行方式。這項技術自 Windows PowerShell 2.0 開始提供,並在 3.0 版本中得到增強,它基於 WS-Management (WinRM),並將 PowerShell的 在強大、可擴展且安全的遠端管理通道中。
首先,理解兩個關鍵概念很重要:帶有 -ComputerName 參數 (例如,Get-Process 或 Get-Service)不是 Microsoft 推薦的長期路徑,且 PowerShell Remoting 不能作為一種「駭客」手段。事實上, 強制相互認證、審計日誌並尊重您的通常權限,而無需存儲憑證或以超級權限神奇地運行任何東西。
什麼是 PowerShell Remoting 以及為什麼要使用它?
同 PowerShell Remoting 你可以 遠端執行幾乎任何命令 您可以在本機會話中啟動,從查詢服務到部署配置,並同時在數百台電腦上執行這些操作。與接受「-ComputerName」(許多使用 DCOM/RPC)的 cmdlet 不同,遠端處理 透過 WS-Man (HTTP/HTTPS) 傳輸,它對防火牆更加友好,允許並行並將工作卸載到遠端主機而不是客戶端。
這轉化為三個實際優勢:大規模執行時效能更佳, 減少網路摩擦 使用限制性規則和與 Kerberos/HTTPS 一致的安全模型。此外,由於不依賴每個 cmdlet 實作自己的遠端,Remoting 適用於任何劇本或角色 目的地可用。
預設情況下,最新的 Windows 伺服器都啟用了遠端處理;在 Windows 10/11 你啟動它 只需一個 cmdlet。沒錯,您可以使用備用憑證、持久性會話、自訂端點等等。
注意:遠端處理並不等於開啟所有內容。預設情況下, 只有管理員 他們可以連接,並以他們的身份執行操作。如果您需要細粒度的委託,自訂端點允許您僅公開必要的命令。

內部工作原理:WinRM、WS-Man 和連接埠
PowerShell Remoting 採用客戶端-伺服器模型。客戶端透過以下方式發送 WS-Management 請求: HTTP(5985/TCP)或 HTTPS(5986/TCP)在目標上,Windows 遠端管理 (WinRM) 服務會進行偵聽、解析端點(會話配置),並在背景託管 PowerShell 會話(wsmprovhost.exe 進程)。 將序列化的結果傳回給客戶端 透過 SOAP 以 XML 格式。
首次啟用 Remoting 時,會設定偵聽器、開啟對應的防火牆例外並建立會話設定。從 PowerShell 6 開始,多個版本共存,並且 啟用 PSRemoting 使用反映版本的名稱來註冊端點(例如,PowerShell.7 和 PowerShell.7.xy)。
如果您的環境中僅允許 HTTPS,您可以建立一個 安全監聽器 使用受信任 CA 所發出的憑證(建議)。或者,另一種方法是,在工作群組場景或非網域電腦中,以有限且風險意識強的方式使用 TrustedHosts。
請注意,Powershell Remoting 可以與帶有 -ComputerName 的 cmdlet 共存,但是 微軟推出WS-Man 作為遠端管理的標準和麵向未來的方式。
啟用 PowerShell 遠端處理和有用的參數
在 Windows 上,只需以管理員身分開啟 PowerShell 並執行 啟用 PSRemoting系統啟動 WinRM,設定自動啟動,啟用監聽器,並建立對應的防火牆規則。在具有公網設定檔的用戶端上,您可以故意允許此操作 -SkipNetworkProfileCheck (然後用具體規則強化):
Enable-PSRemoting
Enable-PSRemoting -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force
該語法還允許, -確認 y -如果什麼 用於變更控制。請記住: 僅適用於 Windows,並且您必須執行提升權限的控制台。伺服器版本和用戶端版本建立的規則有所不同,尤其是在公共網路上,預設情況下,規則僅限於本機子網,除非您擴展範圍(例如,使用 Set-NetFirewallRule)。
若要列出已記錄的會話配置並確認一切準備就緒,請使用 取得 PSSession 配置如果出現 PowerShell.x 和 Workflow 端點,則 Remoting 框架可以運作。

使用模式:一對一、一對多和持久會話
當您需要在單一電腦上使用互動式控制台時,請前往 進入-的PSSession提示符號將會出現,你執行的所有內容都會傳送到遠端主機。你可以使用 Get-Credential 重複使用憑證,以避免不斷重新輸入它們:
$cred = Get-Credential
Enter-PSSession -ComputerName dc01 -Credential $cred
Exit-PSSession
如果您正在尋找的是同時向多台電腦發送命令,那麼該工具就是 調用命令 使用腳本區塊。預設情況下,它最多啟動 32 個並發連接(可使用 -ThrottleLimit 進行調整)。結果回傳如下 反序列化物件 (沒有「即時」方法):
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service -Name W32Time } -Credential $cred
需要呼叫 .Stop() 或 .Start() 之類的方法嗎?那就呼叫吧。 在腳本區塊內 在遠端上下文中,而不是本地反序列化對象,就是這樣。如果有等效的 cmdlet (Stop-Service/Start-Service),通常最好使用它來清晰起見。
為了避免每次通話時開始和結束會話的成本,請建立一個 持久 PSSession 並在多個調用中重複使用它。使用 New-PSSession 建立連接,並使用 Invoke-Command-Session 重複使用隧道。完成後,別忘了使用 Remove-PSSession 關閉它。
序列化、限制和良好實踐
一個重要的細節:當移動時,物體會“變平”,並到達 反序列化快照,有屬性但沒有方法。這是故意的,可以節省頻寬,但這意味著您無法使用在本機副本上執行邏輯的成員(例如 .Kill())。解決方案很明顯:呼叫這些方法。 遙遠地 如果您只需要某些字段,請使用 Select-Object 進行過濾以傳送更少的資料。
在腳本中,避免使用 Enter-PSSession(用於互動使用),並使用 Invoke-Command 和腳本區塊。如果您預期會有多個呼叫或需要保留狀態(變數、匯入的模組), 使用持久會話 如果適用,使用 PowerShell 3.0+ 中的 Disconnect-PSSession/Connect-PSSession 斷開/重新連接它們。
身份驗證、HTTPS 和域外場景
在網域中,本機身份驗證 Kerberos的 一切順利。當裝置無法驗證伺服器名稱,或您連線至 CNAME IP 或別名時,您需要以下兩個選項之一:1)監聽器 帶有憑證的 HTTPS 由您信任的 CA 頒發,或 2)將目標(名稱或 IP)新增至 TrustedHosts 並 使用憑證第二個選項會停用該主機的相互身份驗證,因此它將範圍縮小到必要的最小值。
設定 HTTPS 監聽器需要憑證(最好來自您的 PKI 或公用 CA),該憑證安裝在團隊儲存體中並綁定到 WinRM。然後在防火牆中開啟連接埠 5986/TCP,並從客戶端使用。 -使用SSL 在遠端 cmdlet 中。對於用戶端憑證驗證,您可以將憑證對應到本機帳戶並連線到 -證書指紋 (Enter-PSSession 不直接接受此指令;請先使用 New-PSSession 建立會話。)
第二跳和憑證委託
著名的“雙跳”是指在連接到伺服器後,需要該伺服器訪問 第三資源 代表您(例如,SMB 共享)。有兩種方法可以實現這一點:CredSSP 和基於資源的約束 Kerberos 委派。
同 信用SSP 您允許用戶端和中介明確委託憑證,並設定策略(GPO)以允許將憑證委託給特定電腦。這種方法配置很快,但安全性較低,因為憑證在加密隧道中以明文形式傳輸。務必限制來源和目的地。
域中的首選替代方案是 受限的 Kerberos 委派 (基於資源的約束委派)在現代 AD 中。這允許端點依賴從中間點接收特定服務的委派,從而避免在初始連線時暴露您的身分。需要最新的網域控制器和更新的 RSAT。
自訂端點(會話配置)
遠端處理的一大亮點是能夠註冊連接點 客製化功能和限制。首先,使用 New-PSSessionConfigurationFile 產生一個檔案(要預先載入的模組、可見函數、別名、ExecutionPolicy、LanguageMode 等),然後使用 Register-PSSessionConfiguration 註冊它,您可以在其中設定 以憑證運行 和權限(帶有 -ShowSecurityDescriptorUI 的 SDDL 或 GUI 介面)。
為了安全委派,僅使用 -VisibleCmdlets/-VisibleFunctions 公開必要的內容,並在適當的情況下停用自由腳本 語言模式受限語言 或 NoLanguage。如果保留 FullLanguage,有人可能會使用腳本區塊呼叫未公開的命令,這些命令與 RunAs 結合使用, 那將是一個洞. 仔細設計這些端點並記錄其範圍。
域、GPO 和群件
在 AD 中,您可以使用 GPO 大規模部署 Powershell Remoting:允許自動設定 WinRM 偵聽器, 將服務設定為自動,並建立防火牆例外。請記住,GPO 會更改設置,但它們並不總是會立即啟用服務;有時您需要重新啟動或強制執行 gpupdate。
在工作群組(非網域)中,使用以下方式設定遠端處理 啟用 PSRemoting,在客戶端上設定 TrustedHosts(winrm set winrm/config/client @{TrustedHosts=»host1,host2″})並使用本機憑證。對於 HTTPS,您可以掛載自簽名證書,但建議使用受信任的 CA 和 驗證名稱 您將在憑證中的 -ComputerName 中使用它(CN/SAN 符合)。
關鍵 cmdlet 和語法
少數突擊隊員掩護 90% 的日常場景. 若要啟用/停用:
Enable-PSRemoting
Disable-PSRemoting
互動環節 1 對 1 並退出:
Enter-PSSession -ComputerName SEC504STUDENT
Exit-PSSession
一對多,具有並行性和憑證:
Invoke-Command -ComputerName dc01,sql02,web01 -ScriptBlock { Get-Service W32Time } -Credential $cred
持久會話 並重複使用:
$s = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.7
Invoke-Command -Session $s -ScriptBlock { $PSVersionTable }
Remove-PSSession $s
測試和 WinRM 有用:
Test-WSMan -ComputerName host
winrm get winrm/config
winrm enumerate winrm/config/listener
winrm quickconfig -transport:https
防火牆、網路和連接埠實用說明
在目標電腦上開啟 5985/TCP 以進行 HTTP 連接,開啟 5986/TCP 以進行 HTTPS 連接。 任何中間防火牆在 Windows 用戶端上,Enable-PSRemoting 為網域和私人設定檔建立規則;對於公用設定文件,它僅限於本機子網,除非您使用 Set-NetFirewallRule -RemoteAddress Any(您可以根據風險評估的值)修改範圍。
如果您使用執行遠端命令的 SOAR/SIEM 整合(例如來自 XSOAR),請確保伺服器具有 DNS解析 連接到主機、連接到 5985/5986 以及具有足夠本地權限的憑證。在某些情況下,NTLM/Basic 驗證可能需要調整(例如,在 Basic 中使用 SSL 的本機使用者)。
Enable-PSRemoting 參數(操作摘要)
-Confirm 執行前要求確認;-Force 忽略警告 並進行必要的變更;-SkipNetworkProfileCheck 啟用在公共用戶端網路上進行遠端處理(預設僅限於本機子網路);-WhatIf 顯示在不套用變更的情況下會發生什麼。此外,與任何標準 cmdlet 一樣,它支援 通用參數 (-Verbose、-ErrorAction 等)。
請記住,「啟用」不會為您建立 HTTPS 偵聽器或憑證;如果您從一開始就需要端對端加密,並且需要基於 認證,設定 HTTPS 偵聽器並根據您將在 -ComputerName 中使用的名稱驗證 CN/SAN。
有用的 WinRM 和 PowerShell 遠端命令
一些 床頭必備物品 日常:
winrm get winrm/config
winrm enumerate winrm/config/listener
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any
Test-WSMan -ComputerName host -Authentication Default -Credential (Get-Credential)
New-PSSession -ComputerName host
Enter-PSSession -ComputerName host
Enable-PSRemoting -SkipNetworkProfileCheck -Force
在大規模管理 Windows 時,遠端處理可讓您從「電腦到電腦」遷移到聲明式的安全性方法。透過結合持久會話、強身份驗證 (Kerberos/HTTPS)、受限端點和清晰的診斷跟踪, 你獲得速度和控制力 無需犧牲安全性或審計。如果您還能標準化 GPO 啟動並掌握特殊情況(TrustedHosts、雙跳、憑證),您將擁有一個可靠的遠端平台,用於日常營運和事件回應。
專門研究技術和互聯網問題的編輯,在不同數位媒體領域擁有十多年的經驗。我曾在電子商務、通訊、線上行銷和廣告公司擔任編輯和內容創作者。我還在經濟、金融和其他領域的網站上撰寫過文章。我的工作也是我的熱情所在。現在,透過我的文章 Tecnobits,我嘗試探索科技世界每天為我們提供的所有新聞和新機會,以改善我們的生活。