Главная

Wednesday, 2 January 2019

Восстановление доверительных отношений в домене.

Всем привет.

Время от времени наблюдаю как некоторые хосты могут выпадать из доверительных отношений в домене по разным причинам. Например из-за не смены пароля пользователя в домене вовремя согласно внутренней политики кампании.

Как это лечится?

Самый простой способ это вывести хост из домена и тут же ввести его обратно. Но ходить к хосту ножками не всегда возможно. Поэтому пробуем это сделать через Powershell.

Мне известно два варианта. Пусть "AdminDC" это наш администратор домена, а "admin" это наш локальный администратор на подопытном хосте. Все операции проводим с хоста администратора домена.

$user = "FORZA\AdminDC"
$pass = ConvertTo-SecureString -String 'MyPasssword' -Force  -AsPlainText
$cred = New-Object System.Management.Automation.PSCredential($user,$pass)

$Hostname = Read-Host "Please enter the computers hostname that you wish to remove and re-add to the domain"

$DomainName = Read-Host "Please enter the Domain name"

# Вариант №1
Используем два известных командлета Remove-Computer и Add-Computer.

# выводим компьютер из домена в группу WKS
Remove-Computer -ComputerName $Hostname -WorkgroupName "WKS" -UnjoinDomaincredential $user -PassThru -Verbose -Restart

# возможно хост надо перегрузить принудительно
Restart-Computer -ComputerName $Hostname -Wait

# а теперь заводим компьютер в домен
Add-Computer -ComputerName $Hostname -LocalCredential "$Hostname\admin" -Credential $cred -DomainName $DomainName -Force -Verbose -Restart

Замечу что при выводе из домена вам может помешать правила Firewall-а подопытного хоста,
а при вводе в домен отсутствие прав на выполнение удаленных WMI-запросов.



# Вариант №2
Есть еще два командлета для манипуляции с членством в домене, UnjoinDomainOrWorkGroup и
JoinDomainOrWorkGroup соответственно.

Например, ввод хоста в домен может выглядеть так.

$localstring = $Hostname + "\admin"
$localcred = Get-Credential $localstring -Message "Введите данные пользователя, являющимся локальным администратором на удаленном компьютере:"

$Computer = Get-WmiObject Win32_ComputerSystem -ComputerName $Hostname -Credential $localcred
$domain = $Computer.Domain
$domain

    $r = $Computer.JoinDomainOrWorkGroup($domain, $cred.GetNetworkCredential().Password, $cred.UserName, 0, 1)
    if ($r.ReturnValue -eq "0"){
     Sleep(3)
     $winOS = Get-WmiObject Win32_OperatingSystem -ComputerName $Hostname -Credential $localcred
     $sresult = $winOS.win32shutdown(6)
     if($sresult.ReturnValue -ne "0"){
      [System.Windows.Forms.MessageBox]::Show("Не удалось перегрузить компьютер. Ошибка №" + $sresult.ReturnValue, "Ошибка")
     }
    }
    else {
     [System.Windows.Forms.MessageBox]::Show("Не удалось ввести компьютер в домен. Ошибка №" + $r.ReturnValue, "Ошибка")
    }


И бонусный вариант.
# Вариант №3

Недавно встретил информацию что вернуть доверительные отношения в домене можно вызовом одного единственного командлета

Test-ComputerSecureChannel -Repair -credential $cred -verbose

Пользуйтесь.

No comments:

Post a Comment

А что вы думаете по этому поводу?