Enable-PSRemoting

設定電腦接收遠端指令。

語法

Default (預設值)

Enable-PSRemoting
    [-Force]
    [-SkipNetworkProfileCheck]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

此 Cmdlet 只能在 Windows 平臺上使用。

該 Enable-PSRemoting 指令小程式設定電腦接收使用 WS-Management 技術傳送的 PowerShell 遠端指令。 基於 WS-Management 的 PowerShell 遠端處理目前僅支援Windows平台。

PowerShell 遠端處理預設在 Windows Server 平台上是啟用的。 你可以用 Enable-PSRemoting 在其他支援的 Windows 版本啟用 PowerShell 遠端支援,並在遠端支援被停用時重新啟用。

你只需要在每台接收指令的電腦上執行這個指令一次。 您不需要在僅用於傳送命令的電腦上執行它。 因為設定會先啟動監聽器,建議只在需要的地方執行。

當電腦在公共網路上時,通常不允許在客戶端版本的 Windows 上啟用 PowerShell 遠端存取,但你可以使用 SkipNetworkProfileCheck 參數跳過此限制。 欲了解更多資訊,請參閱 SkipNetworkProfileCheck 參數的說明。

多個 PowerShell 安裝可以並存於同一台電腦上。 執行 Enable-PSRemoting 中會為你執行該 cmdlet 的特定安裝版本設定一個遠端端點。 所以如果你在執行 PowerShell 6.2 的同時執行 Enable-PSRemoting ,會設定一個遠端端點來執行 PowerShell 6.2。 如果你在執行 PowerShell 7 預覽版時執行 Enable-PSRemoting ,會設定一個遠端端點來執行 PowerShell 7 預覽版。

Enable-PSRemoting 根據需要建立兩個遠端端點配置。 如果端點配置已經存在,則只需確保它們會被啟用。 這些配置相同,但名稱不同。 其中一種會有一個簡單的名稱,對應承載該會話的 PowerShell 版本。 另一個組態名稱則包含了承載該會話的 PowerShell 版本的更詳細資訊。 例如,在 PowerShell 6.2 執行 Enable-PSRemoting 時,你會看到兩個已設定的端點,分別是 PowerShell.6、 PowerShell.6.2.2。 這讓你可以透過簡單的名稱 PowerShell.6 建立與最新 PowerShell 6 主機版本的連線。 或者你也可以使用較長的名稱 PowerShell.6.2.2 連接特定的 PowerShell 主機版本。

要使用新啟用的遠端端點,必須在使用 Invoke-Command,, cmdlet 建立遠端連線時,使用 ConfigurationNameNew-PSSessionEnter-PSSession 參數指定它們。 更多資訊請參見範例4。

指令 Enable-PSRemoting 長執行以下操作:

  • 執行 Set-WSManQuickConfig 指令檔,執行以下任務:
    • 啟動 WinRM 服務。
    • 將 WinRM 服務的啟動類型設為自動。
    • 建立一個監聽器,以接受任何 IP 位址的請求。
    • 啟用防火牆例外以保護 WS-Management 通訊。
    • 必要時建立簡單且長的命名會話端點設定。
    • 啟用所有會話設定。
    • 更改所有會話設定的安全描述符,以允許遠端存取。
  • 重新啟動 WinRM 服務,使前述變更生效。

要在 Windows 平台上執行此 cmdlet,請使用「以管理員身份執行」選項啟動 PowerShell。 此指令小程式在 Linux 或 macOS 版本的 PowerShell 中無法使用。

Caution

此 cmdlet 不影響 Windows PowerShell 建立的遠端端點設定。 它只影響使用 PowerShell 6 版及以上版本建立的端點。 要啟用或停用Windows由 PowerShell 主機託管的 PowerShell 遠端端點,請在 Windows PowerShell 會話中執行 Enable-PSRemoting 指令。

欲了解更多關於使用 PowerShell 遠端管理的資訊,請參閱以下文章:

範例

範例 1:設定電腦接收遠端指令

此指令設定電腦接收遠端指令。

Enable-PSRemoting
WARNING: PowerShell remoting has been enabled only for PowerShell Core configurations and
does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows
PowerShell to affect all PowerShell remoting configurations.

範例 2:設定電腦接收遠端指令,無需確認提示

此指令設定電腦接收遠端指令。 Force 參數會抑制使用者提示。

Enable-PSRemoting -Force
WARNING: PowerShell remoting has been enabled only for PowerShell Core configurations and
does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows
PowerShell to affect all PowerShell remoting configurations.

範例 3:允許用戶端遠端存取

此範例展示了如何在 Windows 作業系統的用戶端版本中允許從公共網路遠端存取。 不同版本的 Windows 防火牆規則名稱可能不同。 使用 Get-NetFirewallRule 查看規則清單。 啟用防火牆規則之前,請先檢視規則中的安全性設定,以確認設定適合您的環境。

Get-NetFirewallRule -Name 'WINRM*' | Select-Object -Property Name
Name
----
WINRM-HTTP-In-TCP-NoScope
WINRM-HTTP-In-TCP
WINRM-HTTP-Compat-In-TCP-NoScope
WINRM-HTTP-Compat-In-TCP
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any

預設情況下,會 Enable-PSRemoting 建立允許從私人網路與網域網路遠端存取的網路規則。 此指令使用 SkipNetworkProfileCheck 參數,允許同一本地子網內的公共網路遠端存取。 指令指定 Force 參數以抑制確認訊息。

SkipNetworkProfileCheck參數不影響Windows作業系統的伺服器版本,該版本預設允許同一本地子網內的公共網路遠端存取。

Set-NetFirewallRule NetSecurity 模組中的 cmdlet 新增防火牆規則,允許從任何遠端地點遠端存取公共網路。 這包括不同子網路中的位置。

範例 4:建立遠端會話至新啟用的端點設定

這個範例展示了如何在電腦上啟用 PowerShell 遠端存取、找到已設定的端點名稱,並建立一個遠端連線到其中一個端點的會話。

第一個指令啟用了電腦上的 PowerShell 遠端存取。

第二個指令列出端點配置。

第三個指令會建立一個遠端 PowerShell 會話,指向同一台機器,並以名稱指定 PowerShell.7 端點。 遠端會話將以最新的 PowerShell 7 版本(7.3.0)作為主機。

最後一個指令會 $PSVersionTable 存取遠端會話中的變數,顯示主機會話的 PowerShell 版本。

Enable-PSRemoting -Force

Get-PSSessionConfiguration

$session = New-PSSession -ComputerName localhost -ConfigurationName PowerShell.7

Invoke-Command -Session $session -ScriptBlock { $PSVersionTable }
WARNING: PowerShell remoting has been enabled only for PowerShell Core configurations and
does not affect Windows PowerShell remoting configurations. Run this cmdlet in Windows
PowerShell to affect all PowerShell remoting configurations.

Name          : PowerShell.7
PSVersion     : 7.3
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed,
                BUILTIN\Administrators AccessAllowed,
                BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.7.3.0
PSVersion     : 7.3
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed,
                BUILTIN\Administrators AccessAllowed,
                BUILTIN\Remote Management Users AccessAllowed

Name                           Value
----                           -----
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSEdition                      Core
PSRemotingProtocolVersion      2.3
Platform                       Win32NT
SerializationVersion           1.1.0.1
GitCommitId                    6.2.2
WSManStackVersion              3.0
PSVersion                      6.2.2
OS                             Microsoft Windows 10.0.18363

Note

防火牆規則的名稱會依 Windows 版本而異。 用 Get-NetFirewallRule cmdlet 列出系統中規則的名稱。

參數

-Confirm

在執行 Cmdlet 之前,提示您進行確認。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:參見

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Force

強制命令執行,而不要求使用者確認。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-SkipNetworkProfileCheck

表示此指令檔能在 Windows 作業系統的用戶端版本中,當電腦處於公共網路時,啟用遠端存取。 此參數允許公共網路的防火牆規則,允許同一本地子網內的電腦遠端存取。

此參數不影響 Windows 作業系統的伺服器版本,因為預設情況下,公共網路有本地子網防火牆規則。 如果伺服器版本的本地子網路防火牆規則被停用,無論 Enable-PSRemoting 該參數值為何,都必須重新啟用。

要解除本地子網限制並啟用公共網路中所有地點的遠端存取,請使用 Set-NetFirewallRuleNetSecurity 模組中的 cmdlet。

此參數是在 PowerShell 3.0 中引進的。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 該 Cmdlet 未被執行。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:威斯康辛

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。

輸入

None

您不能將物件透過管道傳送到此 Cmdlet。

輸出

String

此 cmdlet 回傳描述其結果的字串。

備註

此 Cmdlet 僅適用於 Windows 平臺。

在 Windows 作業系統的伺服器版本中,Enable-PSRemoting 為允許遠端存取的私有網路與域網路建立防火牆規則,並為公共網路建立防火牆規則,僅允許同一本地子網路內的電腦遠端存取。

在 Windows 作業系統的用戶端版本中,Enable-PSRemoting 為私有與網域網路建立防火牆規則,允許不受限制的遠端存取。 若要為公共網路建立允許從同一本地子網遠端存取的防火牆規則,請使用 SkipNetworkProfileCheck 參數。

在 Windows 作業系統的客戶端或伺服器版本中,若要建立公共網路防火牆規則,移除本地子網限制並允許遠端存取,請使用 NetSecurity 模組中的 Set-NetFirewallRule 指令檔執行以下指令:Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

Enable-PSRemoting 透過將所有會話配置的 Enabled 屬性值設為 來啟用所有會話配置 $true。

Enable-PSRemoting 移除 Deny_All 和 Network_Deny_All 設定。 這提供遠端存取原本保留給本地使用的會話設定。