曾经困扰Windows系统管理员的最常见问题之一是,可信任的Active Directory计算机似乎从域中脱离了。臭名昭著的“计算机和域之间的信任关系失败”错误非常常见。
在本指南中,您将学习到我在管理Active Directory的20多年中遇到的每一个技巧,以及如何使用PowerShell自动化这些技巧。
“计算机和域之间的信任关系失败”错误消息
当AD域不再信任一台计算机时,很可能是因为本地计算机的密码与Active Directory中存储的密码不匹配。

这两个密码必须同步,才能使AD信任一台计算机。如果它们不同步,您将收到臭名昭著的错误消息“计算机和域之间的信任关系失败”。
不幸的是,我和其他系统管理员从未找到过一种百分之百有效的解决方案。这就是为什么我写了这篇指南。
本指南旨在成为解决这个问题的每一个方法的单一存储库,并使用PowerShell自动化该过程。
Active Directory计算机帐户密码
當新的電腦被添加到Active Directory時,會創建一個帶有密碼的電腦帳戶。默認情況下,該密碼有效期為30天。30天後,它會自動更改。如果它更改了而客戶端密碼沒有更改,您將收到“此工作站與主域之間的信任關係失敗”的錯誤消息。
查看現有策略
您可以通過打開Group Policy管理控制台(GPMC)來查看全域策略。在GPMC中,點擊默認網域策略,並導航到計算機配置 -> Windows設置 -> 安全設置 > 本地策略 > 安全選項。
進入安全選項,尋找名為域成員: 最大機器帳戶密碼年齡的策略。

在AD加入的計算機上,打開regedit,導航到HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters注冊表鍵,並找到如下所示的MaximumPasswordAge值。

在這裡,您可以通過將DisablePasswordChange值設置為1來禁用本地計算機更改密碼的功能。
當電腦帳戶更改時,本地計算機和AD計算機帳戶應該一起更改密碼。AD知道當前密碼和上一個密碼,以防它們在短時間內不同步。
電腦帳戶密碼更改過程
當事物正常運作時,使用 Netlogon Windows 服務,計算機會自動啟動密碼更改。這在計算機重新啟動或計算機對 AD 進行身份驗證時發生。
使用 Netlogon Windows 服務,本地計算機會啟動密碼更改序列。計算機首先在域控制器上啟動密碼更改。如果成功,然後嘗試更改本地密碼以匹配 HKLM\SECURITY\Policy\Secrets<hostname>.ACC 註冊表鍵中的密碼。
通常情況下,即使計算機關機或離線時間超過30天,這個過程也運作良好,因為本地計算機會啟動密碼更改。
然而,當出現以下問題時會產生問題:
- 計算機更改了 AD 計算機帳戶,但無法更改本地密碼
- 計算機在不運行 Sysprep 的情況下被重製
- 重新安裝的操作系統嘗試使用舊的已啟用的 AD 計算機帳戶進行身份驗證
- …以及其他情況?
如果發生上述任何情況,您將看到“此工作站與主要域之間的信任關係失敗”錯誤訊息。
驗證問題
一旦您知道問題存在,如何複製它或至少有一種方法來確定哪些計算機有問題?您可以嘗試互動登錄到每台計算機,但這不可擴展,而且我不想從座位上站起來!
讓我們建立一個腳本,可以在本地和遠程運行,以確定域中的哪台計算機存在這個問題,從而永久消除“此工作站與主要域之間的信任關係已失敗”錯誤消息。
首先,由於您假設域身份驗證不起作用,您需要知道一個在管理員組中的本地用戶帳戶。希望您知道本地管理員密碼!
nltest(命令行工具)
nltest是一個老派的命令行工具,用於測試計算機的信任關係。安裝RSAT時會安裝此工具,或者直接在域控制器上可用。
您可以在計算機上登錄時運行以下命令來驗證計算機的信任關係:
警告:不推薦使用此方法,因為nltest只在啟動它的用戶上下文中運行。如果計算機的信任關係已損壞且您以本地用戶身份登錄,它將嘗試使用本地用戶的憑據連接到域。這將導致訪問被拒絕的錯誤。
netdom(命令行工具)
netdom 是另一個您可以用來驗證信任關係的命令行工具。安裝 RSAT 或直接在域控制器上安裝時,此工具也會隨之安裝。
您可以使用 netdom verify
來驗證信任關係,需提供以下資訊:
- 要驗證的電腦名稱
- 域的完全限定域名(FQDN)
- 用於驗證請求的使用者名稱
- 使用者帳戶的密碼
以下是一個範例:
通過將 PasswordO
參數的值設為 *
,netdom 會提示您輸入密碼。
Test-ComputerSecureChannel (PowerShell)
解決「此工作站與主要域之間的信任關係已失敗」問題的最佳方法之一是使用 Test-ComputerSecureChannel
cmdlet。這個 PowerShell cmdlet 隨附於 Windows 10,且使用起來更為簡單。
Test-ComputerSecureChannel
命令在 Windows 10 電腦上可以在本地運作。當以互動方式登錄到電腦後,打開 PowerShell 控制台並執行 Test-ComputerSecureChannel
,不帶任何參數。該命令將返回 True 或 False,取決於信任是否有效。
您也可以使用 Server
參數指定特定的網域控制器,以確認密碼是否同步。
該命令非常易於使用,並且具有修復選項,但我們將在修復部分進行演示。
如果您知道要檢查的計算機的本地管理員密碼並且已啟用了 PowerShell 遠程管理,您還可以使用 Invoke-Command
命令。通過使用 Invoke-Command
命令,您可以遠程一次在一台或多台計算機上運行 Test-ComputerSecureChannel
。
批量檢查信任關係
既然您知道如何遠程檢查信任關係,這裡是一段代碼片段,您可以用來檢查 所有 AD 計算機!在此腳本中,我首先測試確保計算機處於在線狀態。如果不是,它將返回 Offline。如果是,它將在每台計算機上運行 Test-ComputerSecureChannel
,並返回 True 或 False。
了解問題是第一步,但如何修復呢?現在您知道需要將本地計算機上的計算機帳戶與 AD 中存儲的計算機帳戶保持一致。
有很多不同的“解決方案”可以解決“工作站和主域之間的信任關係失敗”問題。這些解決方案可以通過GUI、PowerShell或老式的命令行工具來執行。
- 在AD中重置計算機帳戶密碼
- 重置本地計算機帳戶密碼
- 取消加入並重新加入Windows計算機
- 完全刪除計算機帳戶並重新加入Windows計算機
這是很多選項!在本指南中,我們將專注於使用PowerShell和命令行工具來解決此問題(為了完整性)。如果您還沒有使用PowerShell,建議您開始使用!
解決問題:重置計算機密碼
netdom(命令行工具)
A trust can be repaired and the “the trust relationship between this workstation and the primary domain failed” error message can be eliminated by using the old-school netdom command-line tool. If you’re logged into the computer locally as an administrative user, you can run netdom resetpwd to initiate the password reset sequence as shown below.
在這個例子中:
- DC是域控制器的名稱
- abertram是具有重置計算機帳戶權限的Active Directory用戶帳戶的名稱
- *是用於提示輸入密碼的用戶帳戶密碼的佔位符。
Reset-ComputerMachinePassword(PowerShell)
修復信任關係的最佳方法之一是使用Reset-ComputerMachinePassword
cmdlet。這個cmdlet在本地計算機上運行,並將啟動一個密碼重置序列。它的語法非常簡單。
如果您想指定一個特定的DC來重置,可以使用Server
參數和選項憑據來指定(默認為本地用戶)。
以下示例將提示輸入AD用戶名和密碼,並嘗試重置本地計算機和DC域控制器上的密碼。
如果計算機上可用PowerShell Remoting,也可以通過使用Invoke-Command
遠程運行。下面,我正在獲取計算機本地管理員帳戶的用戶名和密碼。我還獲取了具有重置此計算機AD帳戶密碼權限的憑據。然後,我使用$using
構造將$domainCredential
傳遞到遠程會話中。
請注意,即使計算機帳戶已從Active Directory中刪除,此方法也適用。創建一個同名的計算機帳戶,
Reset-ComputerMachinePassword
將確保密碼同步。
批量重置本地計算機帳戶密碼
想一次解決多台計算機上的“工作站和主域之間的信任關係失敗”錯誤嗎?沒問題。使用方便的foreach循環,我們也可以批量運行Reset-ComputerMachinePassword
。
Test-ComputerSecureChannel -Repair(PowerShell)
另一個啟動更改密碼流程的方法是運行Test-ComputerSecureChannel
,但這次使用Repair
選項。從我所知,此過程與使用Reset-ComputerMachinePassword
相同。在電腦控制台上使用Repair
參數和Credential
參數。
請確保始終在此處使用Credential
參數。如果不這樣做,就像nltest工具一樣,它將嘗試使用本地帳戶,但不起作用。
批量修復信任關係
將此命令放入我們一直在使用的方便的foreach循環中,問題迎刃而解!
修復問題:重新加入域
如果重置計算機帳戶密碼對您不起作用,總是有一個最後的選擇。您可以將計算機重新加入到Active Directory域中。雖然不是每次都需要,但有時我不得不使用此方法。
請注意,我聽說過一些報告說不需要解除聯機。您可能只需要強制進行新的加入即可。個人經驗可能有所不同。
您可以進行以下操作:
- 使用本地管理帳戶登錄計算機
- 進入系統內容
- 點擊更改
- 將其設置為工作組
- 重新啟動
- 將其設回域
請注意我提到的可以。不要這樣做。這是浪費時間,因為您可以使用PowerShell自動化它。
我找到了兩種使用 PowerShell 解除域和加入域的方法。
使用 CIM
您可以使用 Win32_ComputerSystem CIM 類別來加入域 (和解除加入)。這個類別有兩個方法可以讓您解除加入和加入電腦到域,分別是 UnJoinDomainOrWorkgroup()
和 JoinDomainOrWorkGroup()
。
由於這是 CIM,您可以遠端執行它,就像在本機上一樣方便。我猜您可能更喜歡從您的桌子上遠端執行它,所以這裡有一段可以實現這一點的程式碼片段。
消除「這個工作站與主要域之間的信任關係失敗」錯誤!
請注意上面的 FUnjoinOptions
參數。我在這裡選擇了 4。這個選項執行手動解除加入電腦時的預設行為。這個選項會停用 Active Directory 中的電腦帳戶 (如果可以找到)。如果您不想要這個行為,可以在這裡使用選項 0。
一旦電腦解除加入,您可以使用 JoinDomainOrWorkGroup()
方法重新加入域。
請注意上面的參數 FJoinOptions
。我在此處選擇指定為 3。這將執行手動加入電腦時的預設行為。此選項將建立一個 AD 電腦帳戶。您可以透過 JoinDomainOrWorkgroup 文件找到其他一些選項,例如將電腦新增到特定 OU 中。
提示:您也可以通過在
Get-CimInstance
上的ComputerName
參數中指定多個電腦,一次性解除加入和重新加入多台電腦。
使用 Remove-Computer 和 Add-Computer Cmdlet
您也可以使用內建的 PowerShell cmdlet 來使用 PowerShell 解除加入和加入電腦到網域。您可以使用 Remove-Computer
和 Add-Computer
cmdlet。
使用 PowerShell 取消加入電腦的網域,登入電腦控制台,並使用 Remove-Computer
cmdlet。提供具有取消加入電腦權限的網域憑證。您還可以指定 Restart
參數以在取消加入後強制重新啟動,並使用 Force
參數以避免提示確認。
重新啟動電腦後,您可以使用 Add-Computer
cmdlet 使用 PowerShell 將電腦加入到網域。您可以通過提供 ComputerName
參數遠程使用 Add-Computer
cmdlet。您還將使用本地使用者憑證建立連接,並使用網域憑證進行網域驗證。
當它重新啟動後,希望您不再收到「此工作站與主要網域之間的信任關係失敗」的錯誤訊息。
自動域取消加入和重新加入
因為我必須多次執行此過程,所以我建立了一個 PowerShell 腳本來自動執行所有步驟。如果您提供計算機的名稱,它將:
- 取消加入計算機
- 重新啟動並等待重新啟動
- 加入計算機
- 重新啟動並等待重新啟動
您可以透過 GitHub 嘗試這個腳本。
摘要
現在,您應該對這個問題有了全面的了解,並且對“這台工作站與主要域之間的信任關係失敗”的錯誤信息有了多種解決方案。我希望這個指南能為您提供一些見解,並使您能夠自己找到解決計算機脫離域的問題的解決方案!
更多閱讀
請務必查看其他相關文章!