Рассмотрим способы решения распространённой проблемы потери доверительных отношений между рабочей станцией и доменом Active Directory (#AD). Из-за этой проблемы пользователь не может авторизоваться под своей учётной записью.
При попытке входа пользователя под доменной учётной записью, могут произойти следующие ошибки.
The trust relationship between this workstation and the primary domain failed.
(Не удалось восстановить доверительные отношения между рабочей станцией и доменом.)
The security database on the server does not have a computer account for this workstation trust relationship.
(База данных диспетчера учетных записей на сервере не содержит записи для регистрации компьютера через доверительные отношения с этой рабочей станцией.)
Ошибка может возникнуть по различным факторам. Например, когда новый компьютер присоединился к домену под уже существующем именем другого компьютера, или когда виртуальная машина восстановилась с контрольной точки.
Для того, чтобы исправить ошибку, необходимо последовательно выполнить следующие пункты:
- Сбросить аккаунт компьютера в #AD.
- На проблемном компьютере зайти под локальным администратором и вывести компьютер из домена в рабочую группу.
- Перезагрузить компьютер.
- Вывести компьютер из рабочей группы и ввести обратно в домен.
- Еще раз перезагрузить компьютер.
Как обычно, привожу скрипт по автоматизации восстановления доверительных отношений. Скрипт решит проблему быстро и без перезагрузок. Запускается под администратором.
Параметр у скрипта один, это название сервера Domain Controller DC.
-S
-P_Server
- название сервера DC (контроллера домена). Если параметр не задан, скрипт выбирает для операции контроллер домена по умолчанию.
Восстановить доверительные отношения с доменом по умолчанию:
Восстановить доверительные отношения с доменом DC-server.domain.com
:
1
| .\pwsh.csc.repair.ps1 -DC 'DC-server.domain.com'
|
- Запускается проверка доверительных отношений при помощи cmdlet’а
Test-ComputerSecureChannel
. - Если проверка пройдена, скрипт завершает работу.
- Если проверка не пройдена, запускается цикл восстановления доверительных отношений с контроллером домена с временным интервалом в 5 секунд.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| <#PSScriptInfo
.VERSION 0.1.0
.GUID 52672f5d-e2c0-467a-ae1d-c0fc9009a1eb
.AUTHOR Kai Kimera
.AUTHOREMAIL mail@kai.kim
.COMPANYNAME Library Online
.COPYRIGHT 2023 Library Online. All rights reserved.
.LICENSEURI https://choosealicense.com/licenses/mit/
.PROJECTURI https://lib.onl/ru/2023/10/38fc94dd-8d37-5f9e-b556-676304976a9f/
#>
#Requires -Version 7.2
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Testing and repairing the secure channel between the local computer and its domain.
.DESCRIPTION
Verifying that the channel between the local computer and its domain is working correctly by checking the status of its trust relationships. If a connection fails, trying to restore it.
.PARAMETER P_Server
Specifies the domain controller to run the command. If this parameter is not specified, this script selects a default domain controller for the operation.
.PARAMETER P_Sleep
Sleep time (in seconds).
.EXAMPLE
.\pwsh.csc.repair.ps1
.EXAMPLE
.\pwsh.csc.repair.ps1 -DC 'DC-server.domain.com'
.LINK
https://lib.onl/ru/2023/10/38fc94dd-8d37-5f9e-b556-676304976a9f/
#>
# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURATION
# -------------------------------------------------------------------------------------------------------------------- #
param(
[Parameter(HelpMessage="Specifies the domain controller to run the command.")]
[Alias('DC')][string]$P_Server,
[Parameter(HelpMessage="Sleep time (in seconds).")]
[Alias('S')][int]$P_Sleep = 5
)
# -------------------------------------------------------------------------------------------------------------------- #
# INITIALIZATION
# -------------------------------------------------------------------------------------------------------------------- #
function Start-Script() {
Start-CSCRepair
}
# -------------------------------------------------------------------------------------------------------------------- #
# EDITING THE REGISTRY
# -------------------------------------------------------------------------------------------------------------------- #
function Start-CSCRepair() {
$Param = @{
Server = "${P_Server}"
Repair = $true
Credential = (Get-Credential)
}
do {
if (Test-ComputerSecureChannel) {
Write-Host 'Connection successful. Everything is fine!'
} else {
Write-Host 'Connection failed! The secure channel between the local computer and the domain is broken. Removing and then rebuilds the channel established by the NetLogon service...'
Test-ComputerSecureChannel @Param
Start-Sleep -s $P_Sleep
}
} until (Test-ComputerSecureChannel)
}
# -------------------------------------------------------------------------------------------------------------------- #
# -------------------------------------------------< RUNNING SCRIPT >------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #
Start-Script
|