Enable-PSRemoting

設定電腦以接收遠端命令。

Syntax

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

Description

此 Cmdlet 僅適用於 Windows 平臺。

Cmdlet 會將 Enable-PSRemoting 電腦設定為接收使用 WS-Management 技術傳送的 PowerShell 遠端命令。 WS 管理型 PowerShell 遠端功能目前僅支援 Windows 平臺上。

Windows Server 平台中預設已啟用 PowerShell 遠端。 您可以使用 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-preview 的遠端端端點。

Enable-PSRemoting 視需要建立兩個遠端端點組態。 如果端點組態已經存在,則它們只會確保啟用。 建立的組態完全相同,但名稱不同。 其中一個名稱會對應至裝載會話的PowerShell版本。 另一個組態名稱包含裝載會話之PowerShell版本的詳細資訊。 例如,在 PowerShell 6.2 中執行 Enable-PSRemoting 時,您會收到兩個名為 PowerShell.6PowerShell.6.2.2 的已設定端點。 這可讓您使用簡單名稱 PowerShell.6來建立與最新PowerShell 6主機版本的連線。 或者,您可以使用較長的名稱 PowerShell.6.2.2 連線到特定的 PowerShell 主機版本。

若要使用新啟用的遠端端端點,您必須使用 、、Enter-PSSession Cmdlet 建立遠端連線時,使用 Invoke-CommandNew-PSSessionConfigurationName 參數指定名稱。 如需詳細資訊,請參閱範例 4。

Cmdlet Enable-PSRemoting 會執行下列作業:

  • 執行 Set-WSManQuickConfig Cmdlet,其會執行下列工作:
    • 啟動 WinRM 服務。
    • 將 WinRM 服務上的啟動類型設為 [自動]。
    • 建立接聽程式,以接受有關任何 IP 位址的要求。
    • 針對 WS-Management 通訊啟用防火牆例外。
    • 視需要建立簡單且長名稱的會話端點組態。
    • 啟用所有工作階段設定。
    • 變更所有工作階段設定的安全性描述元,以允許遠端存取。
  • 重新啟動 WinRM 服務,讓前述變更生效。

若要在 Windows 平台上執行此 Cmdlet,請使用 [以系統管理員身分執行] 選項啟動 PowerShell。 此 Cmdlet 不適用於 Linux 或 MacOS 版本的 PowerShell。

警告

此 Cmdlet 不會影響 Windows PowerShell 所建立的遠端端點組態。 它只會影響使用PowerShell第6版和更新版本建立的端點。 若要啟用和停用 Windows PowerShell 所裝載的 PowerShell 遠端端點,請從 Windows PowerShell 工作階段內執行 Enable-PSRemoting Cmdlet。

範例

範例 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.2.7)。

最後一個命令會 $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.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed,
                BUILTIN\Administrators AccessAllowed,
                BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.7.2.7
PSVersion     : 7.2
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

注意

防火牆規則的名稱可能會根據 Windows 版本而有所不同。 Get-NetFirewallRule使用 Cmdlet 列出系統上的規則名稱。

參數

-Confirm

執行 Cmdlet 之前先提示您確認。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipNetworkProfileCheck

指出當電腦位於公用網路上時,此 Cmdlet 會在 Windows 作業系統的用戶端版本上啟用遠端處理。 此參數會啟用公用網路的防火牆規則,只允許從相同本機子網的計算機進行遠端訪問。

此參數不會影響 Windows 作業系統的伺服器版本,根據預設,其具有公用網路的本機子網防火牆規則。 如果伺服器版本上停用本機子網防火牆規則, Enable-PSRemoting 則不論此參數的值為何,都重新啟用它。

若要移除本機子網限制,並啟用來自公用網路上所有位置的遠端訪問,請使用 Set-NetFirewallRule NetSecurity 模組中的 Cmdlet。

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 未執行 Cmdlet。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

None

您無法使用管線將物件傳送至此 Cmdlet。

輸出

String

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

備註

此 Cmdlet 僅適用於 Windows 平臺。

在 Windows 作業系統的伺服器版本上, Enable-PSRemoting 為允許遠端訪問的私人和網域網路建立防火牆規則,併為公用網路建立防火牆規則,只允許從相同本機子網的計算機進行遠端訪問。

在 Windows 作業系統的用戶端版本上, Enable-PSRemoting 為允許不受限制的遠端訪問的私人和網域網路建立防火牆規則。 若要為允許從相同本機子網進行遠端訪問的公用網路建立防火牆規則,請使用 SkipNetworkProfileCheck 參數。

在 Windows 作業系統的用戶端或伺服器版本上,若要為公用網路建立防火牆規則,以移除本機子網限制並允許遠端訪問,請使用 Set-NetFirewallRule NetSecurity 模組中的 Cmdlet 來執行下列命令: Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

Enable-PSRemoting 將所有會話組態的 Enabled 屬性值設定為 $True,以啟用所有工作階段組態。

Enable-PSRemoting移除Deny_AllNetwork_Deny_All 設定。 這可讓您遠端訪問保留供本機使用的會話組態。