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

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

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

診斷工具可用來在分級失敗的受防護網狀架構時執行第一階段,為系統管理員提供解決中斷和識別設定錯誤資產的起點。 此工具無法取代操作受防護網狀架構的健全掌握,而且只能快速驗證日常作業期間所遇到的最常見問題。

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

注意事項

在 Get-HgsTrace -RunDiagnostics) (執行 Guarded Fabric 診斷工具時,可能會傳回不正確的狀態,宣告 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 Crypto Shell 擴充功能) 來立即檢查。 不過請注意,追蹤並非專為手動診斷而設計,而且使用 的診斷設備 Get-HgsTrace處理追蹤一律會更有效率。

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

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

診斷

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

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

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

警告

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

以診斷為目標

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

本機診斷

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

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

因此,在本機收集追蹤的默認診斷調用:

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

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

隱含認證

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

警告

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

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

遠程診斷支援使用 JEA 限制 Windows PowerShell 端點。 根據預設,遠端追蹤目標會使用預設 microsoft.powershell 端點進行連線。 如果追蹤目標具有 HostGuardianService 角色,它也會嘗試使用 microsoft.windows.hgs 安裝 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 和更新的 OS 版本上執行時,受防護網狀架構診斷模組有已知的限制。 使用下列功能可能會造成錯誤的結果:

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

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