DSAdd, DSQuery, DSMod, DSGet, DSMove, DSrm
Als Alternative unter PowerShell eigenen sich die Commandlets aus RSAT AD-PowerShell besser.
Seit dem Active Directory nutzen alle Administratoren die Management Konsole zum Anlegen, Pflege, und Löschen von Benutzer, Gruppen und anderen Objekten. Das ist allerdings nur bis zu einem bestimmten Maße brauchbar. Wenn Sie z.B.: hundert Studenten zum Semesteranfang anlegen müssen oder anhand einer umfirmierung bei allen Usern die Adressdaten anpassen müssen, ist eine automatische oder skriptgesteuerte Lösung gefragt. Es gibt natürlich auch hier Programme wie ADModify und LDIFDE und auch mit VBScript können Sie eine Lösung schreiben. Aber wie wäre eine passable Kommandozeile zur Anpassung von Benutzern ?
Die Tools laufen auch auf WIndows 200 SP3 und höher mit
einem Registryschlüssel
325465 Windows 2000 domain controllers require SP3 or later when using
Windows Server 2003 administration tools
Der Registrykey teilt DSMOD etc. mit, dass Sie LDAP-Verkehr nicht
verschlüsseln sollen, was Windows 2000 noch nicht kann.
Genau das liefert Microsoft mit den folgenden Programmen in Windows 2003 mit aus.
- DSAdd
Fügt neue Objekte zum AD hinzu - DSQuery
Fragt das AD nach bestimmten Objekten ab - DSMod
Modifiziert bereits bestehende Objekte - DSGet
Holt bestimmte Eigenschaften von Objekten und zeigt diese an - DSMove
Verschiebt Objekte z.B.: zwischen OU's - DSrm
Löscht bestehende Objekte
Starten Sie doch einfach mal eine DOS-Box und geben Sie einen der Befehle ein. Die Hilfe wird sie direkt auf die Optionen hinweisen.
Ein paar Beispiele
Um die Funktionsweise von diesen kleinen aber feinen Tools besser zu verstehen, habe ich hier mal ein paar Beispiele aufgeführt. Die meisten einfachen Beispiele sind natürlich in folgendem TechNet Artikel beschrieben:
- 322684 How To use the Directory Service Command-Line Tools to Manage Active Directory Objects in Windows Server 2003
Aber was die wenigsten wissen ist die Fähigkeit, die Befehle zu verketten. So kann man die DSQuery Objekte suchen und die Liste der Objekte dann mittels "Pipe" an das nächste Programm übergeben. Fangen wir aber mal einfach an. Folgende einfach Zeile listet die Benutzer in der OU "Users".
dsquery User domainroot
Die Ausgabe ergibt bei mir ein:
Im nächsten Schritt interessieren mich von diesen Objekten natürlich die Mailadresse.
dsquery User cn=Users,dc=msxfaq,dc=local | dsget User -email
Die Ausgabe ist natürlich etwas ernüchternd, wenn es noch nicht viele Benutzer mit Mailadresse gibt. Hier ist es im wesentlichen der Administrator die Systemmailbox und die beiden Benutzer RUSTest1 und RUSTest2
Zuletzt mache ich mir die Funktion von DSQuery zu nutzen, das Kennwortalter eines Kontos zu prüfen. Dies ist ein recht einfacher Weg, um inaktive Computerkonten zu finden. Per Default ändert eine Workstation in einer Domäne alle 30 Tage ihr Kennwort. (Quelle: Windows 2003 Hilfe auf http://www.Microsoft.com/technet/prodtechnol/windowsserver2003/de/library/ServerHelp/8af78a8c-6e66-4420-9ee7-d82dd1c9e0c6.mspx . Windows NT4 hat alle 7 Tage das Computerkennwort geändert, siehe 175468 Effects of machine account replication on a domain)
dsquery computer forestroot -o samid -stalepwd 60
Nun erhalten ich die Computer, die seit 60 Tagen nicht mehr eingeschaltet waren. Das ist oft ein gutes Kriterium für alte Computerkonten. Zumindest sind diese Systeme schon lange nicht mehr aktuell im Bezug auf Patches und Virenscanner und sollten daher etwas genauer untersucht werden.
Durch die Übergabe über die "PIPE" an das nachfolgende Programm können Sie natürlich mittels DSADD solch eine Liste natürlich auch als Quelle für massenhafte Veränderungen an diesen Objekten verwenden. Die Hilfe von DSADD /? hilft ihnen hier weiter. Das ganze ist natürlich schon sehr ein Hinweis auf PowerShell, wo ähnliche Konzepte mit "pipe" bestehen.
Der Einsatz der DS-Tools ist sehr effektiv für häufige Aktionen, z.B. die Anzeige von inaktiven Konten etc. Allerdings ist kein voller Zugriff auf alle Eigenschaften möglich, so dass Sie bei umfangreicheren Dingen doch wieder auf VBScript umsteigen müssen.
Ein weiterer Einsatzzweck ist z.B. das Abgleichen oder Kopien von Gruppenmitgliedschaften. Das funktioniert aber nur innerhalb des gleichen Forest. für eine Migration kann es aber ganz hilfreich sein.
dsget group "cn=gruppe1,ou=gruppen,DC=local" -members | dsmod group "cn=gruppe1,ou=gruppen,DC=local" -chmbr -c
Einschränkungen
Wo so viel Licht ist, ist der Schatten um zu schwerer zu akzeptieren. So erlaubt DSMOD nur die die Modifikation der bekannten Attribute. Die für einen Exchange Admin interessanten Attribute sind nicht erreichbar, z.B.:
- ExtensionAttribute1-15
- msExchUseOAB
- Exchange Quotas
- Und viele mehr
Hier braucht es dann doch wieder andere Werkzeuge oder ein eigenes VBScript.
ModADAttr.vbs
Da DSMOD die Exchange Attribute nicht verändern kann, habe ich mir schnell ein VBScript geschrieben welches die Objekte per STDIN von DSQUERY bekommt und ein Feld mit einem Wert füllt. Der Aufruf ist dann wieder bekannt
dsquery * ou=test,dc=msxfaq,dc=local -uco | cscript //U setADAttrib.vbs /a:"ExtensionAttribute8" /v:"Test"
Da DSQUERY allerdings ASCII verwendet und VBSCRIPT ANSI erwartet muss man beiden sagen, dass DSQUERY entsprechend "UNICODE" ausgibt und CSCRIPT die Eingabe als UNICODE akzeptiert. Dann funktioniert das ganze auch mit umlauten im distinguishedName.
Irgendwann möchte ich das Skript noch erweitern um Möglichkeiten Felder zu lesen und zu ersetzen, z.B.: um den Inhalt aus "mail" in "TargetAddress" zu kopieren.
Weitere Links
- 320187 HOW TO: Manage Computer Accounts in Active Directory in Windows 2000
- 322684 How To use the Directory Service Command-Line Tools to Manage Active Directory Objects in Windows Server 2003
- 325465 Windows 2000 domain controllers require SP3 or later when using Windows Server 2003 administration tools
- 892239 "The specified User does not exist" error message when you try to use the DSMOD command to add a User from one forest to a group in another forest in Windows Server 2003
- 175468 Effects of machine account replication on a domain
- RSAT AD-PowerShell
- PowerShell
- Windows Hilfsprogramme - LDIFDE
- Tools ADModify
- PWExpire
- DS-Commands
http://computerperformance.co.uk/Logon/DSadd_DSmod_DSrm.htm