Logo faq-o-matic.net
Logo faq-o-matic.net

Active-Directory-Double als Testumgebung

von veröffentlicht am17. Dezember 2006, 15:44 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Active Directory, Administration, Gruppenrichtlinien, Scripting   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 25. Februar 2016

Wie baut man sich eigentlich mit wenig Aufwand eine Testumgebung für Active Directory auf, die in den wichtigsten Aspekten mit der produktiven Umgebung übereinstimmt? Ein Weg besteht im Abzweigen oder Klonen eines Domänencontrollers – Nachteile: Die Testumgebung ist sicherheitskritisch, weil sie alle Kennwörter enthält, und sie hat denselben Namen wie die Produktive Umgebung, kann also nicht im selben Netzwerk laufen. Ein sinnvollerer Weg besteht also darin, keine 100-Prozent-Kopie zu erzeugen, sondern nur die Struktur der Objekte zu übernehmen. Fragt sich nur, welches das beste Werkzeug dafür ist. Fündig wird man bei den GPO-Gurus …

Man installiere auf einer Maschine die GPMC (http://www.microsoft.com/windowsserver2003/gpmc/default.mspx). Danach sucht man in der Datei „CreateXMLFromEnvironment.wsf “ nach „var iMemberCutoff = 100;“ und ersetzt diesen Wert durch einen seiner Wahl: Es werden maximal soviele Mitglieder einer SecurityGroup extrahiert, wie man hier angibt. Aber Achtung: Bei einer sehr großen Zahl von Objekten (mehrere tausend) geht dem Skript (bzw. dem ausführenden Prozess) bald die Puste (in Form des Arbeitsspeichers) aus. In diesem Fall bleibt als Workaround, mit dem Schalter /StartingOU nur jeweils einen Teil der Struktur zu exportieren und die Teile hinterher gemeinsam zu importieren.

Und noch mal aufgepasst: Wenn Ausgangs- und Zielumgebung nicht dieselbe Sprache haben, werden die hier gezeigten Skripte die GPO-Berechtigungen nicht richtig zuordnen. Folge ist, dass die GPOs nicht mehr bearbeitet werden können. Da das etwas unbequem ist, muss in diesem Fall mit dem Schalter /ExcludePermissions die Ausgabe der Berechtigungen unterdrückt werden.

Nun führt folgende Befehle in der Eingabeaufforderung als Domain-Admin aus:

  1. cd \
  2. mkdir templates
  3. cd %programfiles%\gpmc\scripts
  4. cscript CreateXMLFromEnvironment.wsf DATEINAME.xml /DC:DOMAINCONTROLLER /IncludeAllGroups /IncludeUsers /TemplatePath:C:\templates /domain:DOMAENE

DOMAINCONTROLLER = sollte ein GlobalCatalog sein

Dadurch werden alle GPOs, User, Security Groups und Memberships extrahiert und nach c:\templates geschrieben. Die Datei DATEINAME.xml findet man unter %programfiles%\gpmc\scripts. Diese kopiert man nun nach c:\templates.

Man verbinde sich auf seine Testumgebung installiere ebenfalls die GPMC und kopiere den Ordner mit allen Daten nach c:\ und die DATEINAME.xml nach %programfiles%\gpmc\scripts und führe folgendes Kommando als Domain-Admin aus:

  1. cd %programfiles%\gpmc\scripts
  2. cscript CreateEnvironmentFromXML.wsf /xml:DATEINAME.xml /domain:NAME-DER-TESTDOMAENE /createUsersEnabled /PasswordForUsers:“PASSWORD“

„PASSWORD“ sollte den Komplexitätsregeln entsprechen, welche man für die Passwörter in der Domäne vergeben hat. Die ganzen Ausgaben des Scriptes kann man wie gewohnt auch in ein File loggen lassen: Einfach an die Scriptkommandos wie gewohnt noch ein “ > log.txt“ dranhängen. Zu beachten sei hier, dass man beim Import der Domäne noch einmal mit „y“ bestätigen muss, da sonst das Script nicht losläuft (merkt man bei Umleitung der Ausgabe nicht direkt).

Einschränkungen und Workarounds

Beim Importieren ist zu beachten, dass es hier kein Limit für Gruppen gibt. Allgemein ist zu beachten, dass das Script nicht für Distribution Groups sowie Computerkonten ausgelegt ist. Außerdem scheitert die recht simple Importlogik an Objektnamen, die ein Komma enthalten. Falls sowas der Fall ist, kann die XML-Datei vor dem Import mit folgendem Reparaturskript RepairGPMC-XMLFileFullName.vbs bearbeitet werden. Der Quellcode folgt, hier zunächst der Download:

Download: RepairGPMC-XMLFileFullName.vbs  RepairGPMC-XMLFileFullName.vbs (1,1 KiB, 702-mal heruntergeladen, letzte Änderung am 25. Februar 2016)

' Region Description
'
' Name: RepairGPMC-XMLFileFullName.vbs
' Author: Nils Kaczenski
' Version: 1.1
' Last Changes:
' 1.1: Added support for XML file name as an argument
' Description: This script repairs a shortcoming in the GPMC script
' "CreateEnvironmentFromXML.wsf". The GPMC script fails when the generic
' "FullName" attribute value contains a comma. This script repairs this
' by simply adding an escape character (which is the backslash) if a
' comma is found in the value.
'
' No warranties will be granted! Use this script at your own risk only!
'
' EndRegion
' Const
    Const ForWriting = 2
    Const TristateTrue = -1
    Const ForReading = 1
' EndConst
' ***** CUSTOMIZE HERE *********
' Put the original XML file name here
    strFile = "C:\templates\sample.xml"
' Put the name for the repaired file here
    strFileNeu = "C:\templates\sample.repaired.xml"
' ***** END CUSTOMIZE *********
' check for File Name as an argument
    Set objArgs = WScript.Arguments
    If objArgs.Count > 0 Then
        strFile = objArgs(0)
        strFileNeu = strFile & ".repaired.xml"
    End If
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objXMLFile = objFSO.GetFile(strFile)
    Set objXML = objXMLFile.OpenAsTextStream(ForReading, TristateTrue)
    Set objXMLNeu = objFSO.OpenTextFile(strFileNeu,ForWriting,vbTrue,TristateTrue)
    Do Until objXML.AtEndOfStream
        strLine = objXML.ReadLine
        strLineLC = LCase(strLine)
        intFullName = InStr(strLineLC, "fullname=""")
        If intFullName > 0 Then
        ' we have a line with "FullName" in it
            intLeft = InStr(intFullName, strLine, """") + 1
            intRight = InStr(intLeft, strLine, """")
            strFullName = Mid(strLine, intLeft, intRight - intLeft)
            strFullNameNeu = Replace(strFullName, ",", "\,")
        ' make sure we do not introduce multiple backslashes
            strFullNameNeu = Replace(strFullNameNeu, "\\", "\")
            strNewLine = Left(strLine, intLeft - 1) & strFullNameNeu & Mid(strLine, intRight)
            strLine = strNewLine
        End If
        objXMLNeu.WriteLine strLine
    Loop
    WScript.Echo "Finished. Saved the repaired file as" & VbCrLf & strFileNeu

Dieses Skript nimmt den Namen der von CreateXMLFromEnvironment.wsf erzeugten XML-Datei entgegen und durchsucht die Datei nach „FullName“-Einträgen. Sollten diese ein Komma enthalten, so wird dies mit einem Backslash maskiert. Dadurch läuft CreateEnvironmentFromXML.wsf beim Import nicht auf Fehler. Damit das funktioniert, sollte das Skript nicht per Doppelklick aufgerufen werden, sondern mit einer Kommandozeile nach folgendem Muster:

cscript C:\pfad\RepairGPMC-XMLFileFullName.vbs C:\templates\sample.xml

Alternativ kann man die XML-Datei aber auch per Drag & Drop auf das Icon des Reparaturskripts fallen lassen.

Wer weitere Informationen zum Kopieren einer Produktivdomäne benötigt, findet diese hier: http://technet2.microsoft.com/WindowsServer/en/library/e5288e42-62b8-4f9e-a665-95b6e02389a31033.mspx?mfr=true http://www.fots.nl/index.php/how-to/copy-group-policies-to-a-new-domain-windows-2003/

Einen Webcast genau hierzu findet man auch unter: http://techfiles.de/dmelanchthon/webcasts/118762996.wmv

Herzlichen Dank an: Daniel Melanchton und Jan Gehrke
Ergänzungen von Nils Kaczenski

© 2005-2023 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!