Mit dem Kommando “dsmove” kann man seit Windows Server 2003 AD-Objekte per Kommandozeile verschieben. Anders als die anderen ds*-Tools kommt dsmove leider nicht mit dem Piping klar: Zwar kann man etwa die Ausgabe eines “dsquery”-Befehls per Pipe an dsmove weiterleiten und so nacheinander mehrere Objekte an den Befehl verfüttern – doch dsmove wird nur das erste übergebene Objekt verschieben und danach einen Fehler ausgeben. Leider gilt das auch noch in Windows Server 2008 R2.
Möchte man eine Massenverschiebung ausführen, so muss man sich mit folgendem Trick behelfen. Das Kommando verschiebt alle Objekte, deren Anmeldename mit “A” beginnt, in eine andere OU. Achtung, die “for”-Zeile bis zur zweiten öffnenden Klammer ist eine einzige Zeile.
- for /f "delims=" %%a in (‚dsquery user "OU=AlteOU,DC=dom,DC=faq-o-matic,DC=net" -samid a* -limit 0‘) do (
- dsmove %%a -newparent "OU=NeueOU,OU=DC=dom,DC=faq-o-matic,DC=net"
- )
Diese Syntax gilt bei Ausführung per Batch – direkt auf der Kommandozeile muss man “%%a” in “%a” ändern. Möchte man das zunächst gefahrlos testen, so fügt man vor dem “dsmove” noch das Kommando “ECHO” ein und leitet die Ausgabe in eine Datei um. Dann wird dsmove nicht aktiv, sondern das Kommando erzeugt nur die Kommandos.
Achtung: Auch mit Umlauten kommt diese Technik nur unter bestimmten Umständen klar, nämlich dann, wenn die Codepage des CMD-Fensters auf 850 steht. Das ist zwar normalerweise der Fall, aber um sicherzugehen, sollte man in einem Batch zu Beginn das Kommando “chcp 850” einfügen. Die Schalter “uc/uci/uco” der ds*-Tools helfen nicht, weil sie keine gültigen Daten weitergeben.
(Hier noch der Verweis auf meine Fundstelle – wie immer bei ExpertsExchange ganz nach unten scrollen:
http://www.experts-exchange.com/Programming/Languages/Scripting/Shell/Batch/Q_22997808.html)
http://faq-o-matic.net/?p=2185