即使在Windows上,PSRemoting默認是啟用的,但並不總是啟用的。如果您需要測試PSRemoting是否已啟用或在Windows上啟用PSRemoting,本教程適合您。
本教程將引導您了解在運行Windows的本地和遠程計算機上啟用PSRemoting的多種方法。
讓我們開始吧!
啟用PSRemoting有很多工作
如果您剛開始學習PowerShell Remoting,可能會認為啟用只是一個單獨的命令。也許您看到了一些關於Enable-PSRemoting
PowerShell cmdlet的參考,並認為運行該命令後,它只是在某個地方翻轉了一個位元。您是錯誤的。
當您聽到啟用PSRemoting時,背景中必須執行很多任務才能實現。由於PowerShell Remoting依賴於其他系統的正常運行,因此它有一些依賴項。
例如,在Windows上,當您運行沒有參數的Enable-PSRemoting
cmdlet時,它執行以下所有任務:
- 啟動WinRM服務並將其設置為自動啟動。
- 在默認的WinRM端口5985上創建一個侦聽器,用於HTTP流量。
- 啟用WS-Management的防火牆例外。
- 使用WS-Management註冊PowerShell會話配置。
- 啟用PowerShell會話配置。
- 設置PowerShell遠程會話以允許遠程訪問。
- 重新啟動WinRM服務器以應用所有更改。
您不必手動執行所有這些操作,真是太好了!為什麼要提到Enable-PSRemoting
命令呢?因為有時候會遇到一些問題,需要進行故障排除。
Windows上的默認PSRemoting設置
由於PSRemoting誕生於Windows上,默認情況下是啟用的,但並非通用,也不適用於所有Windows操作系統版本。
在所有Windows客戶操作系統上,PSRemoting始終處於禁用狀態。
在Windows Server上,PSRemoting 有時是啟用的,但並不是始終啟用,具體取決於Windows運行的網絡配置文件。下面是一個便捷的表格,可幫助您確定Windows操作系統是否已啟用PSRemoting。
Operating System | Network Profile | PSRemoting |
Windows Server 2008 R2 | Domain/Private | Disabled |
Windows Server 2008 R2 | Public | Disabled |
Windows Server 2012 & Newer | Domain/Private | Enabled |
Windows Server 2012 & Newer | Public | Enabled within the same subnet |
另一方面,Linux則很簡單。PSRemoting甚至都不是一回事!默認情況下,甚至沒有安裝PowerShell。如果您想在Linux上運行PSRemoting,則需要進行配置。
說話夠多了,現在讓我們來實際展示如何開始使用PSRemoting!
先決條件
如果您打算按照本節中的示例進行操作,請確保您擁有以下內容:
- A Windows Server 2008 R2 or later machine
- A local or Active Directory domain user in the local administrators group
在本地啟用PSRemoting
其中一種啟用 PSRemoting 的最簡單方法是使用內建的 Enable-PSRemoting
命令。如上所述,此命令是一個快捷方式,用於配置許多不同的服務以適應 PowerShell Remoting。
使用 Enable-PSRemoting
Cmdlet
當您執行此命令而沒有任何參數時,它將根據您所運行的作業系統採取不同的操作。在任何當前的 Windows 作業系統上,都會執行相同的基本步驟。啟用 PSRemoting,建立 WinRM HTTP 監聽器,並啟用防火牆規則。關鍵的區別在於處理公用網路的方式。
在伺服器作業系統上,例如 Windows Server 2019,公用網路的防火牆規則允許來自同一網路上其他設備的遠端連線。在用戶端作業系統上,例如 Windows 10,您將收到一個錯誤提示,指出您處於公用網路。
如果您不確定 Windows 正在運行哪個網路配置文件,請執行以下命令:
您應該僅在受信任的網路上使用 PSRemoting,因為它本質上是運行一個網頁伺服器來監聽遠端連線。

如果您允許在非 Private 或 Domain 網路配置文件上運行 PSRemoting,您可以使用 SkipNetworkProfileCheck
參數跳過網路配置文件檢查。使用此參數將打開 Windows 防火牆上的 WinRM 埠。
使用
SkipNetworkProfileCheck
參數將為當前網路配置文件打開 Windows 防火牆,但只允許來自相同子網的機器的遠端連線。
Enable-PSRemoting
可以與兩個參數一起使用。它們是 -Force
和 -Confirm
參數。您可以使用 -Force
跳過執行 Enable-PSRemoting
命令時通常會出現的提示。您也可以使用 -Confirm:$false
達到相同的效果。
使用 winrm quickconfig
命令
在 Enable-PSRemoting
cmdlet 創建之前,winrm quickconfig
命令曾經是設置 PSRemoting 的流行方式,但它仍然有其用途。如果只運行 winrm quickconfig
,它將啟用 WinRM 服務,創建一個 HTTP 監聽器並啟用防火牆規則。這些都是 Enable-PSRemoting
已經完成的工作,但它不會設置機器以處理遠程 PowerShell 會話。
winrm
命令的好處在於可以設置 HTTPS 監聽器。雖然您可以手動完成這個操作,但如果您有適當的 HTTPS 監聽器證書,只需運行 winrm quickconfig -transport:https
,HTTPS 監聽器和 HTTPS 防火牆規則就會被配置。
遠程啟用 PSRemoting
到目前為止,您已經了解到可以通過在本地計算機上運行命令來啟用 PSRemoting。這導致了一個先有雞還是先有蛋的情況。PSRemoting 允許您在遠程計算機上運行命令,但是如果沒有 PSRemoting,您如何遠程運行命令?不使用 PSRemoting?
有三種方法:PSexec 實用程序、WMI 和 群組策略。
使用Psexec
PSExec是一個方便的工具,可以像PSRemoting一樣遠程運行命令。但是,PSexec使用了一種不同的通信方法,你可以利用它的優勢!
使用PSexec,您可以使用以下命令從本地計算機運行Enable-PSRemoting
。下面的命令調用psexec並連接到ServerB服務器。然後,它啟動一個PowerShell進程並使用-Force
開關執行Enable-PSRemoting
命令,以跳過通常的提示。
這個選項適用於一次性需要在遠程系統上啟用PSRemoting的情況,但對於需要在很多系統上啟用PSRemoting的情況並不理想,並且需要下載psexec。
使用WMI
有時候PSexec無法工作。許多安全軟件會阻止psexec的運行,但不用擔心,您還可以使用WMI!
使用PowerShell和Invoke-CimMethod
cmdlet。使用Invoke-CimMethod
cmdlet,您可以指示PowerShell通過DCOM連接到遠程計算機並調用方法。
幸運的是,WMI有一個Win32_Process
類,允許您調用進程。通過對Win32_Process
調用Create
方法,Invoke-CimMethod
連接到遠程計算機,調用PowerShell並運行Enable-PSRemoting
,如下所示。
下面的示例创建了一个会话连接的哈希表,其中指定了服务器名称、凭据和协议。然后在以下哈希表中,设置了Invoke-CimMethod
的参数。一旦运行了这些命令,就会在DCOM协议上创建一个CIM会话,该会话启动一个PowerShell进程,然后运行Enable-PSRemoting
命令。
在这种情况下,如果您在域环境中使用,并且执行命令的用户在目标服务器上具有管理员权限,则可以省略
Credential = Get-Credential
行。
使用组策略
最后,也是最好的一种启用WinRM跨多台计算机的方法是通过组策略。使用组策略时,您可以创建一个单一的组策略对象,并将该策略同时应用于数千台计算机。
所有计算机都必须位于Active Directory域中才能使用组策略。
要使用组策略一次性启用多台计算机上的WinRM,您需要设置三个不同的配置项:
- 启用WinRM服务。
- 打开WinRm的Windows防火墙端口。
- 创建WinRM侦听器并允许连接。
首先,RDP到域控制器,或者更好的方法是在已加入域的工作站上安装远程服务器管理工具(RSAT)包。现在应该可以使用组策略管理控制台(GPMC)了。
启用WinRM服务
要在所有目标计算机上启用WinRM服务:
- 打开GPMC并创建一个GPO。在新的GPO中,导航到计算机配置 —> Windows设置 —> 安全设置 —> 系统服务
- 选择Windows远程管理(WS-Management)。
- 在配置面板中勾选定义此策略设置。
- 选择自动的单选按钮,以在启动时自动启动WinRm服务。
- 点击确定确认设置。
打开Windows防火墙端口
接下来,您需要在所有目标计算机上打开WinRM端口。在上述创建的GPO中进行编辑:
- 导航到计算机配置 —> Windows设置 —> 安全设置 —> 带高级安全性的Windows Defender防火墙。
2. 點擊新增入站規則以創建新的入站規則。
3. 在第一個頁面上選擇預定義,並選擇Windows 遠程管理,如下圖所示。

4. 在下一個頁面上,除非您知道在您的環境中使用了公共網絡並且需要允許從它們進行遠程連接,否則勾選域/私有網絡規則的方框。

5. 在下一個頁面上,保留默認的允許連接,然後點擊完成以創建該規則。
創建 WinRM 監聽器和過濾器列表
需要添加到您的 GPO 的最後一個配置項目是創建 WinRM 監聽器並允許對該 WinRM 監聽器的連接。此設置將創建 HTTP 的 WinRM 監聽器,並允許從指定的 IP 或 IP 範圍進行連接。
在編輯 WinRM GPO 的同時:
- 導航到計算機組態 —> 管理模板 —> Windows 元件 —> Windows 遠程管理(WinRM) —> WinRM 服務。
2. 對於通過 WinRM 允許遠程服務管理設置,選擇已啟用。
3. 在通過 WinRM 允許遠程服務管理設置下,對於IPv4 過濾器和IPv6 過濾器,填入星號 (*
),如下圖所示。
請注意,如果您事先知道哪些主機將連接到所有目標電腦,則可以在每個篩選器列表中以逗號分隔指定多個主機。

4. 點擊確定以確認最新的GPO設置。
應用GPO
此時,GPO應已創建並準備就緒。您現在必須完成的最後一項任務是將此GPO應用於您希望啟用WinRM的所有目標計算機。本教程不會教您如何將GPO分配給目標計算機。
如果您不知道如何在Active Directory中將GPO分配給一組計算機,您應該查看這篇文章。
下一步
在本教程中,您已學會了多種啟用PSRemoting的方法。如何啟用PSRemoting將大大取決於您的環境,我希望我在這裡涵蓋了您的情境。
現在利用所學的知識,開始在您的環境中使用PSRemoting吧!