about_Remote_Troubleshooting

簡短描述

描述如何在PowerShell中針對遠端作業進行疑難解答。

詳細描述

使用 PowerShell 遠端處理之前,請參閱 about_Remoteabout_Remote_Requirements ,以取得設定和基本用途的指引。

您必須具有系統管理許可權,才能檢視或變更磁碟驅動器中 WSMan: 本機計算機的設定。 這包括會話設定、受信任的主機、埠或接聽程序變更。

您必須使用 [ 以系統管理員 身分執行] 選項來執行 PowerShell。

如何以系統管理員身分執行

如需錯誤:

錯誤:拒絕存取。 您必須從提升許可權的進程執行此 Cmdlet。

若要使用 [ 以系統管理員身分執行] 選項啟動 Windows PowerShell,請以滑鼠右鍵按兩下 [開始] 選單中的 [PowerShell] 圖示,然後選取 [ 以系統管理員身分執行]。

如何啟用遠端處理

針對錯誤:

  • 錯誤:拒絕存取
  • 錯誤:遠端主機的連線遭到拒絕。 確認 WS-Management 服務正在遠端主機上執行,並設定為在正確的埠和 HTTP URL 上接聽要求。

若要接收遠端命令,必須在計算機上啟用PowerShell遠端功能。 Windows Server 2012 和較新版本的 Windows Server 預設會啟用 Windows PowerShell 遠端功能。 如果已停用遠端功能,您可以執行 Enable-PSRemoting 以重新啟用遠端功能。 如需詳細資訊,請參閱 Enable-PSRemoting

如何在企業中啟用遠端處理

針對錯誤:

  • 錯誤:拒絕存取
  • 錯誤:遠端主機的連線遭到拒絕。 確認 WS-Management 服務正在遠端主機上執行,並設定為在正確的埠和 HTTP URL 上接聽要求。

若要讓單一計算機接收遠端 PowerShell 命令並接受連線,請使用 Enable-PSRemoting Cmdlet。

若要啟用企業中多部計算機的遠端功能,您可以使用下列縮放選項。

  • 啟用 [ 允許自動設定接聽程式] 組策略,以設定接聽 程式進行遠端處理。
  • 設定並啟用 Windows 防火牆:允許本機埠例外狀況 組策略。
  • 將WinRM服務的啟動類型設定為 Automatic ,然後啟動服務。

如何使用組策略啟用接聽程式

針對錯誤:

  • 錯誤:拒絕存取
  • 錯誤:遠端主機的連線遭到拒絕。 確認 WS-Management 服務正在遠端主機上執行,並設定為在正確的埠和 HTTP URL 上接聽要求。

啟用 [ 允許自動設定接聽程序原則] 來設定網域中所有計算機的接聽 程式。

此原則位於下列組策略路徑中:

Computer Configuration\Administrative Templates\Windows Components
    \Windows Remote Management (WinRM)\WinRM service

啟用原則並指定 IPv4 和 IPv6 篩選條件。 允許通配符 (*) 。

如何在公用網路上啟用遠端功能

Enable-PSRemoting 當局域網路是公用的,而且 命令中未使用SkipNetworkProfileCheck 參數時,會傳回此錯誤。

錯誤:無法檢查防火牆的狀態

在 Windows 的伺服器版本上, Enable-PSRemoting 所有網路配置檔都會成功。 它會建立防火牆規則,允許遠端訪問私人和網域 (“Home” 和 “Work”) 網路。 針對公用網路,它會建立允許從相同本機子網進行遠端訪問的防火牆規則。

在 Windows 的用戶端版本上, Enable-PSRemoting 私人和網域網路上會成功。 根據預設,它會在公用網路上失敗,但如果您使用 SkipNetworkProfileCheck 參數, Enable-PSRemoting 會成功並建立防火牆規則,以允許來自相同本機子網的流量。

注意

在 Windows PowerShell 2.0 中,在執行 Windows 伺服器版本的電腦上, Enable-PSRemoting 建立允許私人、網域和公用網路上遠端訪問的防火牆規則。 在執行 Windows 用戶端版本的電腦上, Enable-PSRemoting 建立防火牆規則,只允許私人和網域網路上的遠端訪問。

若要移除公用網路上的本機子網限制,並允許從任何位置進行遠端訪問,請執行下列命令:

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

Cmdlet Set-NetFirewallRule 是由 NetSecurity 模組導出。

注意

不同版本的 Windows 防火牆規則名稱可能不同。 使用 Get-NetFirewallRule 查看規則清單。 啟用防火牆規則之前,請先檢視規則中的安全性設定,以確認設定適合您的環境。

如何使用組策略啟用防火牆例外狀況

針對錯誤:

  • 錯誤:拒絕存取
  • 錯誤:遠端主機的連線遭到拒絕。 確認 WS-Management 服務正在遠端主機上執行,並設定為在正確的埠和 HTTP URL 上接聽要求。

使用 Windows 防火牆:允許本機埠例外原則啟用網域中所有計算機的防火牆例外狀況。

此原則位於下列組策略路徑中:

Computer Configuration\Administrative Templates\Network
    \Network Connections\Windows Firewall\Domain Profile

此原則可讓 管理員 istrators 群組的成員建立 Windows 遠端管理 (WinRM) 服務的防火牆例外狀況。

如果原則設定不正確,您可能會收到下列錯誤:

用戶端無法連線到要求中指定的目的地。 確認目的地上的服務正在執行,且正在接受要求。

原則中的設定錯誤會導致 ListeningOn 屬性的空白值。 使用下列命令來檢查值。

Get-WSManInstance winrm/config/listener -Enumerate
cfg                   : http://schemas.microsoft.com/wbem/wsman/1/config/listener
xsi                   : http://www.w3.org/2001/XMLSchema-instance
Source                : GPO
lang                  : en-US
Address               : *
Transport             : HTTP
Port                  : 5985
Hostname              :
Enabled               : true
URLPrefix             : wsman
CertificateThumbprint :
ListeningOn           : {}

如何設定 WinRM 服務的啟動類型

如需錯誤:

錯誤:拒絕存取

PowerShell 遠端處理取決於 Windows 遠端管理 (WinRM) 服務。 服務必須執行以支持遠端命令。

在 Windows 的伺服器版本上,WinRM 服務啟動類型為 Automatic。 不過,在用戶端版本的 Windows 上,預設會停用 WinRM 服務。

使用下列範例,將 WinRM 服務的啟動類型設定為 Automatic ,並啟動服務。 ComputerName 參數接受多個值。

$invokeCimMethodSplat = @{
    ComputerName = 'Server01', 'Server02'
    Query = 'Select * From Win32_Service Where Name = "WinRM"'
    MethodName = 'ChangeStartMode'
    Arguments = @{StartMode  = 'Automatic'}
}
Invoke-CimMethod @invokeCimMethodSplat

如何重新建立預設會話設定

如需錯誤:

錯誤:拒絕存取

當您使用 Enable-PSRemoting時,它會在本機計算機上建立預設會話組態。 每當遠端命令不包含 ConfigurationName 參數時,遠端使用者就會使用這些會話設定。

如果電腦上的預設組態已取消註冊或刪除,請使用 Enable-PSRemoting Cmdlet 重新建立它們。 您可以重複使用此 Cmdlet。 如果功能已設定,則不會產生錯誤。

如果您變更預設會話組態,並想要還原原始會話組態,您可以刪除並重新建立設定。

Unregister-PSSessionConfiguration使用 Cmdlet 刪除已變更的工作階段組態。 使用 Enable-PSRemoting 來還原原始會話組態。 Enable-PSRemoting 不會變更現有的會話設定。

注意

還原預設會話組態時 Enable-PSRemoting ,它不會為組態建立明確的安全性描述元。 相反地,組態會繼承 RootSDDL 的安全性描述元,預設為安全。

若要查看 RootSDDL 安全性描述元,請輸入:

Get-Item wsman:\localhost\Service\RootSDDL

若要變更 RootSDDL,請使用 Set-Item 磁碟驅動器中的 WSMan: Cmdlet。 若要變更會話設定的安全性描述元,請使用 Set-PSSessionConfiguration Cmdlet 搭配 SecurityDescriptorSDDLShowSecurityDescriptorUI 參數。

如需磁碟驅動器的詳細資訊 WSMan: ,請參閱 about_WSMan_Provider

如何提供系統管理員認證

如需錯誤:

錯誤:拒絕存取

您必須是 管理員 istrators 群組的成員,才能連線到預設遠端會話端點。 您可以使用Enter-PSSessionInvoke-Command Cmdlet 的 New-PSSessionCredential 參數,使用替代認證連線到遠端端端點。

下列範例示範如何提供系統管理員用戶的認證。

Invoke-Command -ComputerName Server01 -Credential Domain01\Admin01

如需 Credential 參數的詳細資訊,請參閱 New-PSSession、Enter-PSSessionInvoke-Command 的說明。

如何為非系統管理使用者啟用遠端處理

如需錯誤:

錯誤:拒絕存取

根據預設,只有計算機上 管理員 istrators 群組的成員具有使用預設會話設定的許可權。 因此,只有 管理員 istrators 群組的成員才能從遠端連線到電腦。

若要允許其他使用者連線到本機計算機,請將 [執行] 許可權授與本機計算機上的預設會話設定。

下列範例會開啟屬性表,可讓您變更本機計算機上預設 Microsoft.PowerShell 會話組態的安全性描述元。

Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI

如需詳細資訊,請參閱 about_Session_Configurations

如何為其他網域中的系統管理員啟用遠端處理

如需錯誤:

錯誤:拒絕存取

當另一個網域中的使用者是本機計算機上 管理員 istrators 群組的成員時,用戶無法使用 管理員 istrator 許可權從遠端連線到本機計算機。 根據預設,來自其他網域的遠端連線只會以標準使用者許可權令牌執行。

您可以使用 LocalAccountTokenFilterPolicy 登錄項目來變更預設行為,並允許屬於 管理員 istrators 群組成員的遠端使用者以 管理員 istrator 許可權執行。

警告

LocalAccountTokenFilterPolicy 專案會停用所有受影響計算機的所有使用者的用戶帳戶控制 (UAC) 遠端限制。 在變更原則之前,請先仔細考慮此設定的影響。

使用下列命令將 LocalAccountTokenFilterPolicy 登錄值設定為 1。

$newItemPropertySplat = @{
  Name = 'LocalAccountTokenFilterPolicy'
  Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
  PropertyType = 'DWord'
  Value = 1
}
New-ItemProperty @newItemPropertySplat

如何在遠端命令中使用IP位址

如需錯誤:

錯誤:WinRM 用戶端無法處理要求。 如果驗證配置與 Kerberos 不同,或用戶端電腦未連結至網域,則必須使用 HTTPS 傳輸,或目的地電腦必須新增至 TrustedHosts 組態設定。

Cmdlet 的 New-PSSessionEnter-PSSessionInvoke-Command ComputerName 參數接受 IP 位址作為有效值。 不過,因為 Kerberos 驗證不支援 IP 位址。 當您指定IP位址時,會使用NTLM驗證。

若要支援 NTLM 驗證,您必須符合下列需求:

  • 設定計算機進行 HTTPS 傳輸,或將遠端電腦的 IP 位址新增至 本機電腦上的 TrustedHosts 清單。
  • 在所有遠端命令中使用 Credential 參數。 即使您以目前使用者身分連線,也需要這樣做。

如何從工作組型計算機遠端連線

發生錯誤

錯誤:WinRM 用戶端無法處理要求。 如果驗證配置與 Kerberos 不同,或用戶端電腦未連結至網域,則必須使用 HTTPS 傳輸,或目的地電腦必須新增至 TrustedHosts 組態設定。

當本機電腦不在網域中時,您必須符合下列需求:

  • 設定計算機進行 HTTPS 傳輸,或將遠端電腦的 IP 位址新增至 本機電腦上的 TrustedHosts 清單。
  • 確認已在工作組型計算機上設定密碼。 如果未設定密碼,或密碼值是空的,則您無法執行遠端命令。
  • 在所有遠端命令中使用 Credential 參數。 即使您以目前使用者身分連線,也需要這樣做。

如何將電腦新增至信任的主機清單

TrustedHosts 專案可以包含以逗號分隔的計算機名稱、IP 位址和完整域名清單。 允許通配符。

若要檢視或變更受信任的主機清單,請使用 WSMan: 磁碟驅動器。 TrustedHost 項目位於節點中WSMan:\localhost\Client。 只有電腦上 管理員 istrators 群組的成員才有權變更電腦上的受信任主機清單。

警告

您為 TrustedHosts 專案設定的值會影響電腦的所有使用者。

若要檢視受信任的主機清單,請使用下列命令:

Get-Item wsman:\localhost\Client\TrustedHosts

下列範例會使用通配符 (*) 將所有電腦新增至受信任的主機清單。

Set-Item wsman:localhost\client\trustedhosts -Value *

您也可以使用通配符 (*) 將特定網域中的所有電腦新增至受信任的主機清單。 例如,下列命令會在 Fabrikam 網域中新增所有計算機。

Set-Item wsman:localhost\client\trustedhosts *.fabrikam.com

下列範例會將受信任的主機清單設定為單一計算機。

$server = 'Server01.Domain01.Fabrikam.com'
Set-Item wsman:\localhost\Client\TrustedHosts -Value $server

若要將計算機名稱新增至現有的受信任主機清單,請先將目前的值儲存在變數中。 然後將值設定為字串,其中包含包含目前和新值的逗號分隔清單。

下列範例會將 Server01 新增至現有的受信任主機清單。

$newServer = 'Server01.Domain01.Fabrikam.com'
$curValue = (Get-Item wsman:\localhost\Client\TrustedHosts).Value
Set-Item wsman:\localhost\Client\TrustedHosts -Value "$curValue, $newServer"

若要將特定電腦的IP位址新增至受信任的主機清單,請使用下列命令格式:

Set-Item wsman:\localhost\Client\TrustedHosts -Value <IP Address>

例如:

Set-Item wsman:\localhost\Client\TrustedHosts -Value 172.16.0.0

若要將電腦新增至 遠端電腦的 TrustedHosts 清單,請使用 Connect-WSMan 連線來 WSMan: 驅動遠端電腦 Set-Item 以新增電腦。

如需詳細資訊,請參閱 連線-WSMan 的說明

如何在替代埠上設定遠端處理

如需錯誤:

錯誤:已拒絕與指定遠端主機的連線。 確認 WS-Management 服務正在遠端主機上執行,並設定為在正確的埠和 HTTP URL 上接聽要求。

根據預設,PowerShell 遠程會針對 HTTP 傳輸使用埠 80。 每當使用者未在遠端命令中指定 連線 ionURIPort 參數時,就會使用預設埠。

使用 Set-Item Cmdlet 來變更 接聽程式分葉節點中的埠 值。

例如,下列命令會將預設埠變更為8080。

Set-Item wsman:\localhost\listener\listener*\port -Value 8080

如何使用 Proxy 伺服器設定遠端處理

如需錯誤:

錯誤:客戶端無法連線到要求中指定的目的地。 確認目的地上的服務正在執行,且正在接受要求。

因為 PowerShell 遠端處理使用 HTTP 通訊協定,所以會受到 HTTP Proxy 設定的影響。 在具有 Proxy 伺服器的企業中,用戶無法直接存取 PowerShell 遠端電腦。

若要解決此問題,請在遠端命令中使用 Proxy 設定選項。

  • 使用 Cmdlet 的 New-PSSessionOption ProxyAccessTypeProxyAuthenticationProxyCredential 參數來建立包含 PSSessionOption 物件的變數,並搭配您企業的 Proxy 設定。
  • 使用包含 PSSessionOption 物件的變數,該變數具有Enter-PSSessionInvoke-Command 命令的 New-PSSessionSessionOption 參數。
$newPSSessionOptionSplat = @{
    ProxyAccessType = 'IEConfig'
    ProxyAuthentication = 'Negotiate'
    ProxyCredential = 'Domain01\User01'
}
$SessionOption = New-PSSessionOption @newPSSessionOptionSplat

$newPSSessionSplat = @{
    ConnectionUri = 'https://www.fabrikam.com'
    SessionOption = $SessionOption
}
New-PSSession @newPSSessionSplat

如需 Cmdlet 的詳細資訊 New-PSSessionOption ,請參閱 New-PSSessionOption

若要為目前會話中的所有遠端命令設定這些選項,請將 $PSSessionOption 喜好設定變數設定為您建立的 PSSessionOption 物件。 如需詳細資訊,請參閱 about_Preference_Variables

若要為本機計算機上所有 PowerShell 工作階段中的所有遠端命令設定這些選項,請將 $PSSessionOption 喜好設定變數新增至 PowerShell 配置檔。 如需 PowerShell 配置檔的詳細資訊,請參閱 about_Profiles

如何在64位電腦上偵測32位會話

如需錯誤:

錯誤:工具名稱>一詞<無法辨識為 Cmdlet、函式、腳本檔案或可操作程序的名稱。 請檢查名稱的拼寫,或者如果包含路徑,請確認路徑是否正確,然後再試一次。

如果遠端電腦執行 64 位版本的 Windows,而遠端命令會使用 32 位會話設定,例如 Microsoft.PowerShell32,WinRM 會載入 WOW64 進程。 Windows 會自動將所有參考 $env:Windir\System32 重新導向至 $env:Windir\SysWOW64 目錄。

因此,找不到目錄中沒有對應SysWow64專案的目錄中執行工具System32

若要尋找會話中使用的處理器架構,請使用 PROCESSOR_ARCHITECTURE 環境變數的值

$s = New-PSSession -ComputerName Server01 -ConfigurationName CustomShell
Invoke-Command -Session $s {$env:PROCESSOR_ARCHITECTURE}
x86

如需詳細資訊,請參閱 about_Session_Configurations

針對原則和喜好設定問題進行疑難解答

本節討論與本機和遠端計算機上所設定之原則和喜好設定相關的遠端問題。

如何變更 Import-PSSession 和 Import-Module 的執行原則

如需錯誤:

錯誤:Import-Module:無法載入檔案 <檔名> ,因為此系統上已停用腳本的執行。

Import-PSSessionExport-PSSession Cmdlet 會建立包含未簽署腳本檔案和格式化檔案的模組。

若要匯入這些 Cmdlet 所建立的模組,目前工作階段中的執行原則不能是 RestrictedAllSigned。 如需詳細資訊,請參閱 about_Execution_Policies

若要匯入模組而不變更本機計算機的執行原則,請使用Set-ExecutionPolicy Scope 參數,為單一進程設定較不嚴格的執行原則。

例如,下列範例會將目前進程的執行原則設定為 RemoteSigned 。 變更只會影響目前的進程。

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

您也可以使用的 PowerShell.exe ExecutionPolicy 參數,以較不嚴格的執行原則啟動單一會話。

pwsh.exe -ExecutionPolicy RemoteSigned

如何設定和變更配額

您可以使用配額來保護本機計算機和遠端計算機,避免過度使用資源,同時發生意外和惡意。 當配額與命令衝突時,PowerShell 會產生下列錯誤。

錯誤:從遠端用戶端收到的數據總數超過允許的最大值。

WSMan 提供者具有下列配額設定:

  • 節點中的 WSMan:<ComputerName> MaxEnvelopeSizeKBMaxProviderRequests 設定,以及節點中的 WSMan:<ComputerName>\Service MaxConcurrentOperationsMaxConcurrentOperationsPerUserMax 連線 ions 設定。
  • 您可以使用 Cmdlet 和喜好設定變數的 New-PSSessionOption MaximumReceivedDataSizePerCommand$PSSessionOption MaximumReceivedObjectSize 參數來保護本機計算機。
  • 若要保護遠端計算機,請使用 Cmdlet 的 Register-PSSessionConfiguration MaximumReceivedDataSizePerCommandMBMaximumReceivedObjectSizeMB 參數,將限制新增至會話組態。

若要解決錯誤,請變更遠端命令以符合配額或增加配額,以允許命令完成。

例如,下列命令會將遠端電腦上的 Microsoft.PowerShell 工作階段設定中的物件大小配額從 10 MB(預設值)增加到 11 MB。

$setPSSessionConfigurationSplat = @{
    Name = 'Microsoft.PowerShell'
    MaximumReceivedObjectSizeMB = 11
    Force = $true
}
Set-PSSessionConfiguration @setPSSessionConfigurationSplat

如需 WS 管理配額的詳細資訊,請參閱 about_WSMan_Provider

如何解決逾時錯誤

您可以使用逾時來保護本機計算機和遠端計算機,避免過度使用資源,同時發生意外和惡意。 在本機和遠端電腦上設定逾時時,PowerShell 會使用最短的逾時設定。

當逾時值不允許作業完成時,PowerShell 會終止作業併產生下列錯誤。

錯誤:WS-Management 服務無法在 OperationTimeout 中指定的時間內完成作業。

WSMan 提供者具有下列逾時設定。

  • 節點中的 MaxTimeoutMs 設定,以及節點中的 WSMan:<ComputerName>\Service EnumerationTimeoutMsMaxPacketRetrievalTimeSeconds 設定。WSMan:<ComputerName>
  • 您可以使用 Cmdlet $PSSessionOption 和喜好設定變數的 New-PSSessionOption CancelTimeoutIdleTimeoutOpenTimeout 和 OperationTimeout 參數來保護本機計算機
  • 您也可以在會話的會話設定中,以程式設計方式設定逾時值來保護遠端計算機。

若要解決錯誤,請變更命令以在逾時間隔內完成,或增加逾時間隔以允許命令完成。

下列範例會使用 OperationTimeout 值 4 分鐘建立會話選項(在 MS 中),然後使用會話選項來建立遠端會話。

$pso = New-PSSessionOption -OperationTimeout 240000
New-PSSession -ComputerName Server01 -SessionOption $pso

如需 WS 管理逾時的詳細資訊,請參閱 about_WSMan_Provider

如何中斷沒有回應的命令

某些原生程式,例如具有使用者介面的程式、提示輸入的控制台應用程式,以及使用 Win32 控制台 API 的控制台應用程式,無法在 PowerShell 遠端主機中正常運作。

使用這些程式時,您可能會看到非預期的行為,例如沒有輸出、部分輸出或未完成的遠端命令。

若要結束沒有回應的程式,請輸入 Ctrl+c。Get-Error 本機主機和遠端會話中使用 ,以檢視可能報告的任何錯誤。

如何從作業失敗中復原

當作業完成之前終止作業時,會傳回下列錯誤。

錯誤:由於線程結束或應用程式要求,I/O 作業已中止。

一般而言,當 WinRM 服務在進行其他 WinRM 作業時停止或重新啟動時,就會發生這種情況。

若要解決此問題,請確認 WinRM 服務正在執行,然後再試一次命令。

  1. 使用 [ 以系統管理員 身分執行] 選項啟動 PowerShell。

  2. 執行以下命令:

    Start-Service WinRM

  3. 重新執行產生錯誤的命令。

Linux 和macOS限制

PowerShell 遠端功能是使用透過 SSH 進行遠端處理的 Linux 和 macOS。 如需詳細資訊,請參閱 PowerShell透過SSH遠端處理。

另請參閱