分享方式:


使用受防護網狀架構診斷工具進行疑難解答

本文說明如何使用受防護網狀架構診斷工具來識別和補救受防護網狀架構基礎結構的部署、組態和進行中的常見失敗。 這包括主機守護者服務 (HGS)、所有受防護主機,以及 DNS 和 Active Directory 等支援服務。

適用於: Windows Server 2022、Windows Server 2019、Windows Server 2016

診斷工具可用於在對失敗的受防護網狀架構分級時執行第一次傳遞,為系統管理員提供解決中斷和識別設定錯誤的資產的起點。 此工具不是對操作受防護網狀網狀架構之健全把握的替代工具,只是為了快速驗證日常作業中遇到的最常見問題。

本文中使用的 Cmdlet 完整文件可以在 HgsDiagnostics 模組參考中找到。

注意

執行受防護網狀架構診斷工具 (Get-HgsTrace -RunDiagnostics) 可能會傳回不正確的狀態,聲稱 HTTPS 設定中斷,但事實上未中斷或未使用。 任何 HGS 認證模式可能都會傳回此錯誤。 可能的根本原因如下:

  • HTTPS 確實設定不正確/中斷
  • 您使用管理員信任的證明,且信任關係已中斷。 不論 HTTPS 是否已正確設定、不當使用,都是如此。 請注意,以 Hyper-V 主機為目標時,診斷只會傳回這個不正確的狀態。 如果診斷是以主機守護者服務為目標,便會傳回正確的狀態。

快速入門

您可以從具有本機系統管理員權限的 Windows PowerShell 工作階段呼叫以下命令來診斷受防護主機或 HGS 節點:

Get-HgsTrace -RunDiagnostics -Detailed

這會自動偵測目前主機的角色,並診斷可自動偵測到的任何相關問題。 由於具有 -Detailed 開關,此流程期間產生的所有結果都會顯示。

本主題的其餘部分將提供 Get-HgsTrace 進階用法的詳細逐步解說,例如一次診斷多部主機,以及偵測複雜的跨節點設定錯誤。

診斷概觀

任何已安裝與受防護的虛擬機器相關的工具和功能的主機 (包括執行 Server Core 的主機) 都可以使用受防護網狀架構診斷。 目前,診斷隨附於下列功能/套件:

  • 主機守護者服務角色
  • 主機守護者 Hyper-V 支援
  • 適用於網狀架構管理的 VM 屏蔽工具
  • 遠端伺服器管理工具 (RSAT)

這表示診斷工具將可在所有受防護主機、HGS 節點、特定網狀架構管理伺服器,以及任何已安裝 RSAT 的 Windows 10 工作站上使用。 您可以從上述任何機器叫用診斷,以診斷受防護網狀架構中任何受防護主機或 HGS 節點。使用遠端追蹤目標,診斷可以找出並連線到執行診斷的電腦以外的主機。

診斷鎖定的主機稱為「追蹤目標」。追蹤目標是以其主機名稱和角色來識別。 角色描述指定追蹤目標在受防護網狀架構中執行的功能。 目前,追蹤目標支援 HostGuardianServiceGuardedHost 角色。 請注意,主機可以一次佔用多個角色,但診斷也支援此功能,不過這不應該在生產環境中完成。 HGS 和 Hyper-V 主機應隨時保持獨立且不同。

系統管理員可以執行 Get-HgsTrace 來開始任何診斷工作。 此 Cmdlet 會根據運行時間所提供的參數來執行兩個不同的函式:追蹤集合和診斷。 這兩個功能構成整個受防護網狀架構診斷工具。 雖然沒有明確要求,但大部分有用的診斷都需要都需要只能使用追蹤目標上的系統管理員認證收集的追蹤。 如果執行追蹤集合的使用者持有的權限不足,則需要提高的追蹤將會失敗,而其他追蹤會通過。 這允許在特殊權限不足的操作員執行分級時進行部分診斷。

追蹤集合

根據預設,Get-HgsTrace 只會收集追蹤,並將其儲存至暫存資料夾。 追蹤會採用以目標主機命名的資料夾形式,其中包含描述主機設定方式的特殊格式檔案。 追蹤也包含描述如何叫用診斷來收集追蹤的中繼資料。 執行手動診斷時,診斷會使用此資料來解除凍結主機的相關資訊。

如有必要,可以手動檢閱追蹤。 所有格式都是人類可讀取的(XML),或者可以使用標準工具(例如,X509 憑證和 Windows 密碼編譯殼層延伸模組)輕鬆檢查。 不過請注意,追蹤並非針對手動診斷而設計,而且使用的診斷設施 Get-HgsTrace處理追蹤一律更有效率。

執行追蹤集合的結果不會指出指定主機的健康情況。 只會指出已成功收集追蹤。 您必須使用 的 Get-HgsTrace 診斷設施來判斷追蹤是否表示失敗的環境。

您可以使用 -Diagnostic 參數將追蹤集合限制為僅收集操作指定診斷所需的追蹤。 這會減少收集的資料量,以及叫用診斷所需的權限。

診斷

透過 -Path 參數向 Get-HgsTrace 提供追蹤的位置,並指定 -RunDiagnostics 開關,可以診斷收集的追蹤。 此外,Get-HgsTrace 可以藉由提供 -RunDiagnostics 開關和追蹤目標清單在單一階段執行收集和診斷。 如果未提供追蹤目標,則目前的電腦會作為隱含目標,並藉由檢查已安裝的 Windows PowerShell 模組來推斷其角色。

診斷會以階層式格式提供結果,其中顯示哪些追蹤目標、診斷集和個別診斷是特定失敗的原因。 如果可以判斷下一步應採取哪些動作,則失敗會包括補救和解決建議。 根據預設,通過和不相關的結果會隱藏。 若要查看診斷所測試的所有內容,請指定 -Detailed 開關。 這會導致不論其狀態為何,所有結果都會顯示。

您可以使用 參數來限制執行的 -Diagnostic 一組診斷。 這可讓您指定應針對追蹤目標執行哪些診斷類別,並隱藏所有其他類別。 可用診斷類別的範例包括網路、最佳做法和用戶端硬體。 請參閱 Cmdlet 文件查詢可用診斷的最新清單。

警告

診斷不是強式監視和事件回應管線的替代專案。 有一個 System Center Operations Manager 套件可用於監視受防護網狀架構,以及各種事件記錄通道,可監視這些通道以及早偵測問題。 然後,您可以使用診斷來快速對這些失敗分級,並建立動作。

以診斷為目標

Get-HgsTrace 會針對追蹤目標運作。 追蹤目標是對應至受防護網狀架構內 HGS 節點或受防護主機的物件。 它可視為的 PSSession延伸模組,其中只包含診斷所需的資訊,例如網狀架構中主機的角色。 目標可以隱含產生(例如本機或手動診斷),或明確使用 New-HgsTraceTarget Cmdlet 產生。

本機診斷

根據預設,Get-HgsTrace 會以 localhost 為目標 (也就是叫用 Cmdlet 的位置)。 這稱為隱含本機目標。 只有在 -Target 參數中未提供任何目標,而且 -Path 中找不到任何預先存在的追蹤時,才會使用隱含本機目標。

隱含本機目標會使用角色推斷來判斷目前主機在受防護網狀架構中扮演的角色。 這是以已安裝的 Windows PowerShell 模組為基礎,其大致對應到系統上已安裝的功能。 模組的存在 HgsServer 會導致追蹤目標擔任角色 HostGuardianService ,而模組的存在 HgsClient 會導致追蹤目標扮演 角色 GuardedHost。 給定主機可能會有這兩個模組存在,在此情況下,它會被視為 和 HostGuardianService GuardedHost

因此,用於在本機收集追蹤的預設診斷調用:

Get-HgsTrace

這相當於下列專案:

New-HgsTraceTarget -Local | Get-HgsTrace

提示

Get-HgsTrace 可以透過管線或直接透過 -Target 參數接受目標。 兩者在操作上沒有任何差異。

使用追蹤目標進行遠程診斷

透過產生具有遠端連線資訊的追蹤目標,就可以從遠端診斷主機。 只需要主機名稱和一組能使用 Windows PowerShell 遠端連線的認證。

$server = New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Role HostGuardianService -Credential (Enter-Credential)
Get-HgsTrace -RunDiagnostics -Target $server

此範例會產生收集遠端使用者認證的提示,然後使用 位於 hgs-01.secure.contoso.com 的遠端主機執行診斷,以完成追蹤收集。 產生的追蹤會下載到 localhost,然後進行診斷。 診斷結果會與執行本機診斷時相同。 同樣地,不需要指定角色,因為它可以根據安裝在遠端系統上的 Windows PowerShell 模組來推斷。

遠端診斷會利用 Windows PowerShell 遠端執行功能來存取遠端主機。 因此,這是追蹤目標已啟用 Windows PowerShell 遠端功能的必要條件(請參閱 啟用 PSRemoting),且 localhost 已正確設定以啟動目標連線。

注意

在大部分情況下,只有 localhost 是相同 Active Directory 樹系的一部分,而且會使用有效的 DNS 主機名。 如果您的環境使用更複雜的同盟模型,或您想要使用直接 IP 位址進行連線,則可能需要執行其他設定,例如設定 WinRM 受信任的主機

您可以使用 Test-HgsTraceTarget Cmdlet 驗證追蹤目標是否已正確具現化並設定為接受連線:

$server = New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Role HostGuardianService -Credential (Enter-Credential)
$server | Test-HgsTraceTarget

這個 Cmdlet 只有在能夠建立具有追蹤目標的遠端診斷工作階段時,才會Get-HgsTrace傳回 $True 。 失敗時,此 Cmdlet 會傳回相關的狀態資訊,以進一步針對 Windows PowerShell 遠端連線進行疑難解答。

隱含認證

從具有足夠權限的使用者執行遠端診斷以從遠端連線到追蹤目標時,不需要提供認證給 New-HgsTraceTargetGet-HgsTrace Cmdlet 會自動重複使用開啟連線時叫用 Cmdlet 的使用者認證。

警告

某些限制適用於重複使用認證,特別是在執行所謂的「第二個躍點」時。嘗試在另一部電腦重複使用遠端工作階段內部的認證時,就會發生這種情況。 您必須 設定 CredSSP 以支援此案例,但這不是受防護網狀架構管理和疑難解答的範圍。

使用 Windows PowerShell Just Enough Administration (JEA) 和診斷

遠端診斷支援使用 Windows PowerShell 端點,但受到 JEA 限制。 根據預設,遠端追蹤目標會使用預設 microsoft.powershell 端點進行連線。 如果追蹤目標具有 HostGuardianService 角色,它也會嘗試使用安裝 HGS 時所設定的 microsoft.windows.hgs 端點。

如果要使用自訂端點,則必須在使用 -PSSessionConfigurationName 參數來建構追蹤目標時指定工作階段設定名稱,如下所示:

New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Role HostGuardianService -Credential (Enter-Credential) -PSSessionConfigurationName "microsoft.windows.hgs"

診斷多部主機

您可以一次將多個追蹤目標傳遞至 Get-HgsTrace。 這包括本機和遠端目標的混合。 每個目標會接著追蹤,然後會同時診斷每個目標的追蹤。 診斷工具可以使用您部署的增強知識,來識別無法偵測的複雜跨節點設定錯誤。 使用此功能只需要同時提供來自多部主機的追蹤 (在手動診斷的情況下),或在呼叫 Get-HgsTrace 時以多個主機為目標 (在遠端診斷的情況下)。

以下是使用遠端診斷來分類由兩個 HGS 節點和兩個受防護主機組成的網狀架構的範例,其中一個受防護主機正用來啟動 Get-HgsTrace

$hgs01 = New-HgsTraceTarget -HostName "hgs-01.secure.contoso.com" -Credential (Enter-Credential)
$hgs02 = New-HgsTraceTarget -HostName "hgs-02.secure.contoso.com" -Credential (Enter-Credential)
$gh01 = New-HgsTraceTarget -Local
$gh02 = New-HgsTraceTarget -HostName "guardedhost-02.contoso.com"
Get-HgsTrace -Target $hgs01,$hgs02,$gh01,$gh02 -RunDiagnostics

注意

診斷多個節點時,您不需要診斷整個受防護網狀架構。 在許多情況下,包含可能涉及指定失敗狀況的所有節點就已足夠。 這通常是受防護主機的子集,以及來自 HGS 叢集的一些節點。

使用已儲存的追蹤手動診斷

有時候,您可能想要重新執行診斷,而不需要再次收集追蹤,或您可能沒有必要的認證來遠端診斷網狀架構中的所有主機。 手動診斷是一種機制,您仍然可以使用 Get-HgsTrace 來執行整個網狀架構分級,但不需要使用遠端追蹤集合。

執行手動診斷之前,您必須確定網狀架構中每個主機的系統管理員已準備就緒,並願意代表您執行命令。 診斷追蹤輸出不會公開一般視為敏感性的任何資訊,不過使用者有責任判斷是否安全地將這項資訊公開給其他人。

注意

追蹤不會匿名並顯示網路組態、PKI 設定,以及其他有時被視為私人資訊的組態。 因此,追蹤應只傳送至組織內的受信任實體,且絕不公開張貼。

執行手動診斷的步驟如下:

  1. 要求每個主機系統管理員執行 Get-HgsTrace,指定已知的 -Path,以及您要針對結果追蹤執行的診斷清單。 例如:

    Get-HgsTrace -Path C:\Traces -Diagnostic Networking,BestPractices
    
  2. 要求每個主機系統管理員將產生的追蹤資料夾封裝並傳送給您。 此流程可以透過電子郵件、檔案共用或任何其他根據貴組織建立的作業原則和流程的機制來驅動。

  3. 將所有已接收的追蹤合併到單一資料夾,不包含其他內容或資料夾。

    例如,假設您的系統管理員已從名為 HGS-01、HGS-02、RR1N2608-12 和 RR1N2608-13 的四台電腦傳送收集的追蹤。 每位系統管理員都會以相同名稱將資料夾傳送給您。 您會組合如下所示的目錄結構:

    FabricTraces
    |- HGS-01
    |  |- TargetMetadata.xml
    |  |- Metadata.xml
    |  |- [any other trace files for this host]
    |- HGS-02
    |  |- [...]
    |- RR1N2608-12
    |  |- [...]
    |- RR1N2608-13
       |- [..]
    
  4. 執行診斷,在 -Path 參數上提供所組合的追蹤資料夾路徑,並指定 -RunDiagnostics 開關,以及您要求系統管理員收集追蹤的診斷。 診斷會假設它無法存取路徑內找到的主機,因此會嘗試只使用預先收集的追蹤。 如果有任何追蹤遺失或損毀,診斷只會讓受影響的測試失敗,並正常進行。 例如:

    Get-HgsTrace -RunDiagnostics -Diagnostic Networking,BestPractices -Path ".\FabricTraces"
    

混合已儲存的追蹤與其他目標

在某些情況下,您可能會有一組想要擴充其他主機追蹤的預先收集追蹤。 您可以在單一診斷呼叫中,將預先收集的追蹤與其他目標混合在一起並診斷。

依照上述指定之追蹤資料夾的收集及組合指示,使用在預先收集的追蹤資料夾中找不到的其他追蹤目標呼叫 Get-HgsTrace

$hgs03 = New-HgsTraceTarget -HostName "hgs-03.secure.contoso.com" -Credential (Enter-Credential)
Get-HgsTrace -RunDiagnostics -Target $hgs03 -Path .\FabricTraces

診斷 Cmdlet 會識別所有預先收集的主機,以及一個仍然需要追蹤的額外主機,並執行必要的追蹤。 接著會診斷所有預先收集且剛收集的追蹤的總和。 產生的追蹤資料夾將同時包含舊追蹤和新追蹤。

已知問題

受防護網狀架構診斷模組在 Windows Server 2019 或 Windows 10 版本 1809 和更新版本的作業系統上執行時,具有已知的限制。 使用下列功能可能會導致錯誤的結果:

  • 主機金鑰證明
  • 僅證明 HGS 設定 (適用於 SQL Server Always Encrypted 案例)
  • 在證明原則預設值為 v2 的 HGS 伺服器上使用 v1 原則成品

使用這些功能時發生 Get-HgsTrace 失敗,不一定表示 HGS 伺服器或受防護主機設定錯誤。 使用其他診斷工具 (例如受防護主機上的 Get-HgsClientConfiguration) 測試主機是否已通過證明。