Teil 1: Allgemeine Problemstellungen

Shell Scripting unter Windows

Letzten Login auslesen

Für viele Aufgaben ist es nötig, Informationen zu einzelnen Benutzern auszulesen. Je nach Aufgabenstellung eignen sich verschiedene Befehle der Shell dafür. Falls Sie in einem Active Directory-basierten Netzwerk arbeiten, ist in den meisten Fällen die Kombination aus dsquery und dsget die beste Lösung. Dennoch sollten Sie an dieser Stelle das Kommando net nicht vergessen, es gibt Abfragen, die mit den ds*-Kommandos nicht möglich sind, sehr wohl aber mit net. Dazu ein Beispiel aus der Praxis: Für einen Benutzer soll das Datum der letzten Anmeldung ermittelt werden. Mit Hilfe von dsquery kein Problem, das Problem ist die Ausgabe des Kommandos, wie der folgende Konsolenmitschnitt zeigt.

C:\tmp>dsquery * "cn=franz Testhuber,cn=users,dc=shellbook,dc=local" –attr LastLogon –q 127875195238906250

Die letzte Anmeldung war also am 127875195238906250 – sehr interessant, aber wenig hilfreich. Hierbei handelt es sich um den internen Wert des AD-Zeitstempels (Dies sind die 100 Nanosekunden-Intervalle seit dem 01. Januar 1601 Mitternacht. Dabei handelt es sich um Angaben in UTC. Falls Sie sich auch gerade fragen, wer sich so eine Zeitbasis ausdenkt, es gibt eine logische Erklärung: Dies sind ANSI Decimal Dates aus der COBOL-Ära. Einen guten Artikel zu diesem Thema finden Sie hier. Den können wir per Shell nicht sinnvoll in einen lesbaren Wert konvertieren. Dennoch muss nicht auf den Windows Script Host ausgewichen werden, die Lösung hier ist net user.

C:\tmp>for /F "usebackq tokens=3,4" %f in (`net user franz ^| find /i "anmeldung"`) do @echo Datum: %f Zeit: %g
Datum: 22.03.2006 Zeit: 17:45

Wir filtern die Ausgabe von net user <benutzerlogin> nach der Zeile mit dem Datum der letzten Anmeldung (für die englische Version muss der Suchstring angepasst werden) und bekommen das Datum in einem lesbaren Format angezeigt.