DHCP Migration von Server 2008 R2 zu Server 2016

Die DHCP Migration von Server 2008 R2 zu Server 2016 sollte via netsh oder Powershell durchgeführt werden. Die Migration über die GUI der DHCP Konsole wirft einen Fehler und funktioniert u.U. nicht.

Zunächst muss die aktuelle DHCP Datenbank exportiert werden:

Anmeldung auf dem DHCP Server und Start einer administrativen CMD.

Netsh
DHCP
Server \<DHCP Server IP Addresse>
Export c:tempserver_dhcp-db all

Dadurch wird eine Datei namens c:tempserver_dhcp-db erstellt, welche auf den neuen DHCP Server kopiert werden muss.

Net stop DHCPserver
Del c:windowssystem32DHCPDHCP.mdb
Net start DHCPserver
Netsh
DHCP
Server \<DHCP Server IP Addresse>
Import c:tempserver_dhcp-db
Exit
Net stop DHCPserver
Net start DHCPserver

Danach kann der alte DHCP Server abgeschaltet werden. Die alte Datenbank mit allen Reservierungen sollte nun auf dem neuen Server vorhanden sein.

Import und Export via Powershell

Das Vorgehen kann auch via Powershell durchgeführt werden.

Der alte DHCP Server muss dazu mindestens unter Server 2008 laufen.

Auf dem Zielsystem öffnet man eine administrative Powershell. Darin wird nun das neue DHCP Server Modul genutzt.

Export-dhcpserver –computername ALTER.DHCP.SERVER –leases –file c:tempdhcp.xml –verbose

Nun kann man den alten DHCP Server abschalten und die Einstellungen in den neuen Server einspielen.

Import-dhcpserver –computername NEUER.DHCP.SERVER –leases –file c:tempdhcp.xml –backuppath C:tempBackup -verbose

Der Parameter backuppath ist zwingend. Dort wird die aktuelle DHCP Konfiguration zur Sicherung abgelegt.

Advertisements

SYSVOL Replikation – Migration von FRS zu DFS Replikation

Der Begriff SYSVOL (%SystemRoot%SYSVOL) bezieht sich auf einen Satz von Dateien und Ordnern, die auf der lokalen Festplatte jedes Domänencontrollers in einer Domäne gespeichert sind und durch den Dateireplikationsdienst (File Replication Service/FRS) repliziert werden. Netzwerkclients greifen über die folgenden freigegebenen Ordner auf den Inhalt der Struktur SYSVOL zu:

  • NETLOGON
  • SYSVOL

Der Dateireplikationsdienst (File Replication Service, FRS) synchronisiert Ordner mit Dateiservern, die den Dateireplikationsdienst anstelle der neueren DFS-Replikationstechnologie verwenden.

DFS-Replikation ermöglicht das Synchronisieren von Ordnern auf mehreren Servern über LAN- oder WAN-Netzwerkverbindungen. Dieser Dienst verwendet das RDC-Protokoll (Remote Differential Compression), um nur die Teile der Dateien zu aktualisieren, die seit der letzten Replikation geändert wurden.

In den alten Windows Server Verionen < 2003 R2 wurde FRS für die Replikation des SYSVOL Ordners auf andere Domain Controller verwendet. Ab Server 2008 wird primär DFS für die Replikation verwendet. FRS wird allerdings immer noch unterstützt.

Für die Migration von FRS zu DFS wird das Tool “Dfsrmig.exe” genutzt. Damit die Migration funktioniert muss die Domäne mindestens auf dem Funktionslevel von Server 2008 sein.

Ob FRS genutzt wird oder nicht findet man via Powershell

dfsrmig /getglobalstate

heraus.

Die Ausgabe sagt aus, dass die DFS-Replakations-Migration noch nicht eingeleitet wurde.

Die Migration an sich hat vier verschiedene Stati:

  1. Status 0 – Starten
  2. Status 1 – Vorbereitet
  3. Status 2 – Umgeleitet
  4. Status 3 – Entfernt

Status 0

Hierbei wird der Sysvol Ordner auf alle Domain Controller repliziert, um einen konsistenten Status auf allen Systemen zu erreichen.

Status 1

FRS repliziert weiterhin den Ordner. Zusätzlich legt DFS eine Kopie an, die sich unter %SystemRoot%SYSVOL_DFRS befindet. Allerdings ist dieses Verzeichnis inaktiv. FRS ist weiterhin der primäre Dienst.

Status 2

Hier ist es andersherum. DFS antwortet auf die Anfragen und FSR ist inaktiv, repliziert sich allerdings weiterhin.

Status 3

Hier wird der FSR Dienst gestoppt und Windows entfernt den Original Sysvol Ordner. Ab diesem Punkt ist kein Rollback mehr möglich.

Migration

Die Migration wird hier unter Powershell durchgeführt. Man muss Mitglied der Rolle Domänen- oder Enterprise Admin sein.

Wurde die DFSR-Migration noch nicht initialisiert, kann dies mit dem Befehl

dfsrmig /setglobalstate 0

gestartet werden.

Anschließend wird in den Status Vorbereitet gewechselt:

dfsrmig /setglobalstate 1

Durch Eingabe von

dfsrmig /getmigrationstate

kann man sich den aktuellen Status der Migration anschauen.

Wenn der Stand konsistent ist, kann weiter gemacht werden.

dfsrmig /setglobalstate 2

dfsrmig /setglobalstate 3

Abschließend sollte nun nicht nur der FRS Dienst gestoppt und deaktiviert sein, sondern ebenfalls die Sysvol Shares auf das neue Verzeichnis gemappt sein.

Durch

net share

werden die Netzlaufwerke angezeigt.

GPO Name anhand der SID herausfinden

Kurz notiert:

Um den Namen einer GPO herauszufinden, einfach eine cmd starten und folgendes eingeben:
dsquery * domainroot -filter "(&(name={SID}))" -attr displayname
Als Ausgabe erfolgt dann der jeweilige Name (ohne “displayname” werden mehr Infos angezeigt):

displayname
[Konf.] Standarddrucker

Bluescreen Domain Controller – C00002E2 Directory Services Could Not Start

Nach einem Storage Crash konnte der zweite Domain Controller nicht mehr starten.

STOP: c00002e2 Directory Services could not start because of the following error:
A device attached to the system is not functioning.
Error Status: 0xc0000001.
Please shutdown this system and reboot into Directory Services Restore Mode, check the event log for more detailed information.

bluescreen-c00002e2
Das Problem ist, dass es sich hierbei um die Datenbank des AD handelt…

Zunächst bootet man via F8 in den Verzeichniswiederherstellungsmodus (Directory Services Restore Mode).
Ist die Maschine gebootet und man konnte sich anmelden, startet man eine Konsole und gibt folgendes ein:
ntdsutil.exe
activate instance ntds
files

Sollte es dort ein Problem geben, so erscheint eine Fehlermeldung:

Could not initialize the Jet engine: Jet Error -501. Failed to open DIT for AD DS/LDS instance NTDS. Error -2147418113

Um sie zu beheben, muss man alle Logdateien im Verzeichnis C:windowsntds umbenennen. .log -> .log_old o.ä.
Anschließend kann der Server neu gestartet werden und die Datenbank sollte wieder in Ordnung sein.

Lokale Administratoren aller Domänen Computer auflisten – Powershell

Möchte man eine Übersicht aller lokalen Administratoren-Konten / -Gruppen der Computer innerhalb einer Domäne erhalten, kann man das via Powershell Skript automatisiert laufen lassen. Das Ergebnis ist entweder in der Konsole sichtbar oder kann via Out-file in eine Datei geschrieben werden. Für das Skript wird das Active Directory Modul benötigt.

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”]

function get-adminmember-ofall{
$searchOU='ou=06computergruppen,dc=example,dc=local'
$anz_comp = Get-ADComputer -filter * -SearchBase $searchOU
$anz_comp = $anz_comp.count
$i=1
Get-ADComputer -filter * -SearchBase $searchOU|
     Foreach-Object{
			write-host "$i von $anz_comp"
			$server=$_.Name
			if(Test-Connection $_.Name -q){
				$i++
                Write-Host "Ueberpruefe $server" -fore green
                ([ADSI]"WinNT://$server/Administratoren").psbase.invoke('Members') |
                ForEach-Object{
                     $member=$_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
                     New-Object PSObject -Property @{Server=$server;Account=$member}
                }
			}else{
				$i++
                Write-Host "$server - keine Verbindung" -fore red
           }
     }
}

lokale admins[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Verwaiste SIDs von Verzeichnissen und Dateien entfernen – Powershell

Wenn man Berechtigungen auf Ordner setzt und die Gruppe bzw. der Benutzer im Active Directory gelöscht wurde, bleiben die SIDs auf den Verzeichnissen und Dateien bestehen. Sie können dann allerdings nicht mehr aufgelöst werden. Somit steht dort anstelle des Usernamens nur die alte SID.
Diese kann man via Skript automatisiert finden und entfernen lassen.
Über
Import-Module .Dateiname_des_Skripts.ps1
kann das Skript geladen werden und anschließen unter Angabe des Pfades ausgeführt werden.
Remove-orphanedSID -path "C:..."
Über ein Aktivieren des Attributs “-whatif” kann erst einmal ein Testlauf erfolgen, der die SIDs noch nicht entfernt.

Function Remove-orphanedSID
{
[CmdletBinding()]
	Param
	(
		#Define parameters
		[Parameter(Mandatory=$true,Position=1)]
		[String]$path
	)
write-host "Sammle alle Ordner/Dateien"
$Apath = gci $path -recurse
write-host "Pruefe, das kann einige zeit in Anspruch nehmen"
foreach ($file in $Apath)
{
	$PSPath = $file.fullname
	try
		{
			$acl = Get-Acl -Path $PSPath
			foreach($acc in $acl.access )
			{
				$value = $acc.IdentityReference.Value
				if($value -match "S-1-5-*")
				{
					$acl.RemoveAccessRule($acc) | out-null
					Write-Host "Entferne SID: $value  von  $PSPath "
					Set-Acl -Path $PSPath -AclObject $acl #-whatif
				}
			}
		}
		catch
		{
			write-host $error
		}
}
}

Active Directory Object Restore via Powershell

Neben der Wiederherstellung von versehentlich gelöschten Objekten im AD durch ldp.exe, kann sie auch via Powershell erfolgen.

Notwendig ist dafür das ActiveDirectory Modul, welches in den RSAT Paketen enthalten ist und über die Windows Funktionen aktiviert werden kann.

Durch

Get-ADObject -SearchBase "CN=Deleted Objects,DC=example,DC=local" -filter * -IncludeDeletedObjects -Properties lastKnownParent

lassen sich alle gelöschten Objekte anzeigen. Das Property lastKnownParent gibt dabei zusätzlich die letzte bekannte OU aus, in der sich die jeweiligen Objekte befanden. Diese muss vor der Wiederherstellung des Objektes vorhanden sein und ggf. ebenfalls wiederhergestellt werden.

Über die Anpassung des Filters kann man sich nur das gewünschte Objekt anzeigen lassen:

Get-ADObject -Filter 'sAMAccountName -eq "username"' -SearchBase "CN=Deleted Objects,DC=eutech,DC=local"  -IncludeDeletedObjects -Properties *

Dadurch wird nach einem einzelnen Benutzer gesucht und alle Eigenschaften angezeigt.

Mit dem Pipen in das “Restore-ADObject” CMDlet kann das Objekt wiederhergestellt werden:

Get-ADObject -Filter 'sAMAccountName -eq "username"' -SearchBase "CN=Deleted Objects,DC=example,DC=local"  -IncludeDeletedObjects -Properties * | Restore-AdObject

Sollte eine OU wiederhergestellt werden, so muss man bedenken, dass der Wiederherstellungsbefehl nur die OU, nicht aber die darin enthaltenen Objekte wiederherstellt. Dies muss manuell oder z.B. durch eine foreach-Schleife erfolgen:

Get-ADObject -Filter * -IncludeDeletedObjects -Properties lastknownparent | ?{$_.lastknownparent -eq "OU=XY
ADEL:a7417fbf-3627-48f6-b48d-224cd642fcb1,CN=Deleted Objects,DC=example,DC=local"} | restore-adobject

-> Raussuchen aller gelöschten Objekte, filtern nach lastknownparent, wiederherstellen

Über den zusätzlichen Parameter “whatif” kann man den Wiederherstellungsprozess erst einmal testen.

ad-restore-ps