關於遠端需求

簡短描述

描述在 PowerShell 中執行遠端命令的系統需求和設定需求。

詳細描述

本主題描述在 PowerShell 中建立遠端連線和執行遠端命令的系統需求、使用者需求和資源需求。 它也提供設定遠端作業的指示。

注意:許多 Cmdlet (包括 Get-Service、Get-Process、Get-WMIObject、Get-EventLog 和 Get-WinEvent Cmdlet,) 使用 Microsoft .NET Framework 方法來擷取物件,從遠端電腦取得物件。 它們不會使用 PowerShell 遠端基礎結構。 本檔中的需求不適用於這些 Cmdlet。

若要尋找具有 ComputerName 參數但不使用 PowerShell 遠端處理的 Cmdlet,請閱讀 Cmdlet 之 ComputerName 參數的描述。

系統需求

若要在 Windows PowerShell 3.0 上執行遠端會話,本機和遠端電腦必須具有下列專案:

  • Windows PowerShell 3.0 或更新版本
  • Microsoft .NET Framework 4 或更新版本
  • Windows 遠端系統管理 3.0

若要在 Windows PowerShell 2.0 上執行遠端會話,本機和遠端電腦必須具有下列專案:

  • Windows PowerShell 2.0 或更新版本
  • Microsoft .NET Framework 2.0 或更新版本
  • Windows 遠端系統管理 2.0

您可以在執行 Windows PowerShell 2.0 和 Windows PowerShell 3.0 的電腦之間建立遠端會話。 不過,只有在兩部電腦執行Windows PowerShell 3.0 時,才能使用只在 Windows PowerShell 3.0 上執行的功能,例如中斷連線並重新連線到會話的功能。

若要尋找已安裝 PowerShell 版本的版本號碼,請使用$PSVersionTable自動變數。

Windows 遠端系統管理 (WinRM) 3.0 和 Microsoft .NET Framework 4 包含在 Windows 作業系統的 Windows 8、Windows Server 2012 和更新版本中。 WinRM 3.0 包含在舊版作業系統的 Windows Management Framework 3.0 中。 如果電腦沒有所需的 WinRM 版本或 Microsoft .NET Framework,則安裝會失敗。

使用者權限

若要建立遠端會話並執行遠端命令,根據預設,目前使用者必須是遠端電腦上的 Administrators 群組成員,或提供系統管理員的認證。 否則命令會失敗。

在遠端電腦上建立會話和執行命令所需的許可權 (或在本機電腦的遠端會話中,) 是由會話連線之遠端電腦上的會話組態 (也稱為「端點」) 所建立。 具體而言,會話設定上的安全描述項會決定誰可以存取會話設定,以及誰可以使用它進行連線。

預設會話設定、Microsoft.PowerShell、Microsoft.PowerShell32 和 Microsoft.PowerShell.Workflow 上的安全性描述項只允許存取 Administrators 群組的成員。

如果目前的使用者沒有許可權使用會話設定,則命令執行命令 (使用暫存會話) 或在遠端電腦上建立持續性會話失敗。 使用者可以使用 Cmdlet 的 ConfigurationName 參數,建立會話以選取不同的會話設定,如果有的話。

電腦上的 Administrators 群組成員可以藉由變更預設會話設定上的安全性描述元,以及建立具有不同安全性描述元的新會話組態,來判斷誰有權從遠端連線到電腦。

如需會話設定的詳細資訊,請參閱 about_Session_Configurations

WINDOWS 網路位置

從 Windows PowerShell 3.0 開始,Enable-PSRemoting Cmdlet 可以在私人、網域和公用網路上的 Windows 用戶端和伺服器版本上啟用遠端處理。

在具有私人和網域網路的 Windows 伺服器上,Enable-PSRemoting Cmdlet 會建立允許不受限制遠端存取的防火牆規則。 它也會為公用網路建立防火牆規則,只允許從相同本機子網中的電腦進行遠端存取。 此本機子網防火牆規則預設會在公用網路上的 Windows 伺服器版本上啟用,但Enable-PSRemoting在變更或刪除規則時重新套用規則。

根據預設,在具有私人和網域網路的 Windows 用戶端版本上,Enable-PSRemoting Cmdlet 會建立允許不受限制遠端存取的防火牆規則。

若要在具有公用網路的 Windows 用戶端版本上啟用遠端功能,請使用 Enable-PSRemoting Cmdlet 的 SkipNetworkProfileCheck 參數。 它會建立防火牆規則,只允許從相同本機子網中的電腦進行遠端存取。

若要移除公用網路上的本機子網限制,並允許從用戶端和伺服器版本 Windows 的所有位置進行遠端存取,請使用 NetSecurity 模組中的 Set-NetFirewallRule Cmdlet。 執行以下命令:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

在 Windows PowerShell 2.0 的 Windows 伺服器上,Enable-PSRemoting會建立防火牆規則,以允許在所有網路上進行遠端存取。

在 Windows PowerShell 2.0 中,Enable-PSRemoting只在私人和網域網路上建立防火牆規則。 如果網路位置是公用的,Enable-PSRemoting會失敗。

以系統管理員身分執行

下列遠端作業需要系統管理員許可權:

  • 建立本機電腦的遠端連線。 這通常稱為「回送」案例。

  • 管理本機電腦上的會話設定。

  • 在本機電腦上檢視和變更WS-Management設定。 這些是 WSMAN: 磁片磁碟機之 LocalHost 節點中的設定。

若要執行這些工作,即使您是本機電腦上的 Administrators 群組成員,您也必須使用 [以系統管理員身分執行] 選項啟動 PowerShell。

在 Windows 7 和 Windows Server 2008 R2 中,使用 [以系統管理員身分執行] 選項啟動Windows PowerShell:

  1. 依序按一下 [開始]、[所有程式]、[配件],然後按一下 [Windows PowerShell] 資料夾。
  2. 以滑鼠右鍵按一下 [Windows PowerShell],然後按一下 [以系統管理員身分執行]。

若要使用 [以系統管理員身分執行] 選項啟動Windows PowerShell:

  1. 依序按一下 [開始]、[所有程式] 和 [Windows PowerShell] 資料夾。
  2. 以滑鼠右鍵按一下 [Windows PowerShell],然後按一下 [以系統管理員身分執行]。

[以系統管理員身分執行] 選項也適用于其他 Windows 檔案總管專案的Windows PowerShell,包括快捷方式。 只要以滑鼠右鍵按一下專案,然後按一下 [以系統管理員身分執行]。

當您從Cmd.exe等其他程式開始Windows PowerShell時,請使用 [以系統管理員身分執行] 選項來啟動程式。

如何設定您的電腦進行遠端處理

執行所有支援 Windows 版本的電腦可以在 PowerShell 中建立遠端連線,並在 PowerShell 中執行遠端命令,而不需要進行任何設定。 不過,若要接收連線,並允許使用者建立本機和遠端使用者管理的 PowerShell 會話, (「PSSessions」) 並在本機電腦上執行命令,您必須在電腦上啟用 PowerShell 遠端處理。

預設會針對 PowerShell 遠端啟用Windows Server 2012和更新版本的 Windows Server。 如果設定已變更,您可以執行 Enable-PSRemoting Cmdlet 來還原預設設定。

在所有其他支援的 Windows 版本上,您必須執行 Enable-PSRemoting Cmdlet 來啟用 PowerShell 遠端處理。

WinRM 服務支援 PowerShell 的遠端功能,這是 Microsoft 實作 Web Services for Management (WS-Management) 通訊協定。 當您啟用 PowerShell 遠端處理時,您可以變更WS-Management的預設設定,並新增系統設定,讓使用者連線到 WS-Management。

若要將 PowerShell 設定為接收遠端命令:

  1. 使用 [以系統管理員身分執行] 選項啟動 PowerShell。
  2. 在命令提示字元中,輸入:Enable-PSRemoting

若要確認遠端設定正確,請執行測試命令,例如下列命令,以在本機電腦上建立遠端會話。

New-PSSession

如果遠端設定正確,命令會在本機電腦上建立會話,並傳回代表會話的物件。 輸出應該類似下列範例輸出:

Id Name        ComputerName    State    ConfigurationName
-- ----        ------------    -----    -----
1  Session1    localhost       Opened   Microsoft.PowerShell

如果命令失敗,如需協助,請參閱 about_Remote_Troubleshooting

瞭解原則

當您從遠端工作時,您會使用兩個 PowerShell 實例,一個在本機電腦上,另一個在遠端電腦上。 因此,您的工作會受到本機和遠端電腦上的 Windows 原則和 PowerShell 原則影響。

一般而言,在連線之前和建立連線時,本機電腦上的原則會生效。 當您使用連線時,遠端電腦上的原則會生效。

Linux 和 macOS 的基本驗證限制

從 Linux 或 macOS 系統連線到 Windows 時,不支援透過 HTTP 進行基本驗證。 基本驗證可以透過 HTTPS 使用,方法是在目標伺服器上安裝憑證。 憑證必須具有符合主機名稱的 CN 名稱,不會過期或撤銷。 自我簽署憑證可用於測試用途。

如需詳細資訊 ,請參閱如何:設定 HTTPS 的 WINRM

下列命令會從提升許可權的命令提示字元執行,會在 Windows 上使用已安裝的憑證來設定 HTTPS 接聽程式。

$hostinfo = '@{Hostname="<DNS_NAME>"; CertificateThumbprint="<THUMBPRINT>"}'
winrm create winrm/config/Listener?Address=*+Transport=HTTPS $hostinfo

在 Linux 或 macOS 端,選取 [基本] 進行驗證和 -UseSSl。

注意:基本驗證無法與網域帳戶搭配使用;需要本機帳戶,而且該帳戶必須位於 Administrators 群組中。

# The specified local user must have administrator rights on the target machine.
# Specify the unqualified username.
$cred = Get-Credential username
$session = New-PSSession -Computer <hostname> -Credential $cred `
  -Authentication Basic -UseSSL

透過 HTTPS 的基本驗證替代方式是交涉。 這會導致用戶端與伺服器與承載之間的 NTLM 驗證透過 HTTP 加密。

下列說明如何使用 Negotiate with New-PSSession:

# The specified user must have administrator rights on the target machine.
$cred = Get-Credential username@hostname
$session = New-PSSession -Computer <hostname> -Credential $cred `
  -Authentication Negotiate

注意

Windows Server 需要額外的登錄設定,才能讓系統管理員使用 NTLM 進行連線,而不是內建的系統管理員。 請參閱Remote Connections驗證中的 [交涉驗證] 底下的 LocalAccountTokenFilterPolicy 登錄設定

另請參閱

about_Remote

about_Remote_Variables

about_PSSessions

Invoke-Command

Enter-PSSession

New-PSSession