DCDiag
適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016
DCDiag.exe
會分析樹系或企業的網域控制站 (DC) 狀態,然後回報任何問題以協助疑難排解。 DCDiag 是使用者報告程式,這個命令列工具封裝了如何識別系統中異常行為的詳細知識。
根據預設,如果已登入 DC,DCDiag 便立即可用。 存取 DCDiag 的替代方法是在您的裝置上安裝遠端伺服器管理工具 (RSAT)。 DCDiag 必須使用提高權限的命令提示字元 (CMD) 或 PowerShell,以系統管理權限執行。
DCDiag 是由執行測試的架構和一系列測試所組成,可驗證系統的不同功能區域。 此架構會根據使用者的範圍指示詞選取要測試的 DC,例如企業、站台或單一伺服器。 測試 DC 的整體連線能力和回應性包括驗證:
- DC 可以位於 DNS 中
- DC 會回應網際網路控制訊息通訊協定 (ICMP) Ping
- DC 允許透過繫結至執行個體的方式,建立輕量型目錄存取通訊協定 (LDAP) 連線
- DC 允許使用 DsBindWithCred 函式繫結至 AD RPC 介面。
注意
封鎖 ICMP 會防止 DCDiag 如預期般運作。 雖然建議在網路的網際網路邊緣封鎖 ICMP,但在內部封鎖 ICMP 流量會導致中斷舊版群組原則、黑洞路由器偵測,或因缺乏探索選項而效率不佳的 MTU 大小等系統管理問題。 ping.exe
或 tracert.exe
之類的疑難排解工具也會受到影響。
DCDiag 語法
dcdiag [/s:<DomainController>] [/n:<NamingContext>] [/u:<Domain>\<UserName> /p:{* | <Password> | ""}] [{/a | /e}] [{/q | /v}] [/i] [/f:<LogFile>] [/c [/skip:<Test>]] [/test:<Test>] [/fix] [{/h | /?}] [/ReplSource:<SourceDomainController>]
DCDiag 使用下列參數:
參數 | 描述 |
---|---|
/s:<DomainController> |
指定要執行命令的伺服器名稱。 如果未指定此參數,則會對本機網域控制站執行測試。 DcPromo 和 RegisterInDns 測試會忽略此參數,這只能在本機執行。 |
/n:<NamingContext> |
使用 NamingContext 作為要測試的命名內容。 您可以使用 NetBIOS、網域名稱系統 (DNS) 或辨別名稱格式來指定網域。 |
/u:<Domain> \<UserName> /p:{<Password> | ""} |
使用 Domain\UserName。 DCDiag 會使用已登入使用者 (或處理序) 的目前認證。 如果需要替代認證,請使用下列選項來提供這些認證將繫結密碼做為密碼:使用引號 ("") 作為空白或 Null 密碼。 使用萬用字元 \ 來提示輸入密碼。 |
/a | 測試此 AD DS 站點上的所有伺服器。 |
/e | 測試企業中的所有伺服器。 這會覆寫 /a 。 |
/q | 寧靜。 只列印錯誤訊息。 |
/v | Verbose。 列印擴充資訊。 |
/fix | 只會影響 MachineAccount 測試。 此參數會導致測試修正網域控制站之 Machine Account 物件上的服務主體名稱 (SPN)。 |
/f:<LogFile> |
將所有輸出重新導向至記錄檔。 |
/c | 全面。 執行 DCPromo 和 RegisterInDNS 以外的所有測試,包括非預設測試。 您可以選擇將此參數與 /skip 參數搭配使用,以略過指定的測試。預設不會執行下列測試:
|
/h 或 /? | 在命令提示字元顯示說明。 |
/test:<Test> |
僅執行此測試。 使用 /skip 參數不得略過連線測試。 |
/ReplSource:<SourceDomainController> |
測試您執行命令的網域控制站與來源網域控制站之間的連線。 (此參數用於 CheckSecurityError 測試。) SourceDomainController 是實際或潛在伺服器之 DNS 名稱、NetBIOS 名稱或辨別名稱,這些伺服器將是複寫的來源網域控制站,以實際或潛在的連接物件表示。 |
DCDiag 已知測試
下表顯示預設執行的已知測試,除非另有指定。
Test | 描述 |
---|---|
廣告 | 檢查每個網域控制站是否在它應該能夠執行的角色中公告自己。 此測試會驗證電腦用來尋找網域控制站的公用 DsGetDcName 函式是否正確找到任何 DC。 如果 Netlogon 服務已停止或無法啟動,此測試就會失敗。 如果金鑰發佈金鑰 (KDC) 服務停止,則公告測試會失敗,因為從 DsGetDcName 傳回的旗標不會包含 KDC。 如果防火牆上封鎖透過 TCP 和 UDP 的連接埠 88,則儘管 KDC 無法回應 Kerberos 票證要求,但公告測試仍會通過。 |
CheckSDRefDom | 檢查所有應用程式目錄磁碟分割是否有適當的安全性描述元參考網域。 此測試會使用 LDAP 並驗證位於 cn=partitions,cn=configuration,dc=<樹系根網域>中的交叉參考物件在其 msDS-SDReferenceDomain 屬性中包含正確的網路名稱。 |
CheckSecurityError | 測試預設不會執行。 執行各種與 DC 安全性元件相關的錯誤安全性檢查,例如使用 LDAP、RPC、RPC over SMB 和 ICMP 的安全性原則或安全性資料庫問題。 這會檢查:
新增 /ReplSource 參數時,合作夥伴也會檢查:
|
連線性 | 確認 DSA 和 DNS 已註冊且可使用 LDAP 和 RPC 連線。 |
CrossRefValidation | 擷取位於 cn=partitions,cn=configuration,dc=<樹系根網域>及其交叉參考的命名內容清單,然後使用 LDAP 以類似於 CheckSDRefDom 測試的方式進行驗證。 此測試會查看 nCName、dnsRoot、nETBIOSName 和 systemFlags 屬性:
|
CutoffServers | 測試 AD 複寫,以確保 DC 在合作夥伴之間都有可運作的連線物件。 使用 DsReplicaSyncAll 函式,任何無法從任何 DC 複寫輸入或輸出的伺服器,都會被視為「截斷」,該函式會在 DC 上觸發複寫。 如果使用排程將實作不佳的 WAN 連結保持完整,請謹慎使用 /e 參數。 如果伺服器無法連絡或無法連線到網路上的 LDAP,則即使已指定 /v 參數,也不會提供任何錯誤或測試結果。 此測試會使用 RPC。 |
DcPromo | 如果基礎結構符合將裝置升級至 DC 的必要需求,請針對用戶端 DNS 設定中指定的伺服器進行測試。 此測試會在網路上使用 DNS 並檢查:
下列引數為必要項目:
|
DFSREvent | 此測試會檢查過去 24 小時內的 DFSR 事件記錄檔警告和錯誤項目,以驗證分散式檔案系統複寫 (DFSR) 服務的健康情況。 此測試會使用 RPC 和 EventLog 遠端通訊協定。 |
DNS | 使用 DNS、RPC 和 WMI 通訊協定測試全企業 DNS 健康情況檢查。 預設不會執行,而且必須明確要求。 請參閱 DNS 語法。 |
FrsEvent | 檢查過去 24 小時內檔案複寫服務 (FRS) 事件記錄檔中是否有錯誤,因為 SysVol 共用的複寫失敗可能會導致原則問題。 此測試會使用 RPC 和 EventLog 遠端通訊協定。 |
Intersite | 檢查會防止或暫時延誤站台間複寫的失敗,並預測 KCC 復原所需的時間。 此測試會使用 DRS 函式透過以下方式檢查會防止特定站台或所有站台內的站台間 AD 複寫的狀況:
必須使用 /a 或 /e 參數,因為不提供站台可讓測試執行,但略過實際測試。 此測試會透過網路使用 RPC 來測試複寫層面,並要求登錄連線以檢查 NTDS 覆寫項目。 LDAP 也可用來尋找連線資訊。 |
KccEvent | 此測試會查詢 DC 上的 KCC,以找出過去 15 分鐘內在目錄服務事件記錄檔中產生的錯誤和警告。 15 分鐘閾值與 DC 上的 Repl 拓撲更新期間 (秒) 登錄值無關。 如果防火牆規則造成此測試失敗,請參閱 KB2512643,當中涵蓋啟用這些規則以允許測試成功。 此測試會搭配 EventLog 遠端通訊協定使用 RPC。 |
KnowsOfRoleHolders | 此測試會傳回五個彈性單一主機作業 (FSMO) 角色的 DC 知識,但不會檢查所有 DC 知識是否有一致性。 使用 /e 參數會提供用於比較的資料。 此測試會使用 RPC 在目錄複寫服務 (DRS) 函式內傳回 DSListRoles。 |
MachineAccount | 檢查電腦帳戶是否已正確註冊,以及服務是否使用 LDAP 和 RPC over SMB 公告,包括檢查:
此測試也有兩個修復選項:
|
NCSecDesc | 檢查來源 DC 上所有命名內容的權限 (例如結構描述、組態等),以驗證 DC 之間的複寫和連線能力可運作。 它可確保「企業網域控制站」和「系統管理員」群組具有正確的最低權限,這是 CheckSecurityError 內執行的相同測試。 此測試會使用 LDAP。 |
NetLogons | 驗證執行 DCDiag 的使用者可以連線並讀取 SYSVOL 和 NETLOGON 共用,而不會發生任何安全性錯誤。 它也會驗證「系統管理員」、「已驗證的使用者」和「每個人」群組在 DC 上具有從網路存取這部電腦權限。 |
ObjectsReplicated | 檢查電腦帳戶和目錄系統代理程式 (DSA) 物件已複寫。 預設會驗證兩個物件,並且它們存在於每個 DC 中,而且所有其他 DC 都是最新的:
您可以使用 /objectdn:dn 參數搭配 /n:nc 參數來指定要檢查的其他物件。 此測試是搭配 DRS 函式使用 RPC 來完成。 |
OutboundSecureChannels | 此測試預設不會執行。 它會檢從查網域中的所有網域控制站到 /testdomain 參數指定的網域都存在安全通道。 /nositerestriction 參數會防止 DCDiag 將測試限制於站台中的網域控制站。 |
RegisterInDNS | 測試目錄伺服器是否可以註冊目錄伺服器定位器 DNS 記錄。 這些記錄必須存在於 DNS 中,才能讓其他電腦找到 <Active_Directory_Domain_DNS_Name> 網域的這個目錄伺服器。 這也會報告是否需要對現有 DNS 基礎結構進行任何修改。 必須使用參數 /DnsDomain :<Active_Directory_Domain_DNS_Name>。 此測試會檢查:
|
複寫 | 此測試會檢查指定 DC 上所有命名內容的 AD 複寫連接物件,前提是:
|
RidManager | 檢查相對識別碼 (RID) 主機是否可存取,以及是否:
角色持有者必須是在線上且可供 DC 存取,才能建立安全性主體 (使用者、電腦和群組),以及讓後續 DC 在網域內升級。 此測試會使用 LDAP 和 RPC。 |
服務 | 此測試會驗證各種 AD 相依服務是否正在執行、可存取,並設定為特定的啟動類型。 除非另有指定,否則這些服務會自動啟動並在共用處理序中執行:
這些服務名稱會列在登錄路徑 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 中。 此測試會使用 RPC 和服務控制管理員遠端通訊協定。 |
SysVolCheck | 此測試會讀取 DC Netlogon SysVolReady 登錄機碼,以驗證 SYSVOL 是否已就緒。 值名稱必須存在,並且值為 1 才能通過此測試,且可與 FRS 或 DFSR 複寫的 SYSVOL 搭配運作。 它不會檢查 SYSVOL 和 NELOGON 共用是否可供存取,因為這是由 CheckSecurityError 執行。 此測試使用 RPC over SMB。 |
SystemLog | 讀取和寫入過去 60 分鐘內的任何錯誤和警告,以驗證系統事件記錄檔的健康情況。 此測試會使用 RPC 和服務控制管理員遠端通訊協定。 |
拓撲 | 檢查產生的 AD 複寫拓撲已完全連線至所有 DSA。 此測試預設不會執行,而且必須明確執行。 這會檢查:
此測試會使用 RPC、LDAP 和 DsReplicaSyncAll 搭配旗標 DS_REPSYNCALL_DO_NOT_SYNC,這表示它會分析及驗證複寫拓撲,而不會實際複寫變更。 此測試不會驗證複寫合作夥伴的可用性。 讓合作夥伴離線不會在此測試中造成失敗。 它也不會測試排程是否已關閉,而防止複寫。 若要查看這些作用中的複寫結果,請使用測試 Replications 或 CutoffServers。 |
VerifyEnterpriseReferences | 對於企業中每個網域控制站上的所有物件,檢查針對 FRS 和複寫基礎結構指定的系統參考是否完整無缺。 這包括以下 DC 站台屬性和物件:
只有在網域功能等級為 Windows Server 2008 或更高版本時,才會執行這兩個 DFSR 測試。 這表示如果 DFSR 尚未移轉至 SYSVOL,將會發生預期失敗。 此測試會使用 LDAP,而且只會連絡指定的 DC。 |
VerifyReferences | 檢查 FRS 和複寫基礎結構的特定系統參考是否完好無損。 此測試會驗證單一 DC 的電腦參考屬性,包括下列 DC 站台屬性和物件:
此測試使用 LDAP,類似於 VerifyEnterpriseRefrences 測試,不同之處在於它不會檢查磁碟分割交叉參考或其他所有 DC 物件。 |
VerifyReplicas | 檢查所有應用程式目錄磁碟分割是否在所有複寫伺服器上完全具現化。 它會驗證指定的伺服器在磁碟分割容器中裝載其 crossref 屬性所指定的應用程式磁碟分割。 其運作方式如同 CheckSDRefDom,不同之處在於它不會顯示輸出資料並驗證裝載。 此測試會使用 LDAP。 |
注意
對於在網路上註冊的網域控制站,並與 DNS、LDAP 和 RPC 等其他資源連線的網域控制站,不可略過連線能力檢查。
DNS 語法
dcdiag /test:DNS [/DnsBasic | /DnsForwarders | /DnsDelegation | /DnsDynamicUpdate | /DnsRecordRegistration | /DnsResolveExtName [/DnsInternetName:<InternetName>] | /DnsAll] [/f:<LogFile>] [/x:<XMLLog.xml>] [/xsl:<XSLFile.xsl> or <XSLTFile.xslt>] [/s:<DomainController>] [/e] [/v]
DNS 測試使用下列參數:
參數 | 描述 |
---|---|
/test:DNS | 執行指定的 DNS 測試。 如果未指定測試,則會預設為 /DnsAll 。 |
/DnsBasic | 執行基本的 DNS 測試,包括網路連線能力、DNS 用戶端設定、服務可用性和區域存在。 |
/DnsForwarders | 執行 /DnsBasic 測試,並檢查轉寄站的組態。 |
/DnsDelegation | 執行 /DnsBasic 測試,並檢查適當的委派。 |
/DnsDynamicUpdate | 執行 /DnsBasic 測試,並判斷 Active Directory 區域中是否啟用動態更新。 |
/DnsRecordRegistration | 執行 /DnsBasic 測試,也會檢查位址 (A)、標準名稱 (CNAME) 和已知服務 (SRV) 資源記錄是否已註冊。 此外,會根據測試結果建立清查報告。 |
/DnsResolveExtName [/DnsInternetName:\<InternetName> ] |
執行 /DnsBasic 測試,並嘗試解析 InternetName。 如果未指定 /DnsInternetName ,則嘗試解析名稱 <www.microsoft.com>。 如果已指定 /DnsInternetName ,會嘗試解析使用者所提供的網際網路名稱。 |
/DnsAll | 執行 /DnsResolveExtName 測試以外的所有測試,並產生報告。 |
/f:<LogFile> |
將所有輸出重新導向至記錄檔。 |
/s:<DomainController> |
針對網域控制站執行測試。 如果未指定此參數,則會對本機網域控制站執行測試。 |
/e | 針對 Active Directory 樹系中的所有網域控制站執行 /test:DNS 所指定的所有測試。 |
/v | Verbose。 除了錯誤和警告的相關資訊之外,也提供成功測試結果的擴充資訊。 未使用 /v 參數時,僅提供錯誤和警告資訊。 當在摘要資料表中報告錯誤或警告時,請使用 /v 參數。 |
/x:<XMLLog.xml> |
將所有輸出重新導向至 xmllog.xml。 此參數僅可搭配 /test:DNS 選項運作。 |
/xsl:<XSLFile.xsl> 或 /xsl: <XSLTFile.xslt> |
加入參考指定工作表的處理指令。 此參數僅可搭配 /test:DNS /x:<XMLLog.xml 選項運作。 |
注意
使用 /e
參數時,DNS 測試的執行時間段在大型企業中可能很明顯。 離線的網域控制站和 DNS 伺服器將會因為 RPC 和其他通訊協定的長時間逾時而增加執行時間。
範例
連線能力測試
若要在本機網域上執行一系列連線測試,請執行下列命令:
dcdiag
成功的連線測試輸出:
Directory Server Diagnosis
Performing initial setup:
Trying to find home server...
Home Server = MapleWaffle-WS22
* Identified AD Forest.
Done gathering initial info.
Doing initial required tests
Testing server: Default-First-Site-Name\MAPLEWAFFLE-WS2
Starting test: Connectivity
......................... MAPLEWAFFLE-WS2 passed test Connectivity
Doing primary tests
Testing server: Default-First-Site-Name\MAPLEWAFFLE-WS2
Starting test: Advertising
......................... MAPLEWAFFLE-WS2 passed test Advertising
Starting test: FrsEvent
......................... MAPLEWAFFLE-WS2 passed test FrsEvent
Starting test: DFSREvent
......................... MAPLEWAFFLE-WS2 passed test DFSREvent
Starting test: SysVolCheck
......................... MAPLEWAFFLE-WS2 passed test SysVolCheck
Starting test: KccEvent
......................... MAPLEWAFFLE-WS2 passed test KccEvent
Starting test: KnowsOfRoleHolders
......................... MAPLEWAFFLE-WS2 passed test KnowsOfRoleHolders
Starting test: MachineAccount
......................... MAPLEWAFFLE-WS2 passed test MachineAccount
Starting test: NCSecDesc
......................... MAPLEWAFFLE-WS2 passed test NCSecDesc
Starting test: NetLogons
......................... MAPLEWAFFLE-WS2 passed test NetLogons
Starting test: ObjectsReplicated
......................... MAPLEWAFFLE-WS2 passed test ObjectsReplicated
Starting test: Replications
......................... MAPLEWAFFLE-WS2 passed test Replications
Starting test: RidManager
......................... MAPLEWAFFLE-WS2 passed test RidManager
Starting test: Services
......................... MAPLEWAFFLE-WS2 passed test Services
Starting test: SystemLog
......................... MAPLEWAFFLE-WS2 passed test SystemLog
Starting test: VerifyReferences
......................... MAPLEWAFFLE-WS2 passed test VerifyReferences
Running partition tests on : ForestDnsZones
Starting test: CheckSDRefDom
......................... ForestDnsZones passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... ForestDnsZones passed test CrossRefValidation
Running partition tests on : DomainDnsZones
Starting test: CheckSDRefDom
......................... DomainDnsZones passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... DomainDnsZones passed test CrossRefValidation
Running partition tests on : Schema
Starting test: CheckSDRefDom
......................... Schema passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... Schema passed test CrossRefValidation
Running partition tests on : Configuration
Starting test: CheckSDRefDom
......................... Configuration passed test
CheckSDRefDom
Starting test: CrossRefValidation
......................... Configuration passed test
CrossRefValidation
Running partition tests on : corp
Starting test: CheckSDRefDom
......................... corp passed test CheckSDRefDom
Starting test: CrossRefValidation
......................... corp passed test CrossRefValidation
Running enterprise tests on : corp.contoso.com
Starting test: LocatorCheck
......................... corp.contoso.com passed test
LocatorCheck
Starting test: Intersite
......................... corp.contoso.com passed test
Intersite
若要在特定網域控制站上執行一系列連線測試,請執行下列命令:
dcdiag /s:<DomainControllerName>
如果沒有遇到任何問題,它應該會產生與本機測試類似的結果。
將輸出到記錄檔
DCDiag 可以執行下列命令,將輸出結果儲存至文字檔:
dcdiag /s:<DomainControllerName> /f:<FileName.txt>
如果沒有指定 <FilePath>
,則結果預設會儲存至 C:\Users\<UserName>\<FileName.txt>
。
若要儲存至特定位置,請執行:
dcdiag /s:<DomainControllerName> /f:<DriveLetter>\<FilePath>\<FileName.txt>