Mittwoch, 19. Februar 2014

Computerkonten auf allen DCs löschen

Einige Umstände machen es nötig, dass ein Client erneut in die Domäne aufgenommen werden muss. Wird zum Beispiel ein Image / Snapshot einer VM zurückgespielt, so stimmt das lokal gespeicherte Computerkennwort nicht mehr mit dem im Active Directory gespeichertem Kennwort überein.

In der Regel reicht es aus, das Computerkonto beizubehalten und nur den "Domain Join" aufzufrischen. 

Domäne raus / rein 
Der Rechner kann zunächst in eine Arbeitsgruppe aufgenommen werden:



Nach einem Reboot kann er dann wieder in die Domäne aufgenommen werden.

Ohne in die Workgroup zu wechseln 
Wer sich an dieser Stelle den Übergang in die Workgroup sparen will, der kann wie folgt vorgehen:



Wir ändern einfach den FQDN der Domäne ("my.domain") in den Netbios-Namen der Domäne "DOMAIN". Das akzeptiert die GUI als Änderung und lässt uns
damit das AD Konto auffrischen. Danach ist ein Neustart erforderlich.



Der Rechner kann natürlich auch mittels PowerShell (Add-Computer) oder netdom der Domäne hinzugefügt werden.


Computerkonto löschen? 
In einigen Fällen ist es jedoch nötig auch das Computerkonto zu löschen.
Die ist zum Beispiel der Fall, wenn ein Client umbenannt werden soll, es aber das Konto (bzw. den Hostnamen) des Clients bereits gibt.

An dieser Stelle sollte man das AD Konto löschen.

Löscht man das Computerkonto, sollte man die vollständige Replizierung der Domain Controller abwarten. Windows hat die Eigenschaft beim Domain-Join
verschiedene DCs nach einem bereits vorhandenen Konto zu durchsuchen.
Hierbei spielt die AD-Sitezuordnung keine Rolle.

Hier ein Beispiel:

Wird haben zwei DCs am Hauptstandort. DC-MAIN01, DC-MAIN02

Zusätzlich gibt es einen DC in einem Außenbüro. DC-SITE01

Das Computerkonto wird auf DC-MAIN01 gelöscht. DC-MAIN02 repliziert relativ schnell diese Änderung. Bei DC-SITE01 dauert dies jedoch länger (abhängig davon wie die Inter-Site Replikationspläne im AD gesetzt wurden).

Versucht man direkt nach dem Löschen des Computerkontos den Client wieder in die Domain aufzunehmen, dann ist die Wahrscheinlichkeit groß, dass dieser auf DC-SITE01 das noch vorhandene Konto findet und verwendet.

Der Client funktioniert erst einmal wie gewohnt. Repliziert jedoch nun irgendwann DC-SITE01 mit DC-MAIN01 oder 02, so wird das Konto gelöscht.

Egal ob dieses noch einmal geändert wurde oder nicht.


Abwarten? 

Man könnte nun natürlich einfach abwarten, bis die Löschung repliziert wurde. 
Im Zweifelsfalle dauert dies jedoch zu lange.
In kleineren Umgebungen können wir auch die Replizierung manuell erzwingen.
Dazu könnt ihr dieses PowerShell Skript verwenden:

repadmin /viewlist * | Foreach-Object `
{
  If($_)
  {
    $StrDCName = ([regex]::match($_,"(?<=DSA_LIST\[\d?\]\s\=\s).+").value)
    Write-Host "Processing "$StrDCName -for Green
    repadmin /kcc $StrDCName 
    repadmin /syncall /A /e $StrDCName 
  }
}

Hierbei werden euch alle Inter-Site Replikationen angestoßen.

Bei größeren Umgebungen ist dies jedoch zu träge und dauert ebenfalls zu lange.


Computerkonten sofort löschen 

Die einfachste Methode ist ein Skript, das die Computerkonten auf allen DCs sofort löscht.

cls
@echo off

IF NOT EXIST "%windir%\system32\dsquery.exe" (
    echo.
    echo Program will end. dsquery.exe not found
    echo.
    pause
    exit
)


set /P PC=Please enter the Computername you want to delete:
for /f "delims=" %%A in ('dsquery computer -name %PC%') do set "DN=%%A"

echo.%DN%|findstr /C:"CN=" >nul 2>&1
if errorlevel 1 (
    cls
    echo.
    echo Program will end. No Computer found in Active Directory.
    echo.
    pause
    exit
)

cls
echo.
echo dsrm %DN% -s DCNAME -noprompt
echo.
set /P c=Do you want to run the command above [Y/N]?
if /I "%c%" EQU "Y" goto choice
if /I "%c%" EQU "J" goto choice
exit

:choice
cls
echo.
for /F %%i IN ('dsquery Server -o rdn -Forest') DO (
echo.
echo Trying to delete account on %%i
dsrm %DN% -s %%i -noprompt
echo.
)
pause


Hierbei handelt es sich um ein reguläres Batch-Skript.
Auf dem Client auf dem das Skript ausgeführt wird, müssen jedoch die AD-Commandline Tools installiert sein. Installiert man mittels RSAT das Snapin "Active Directory Users and Computers", so werden diese auf dem Client per Default mit installiert. 


Nachdem ihr das Skript ausgeführt habt, wird das Konto auf allen erreichbaren DCs gelöscht und ihr könnt den Rechner ohne Probleme in die Domäne aufnehmen.

An dieser Stelle sei gesagt, alle Skripte führt ihr wie immer auf eigene Verantwortung aus.

Kommentare:

  1. Hallo Matthias,

    Vielen Dank für den Artikel und vor allem auch das Replikationsskript. Allerdings funktioniert dieses so nicht. Die Variable bzw. der Regex-Match müsste eigentlich so aussehen:

    $StrDCName = ([regex]::match($_,"(?<=DSA_LIST\[\d*\]\s\=\s).+").value)

    Zumindest bei uns gibt es kein DC_LIST, sondern eben nur DSA_LIST und d? funktioniert nur bei einer einstelligen Zahl von Domaincontrollern.

    Mfg,

    Christian

    AntwortenLöschen
  2. Hallo Christian,

    Du hast recht, ich hatte fälschlicherweise die 2003er Version gepostet.
    Hier war es noch DC_LIST.

    Funktioniert es jetzt?

    AntwortenLöschen