Excel ist ein beliebtes Werkzeug für vielerlei Aufgaben. Am meisten lieben es – einem gängigen Klischee folgend – Buchhalterinnen und Controller. Viele Administratoren nutzen es nur, um einfache Listen zu verwalten. Dabei kann Excel viel mehr für den Admin tun!
Die Tabellenkalkulation eignet sich nämlich hervorragend als Skriptgenerator und Programmierhilfe. Dazu kann man sich gut der Funktionen bedienen, die Zeichenketten verarbeiten. In Zusammenarbeit mit der Importfunktion lässt sich damit so manche Aufgabe in wenigen Minuten lösen, für die man manuell Stunden benötigen würde. Und das alles ohne Programmierkenntnisse und langes Debugging komplexer Skripts.
Das Geheimnis liegt darin, dass viele Massenoperationen im Prinzip mit (relativ) einfachen Kommandozeilenbefehlen auf eine vorhandene Liste von Objekten angewendet werden können. Eine typische Frage in den Newsgroups ist etwa: „Ich habe eine Liste von neuen Mitarbeitern, die ich alle in Active Directory als Benutzer anlegen muss. Wie kann ich diese Liste in die Domäne importieren?“ Oft wird als Antwort auf diverse Import-Programme oder auf komplexe VBS- oder PowerShell-Skripts verwiesen. Mit Excel kann aber auch ein Nichtprogrammierer schnell zum Erfolg kommen.
Mehrere Benutzer schnell anlegen
Hier zunächst eine einfache Variante: Ein einzelnes Benutzerkonto lässt sich mit dem Kommandozeilenbefehl „net user“ in der Domäne anlegen. Für Ellen Bogen könnte dies mit ein paar Zusatzinformationen so lauten (Kommando in einer einzigen Zeile):
net user EllenB GeheimesKennwort /add /FullName:"Ellen Bogen" /ScriptPath:vertrieb.bat /domain
Angenommen, in einer Excel-Liste sind bereits der Name (Spalte A), der Anmeldename (Spalte B), das Startkennwort (Spalte C) und die Abteilung (Spalte D) für mehrere neue Benutzer vorgegeben – dann eignet sich folgende Formel in Spalte E, jedes Benutzerkonto zu erzeugen:
="net user " & B2 & " " & C2 & " /add /Fullname:""" & A2 & """ /Scriptpath:" & D2 & ".bat /domain"
Das sieht auf den ersten Blick etwas komplex aus, ist aber gar nicht so schlimm. Der Reihe nach:
- Das Gleichheitszeichen leitet eine Formel ein. Danach kommen Anführungsstriche, um einen festen Text anzugeben – hier das Kommando „net user“.
- Nach „net user“ muss der Benutzername folgen, der in Zelle B2 steht. Also Anführungsstriche schließen, mit & der Zeichenkette einen neuen Teil hinzufügen und auf Zelle B2 verweisen.
- Als nächstes kommt das Kennwort, durch ein Leerzeichen getrennt. Also wieder ein &, um die nächste Zeichenkette anzufügen, hier ein einzelnes Leerzeichen, das auch wieder in Anführungsstriche eingefasst wird. Das Kennwort steht in Zelle C2, auf die wieder mit & verwiesen wird.
- Als nächstes kommt wieder ein fester Text, nämlich die Optionsschalter „/add“ und „FullName“. Letzterer erwartet nach einem Leerzeichen den Anzeigenamen des Benutzers. Da dieser Name ein Leerzeichen enthält, muss er auf der Kommandozeile in Anführungsstriche gesetzt werden. Nun wird es etwas wild: Die Anführungsstriche nutzt Excel ja bereits selbst für die Formel. Um Excel mitzuteilen, dass es nun die Anführungsstriche im Formelergebnis ausgeben soll, muss das Zeichen mehrfach angegeben werden (diese Notation benutzt Microsoft an vielen Stellen). Doppelt wird das Zeichen angegeben, wenn dahinter wieder fester Text steht. In diesem Fall folgt danach aber ein weiterer Teil der Formel, nämlich eben der Anzeigename. Also werden die Anführungsstriche gleich dreimal hintereinander angegeben: Zweimal, um die Ausgabe zu erzeugen, und ein drittes Mal, um die Zeichenkette abzuschließen und die Formel fortzusetzen.
- Wiederum mit drei Anführungsstrichen wird der letzte Schalter „/ScriptPath“ eingeleitet, der auf Zelle D2 verweist. Zum Schluss schließlich noch die Dateinamenerweiterung und die Option „/domain“.
Diese Formel wird mit der Maus in alle Zellen kopiert, für die ein Kommando erzeugt werden soll. Excel passt die Zellenbezüge automatisch an. Im Effekt stehen nun in der Spalte E Kommandos dieser Art:
net user EllenB abc123! /add /Fullname:"Ellen Bogen" /Scriptpath:Vertrieb.bat /domain net user KarlK bcd234! /add /Fullname:"Karl Koop" /Scriptpath:Einkauf.bat /domain net user UteD cde345! /add /Fullname:"Ute Digute" /Scriptpath:Buchhaltung.bat /domain
Diese Kommandospalte kann man nun markieren und mit Strg-C in die Zwischenablage kopieren. Von dort in Notepad einfügen und als „users.bat“ abspeichern und ausführen – voilà!
Das Kommando „net user“ hat aber einen entscheidenden Nachteil: Es erzeugt neue Objekte nur im Standardcontainer der Domäne. Normalerweise ist das der Ordner „Users“. Zwar kann man diesen vorher mit „redirusr.exe“ auf einem Windows Server 2003 umlenken, aber das ist für unsere Zwecke nicht besonders praktikabel.
Flexibler mit ds-Tools
Sinnvoller ist es, mit leistungsfähigeren Kommandos zu arbeiten. Windows Server 2003 selbst bringt dafür die „ds-Tools“ mit, einen Satz von Kommandozeilenbefehlen, die mit „ds“ (für „Directory Service“) beginnen. Dies sind die Befehle „dsadd“ (Hinzufügen von Objekten), „dsmod“ (Ändern), „dsquery“ (im AD suchen), „dsget“ (Details zu einem Einzelobjekt) und „dsrm“ (Löschen). Nähere Informationen dazu finden sich in der Server-Onlinehilfe. Ein Kommando, mit dem Günter Melzer in der OU „Marketing“ angelegt wird, wäre etwa dieses (wiederum eine einzige Zeile):
dsadd user "CN=Günter Melzer,OU=Marketing,DC=faq-o-matic,DC=net" -samid GMelzer -pwd abc123!
Das lässt sich natürlich noch mit zahlreichen Optionen verfeinern, die in dsadd bereits vordefiniert sind. Die passende Excel-Formel für eine massenweise Listenverarbeitung lässt sich nach obigem Beispiel sicher leicht aufbauen.
Noch flexibler mit AdMod
Mehr Flexibilität als mit den ds-Tools hat man allerdings mit AdMod von Joe Richards:
[faq-o-matic.net » Active-Directory-Massenoperationen mit AdMod und AdFind]
http://www.faq-o-matic.net/2006/11/29/active-directory-massenoperationen-mit-admod-und-adfind/
AdMod erlaubt fast beliebige Änderungen an AD-Objekten. Recht effizient kann man etwa arbeiten, wenn mehrere Änderungen an einer Menge von Objekten ausgeführt werden sollen. Für jede Änderung kann man mit der Excel-Technik eine eigene Spalte mit der passenden Befehlsformel erzeugen.
Ein Beispiel: Alle Benutzerkonten einer Domäne sollen umbenannt werden. Der neue Anmeldename und der alte Name (hier: Die Personalnummer) stehen in einer Excel-Tabelle. Mit der Umbenennung gehen einige weitere Änderungen einher, etwa das Umbenennen von Profil- und Home-Ordnern.
Zunächst benötigt AdMod (genau wie die ds-Tools) den distinguishedName (DN) des zu ändernden Objekts. Machen wir es uns einfach und tun so, als lägen alle Objekte in derselben OU. Dann könnte folgende Formel in Spalte C helfen:
="CN=pers-" & B2& ",OU=Personal,DC=contoso,DC=com"
So ist der DN dann als Ergebnis in Spalte C zu finden. Eine Formel zum Ändern des Anmeldenamens auf den Wert, der jeweils in Spalte A steht, wäre diese hier (einzutragen in Spalte D):
="ADMod -b """& $C2 &""" ""sAMAccountName::"& $A2 & """"
Das daraus resultierende AdMod-Kommando ist (auch hier eine einzige Zeile):
ADMod -b "CN=pers-33268,OU=Personal,DC=contoso,DC=com" "sAMAccountName::AlbrechtH"
Ebenso kann über eine vergleichbare Formel in Spalte E der Profilordner in Active Directory umbenannt werden:
="ADMod -b """&$C2&""" ""profilePath::\\file03\profiles$\"&$A2&""""
Doch Achtung, in diesem Fall muss natürlich auch der Ordner auf dem Server umbenannt werden. Das gelingt mit dieser Formel in Spalte F:
="ren ""E:\Profiles\pers-"&B2&""" " &$A2
Entsprechend können in den Spalten G, H und I die analogen Formeln eingetragen werden, um den Home-Ordner sowohl in AD als auch auf dem Server zu ändern (hier noch eine dritte Formel, um den Laufwerksbuchstaben für das Mapping mitzugeben):
="ADMod -b """&$C2&""" ""homeDirectory::\\file03\home$\"&$A2&""""
="ADMod -b """&$C2&""" ""homeDrive::O:"""
="ren ""E:\Home\pers-"&B2&""" " &$A2
Nachdem diese Formeln auf alle Zeilen der Tabelle angewendet wurden, kann man die einzelnen Spalten markieren, mit Strg-C kopieren und in eine Batchdatei einfügen. Da diese für jede Änderung eine einzelne Zeile enthält, kann man sie meist leichter kontrollieren als eine Programmierschleife. Zudem kann man einzelne Zeilen zu Testzwecken isolieren, um die grundlegende Funktion zu prüfen.
Kopieren auf mehrere Server
Ein letzter Anwendungsfall: Eine bestimmte Datei soll in einen bestimmten Ordner auf allen Servern kopiert werden. Auch dies lässt sich mit Excel gut automatisieren. Zunächst benötigen wir aber eine Liste der Server. Vorausgesetzt, alle Server befinden sich in einer oder wenigen OUs im AD, ist dies einfach: In Active Directory-Benutzer und -Computer die richtige OU heraussuchen, Rechtsklick darauf. Mit dem Befehl „Liste exportieren“ aus dem Kontextmenü werden die Servernamen (und etwas Beiwerk) in eine Textdatei geschrieben. Diese kann man nun in Excel öffnen und alle unnötigen Daten entfernen.
Stehen nun die Servernamen in Spalte A, lassen sich die Kopierkommandos mit dieser Formel in Spalte B erzeugen:
="copy C:\temp\datei.txt \\" & A2 & "\c$\daten\"
Und wieder: Das Ergebnis in eine Textdatei kopieren, als Batchdatei abspeichern und ausführen.
http://faq-o-matic.net/?p=728