Batch-Skript Login

Lesedauer 3 Minuten
Posted: So. 09.10.2022-18:45Updated: Di. 01.10.2024-19:49

 Dieses kleine Batch-Beispiel speichert das aktuelle Datum und die Zeit inkl. des Wochentags beim Anmelden an einem PC in eine Log-Datei.

Hinweis: Windows macht i.d.R. keinen Unterschied bei der Schreibweise von Befehlen, Groß- Kleinschreibung wird ignoriert, steigert aber die Lesbarkeit.

Dies ist ein kleines Batch-Skrip, mit dem man seine eigenen Login-Zeiten monatlich protokollieren kann. In den Zeilen [14 – 16] werden die Zeit-Vatiablen, current day (cd), current month (cm) und current year (cy) ermittelt.

Mit der Variablen %date% erhält man das aktuelle Datum in einer zehnstelligen Ausgabe wie z.B. 01.01.1970. Diese wird in die Einzelteile für Tag, Monat und Jahr zerlegt.

CMD CMD – ◻ X
  1. @echo off & setLocal
  2. :: ——————————————————–
  3. :: Skriptname  : login.cmd
  4. :: Beschreibung: Login speichern
  5. :: ——————————————————–
  6.  
  7. cls
  8. echo.
  9. echo Login …
  10.  
  11. :: ——————————————————–
  12. :: Tag, Monat, Jahr und Zeit ermitteln
  13. :: ——————————————————–
  14. set cy=%date:~-4%
  15. set cm=%date:~-7,2%
  16. set cd=%date:~-10,2%
  17. for /F %%i IN (‘time /T’) DO set ct=%%i
  18.  
  19. set now=%cy%%cm%%cd%%ct%
  20. set datum=%cy%%cm%%cd%
  21.  
  22. :: ——————————————————–
  23. :: Wochentagszahl (0-6) in Text umwandeln
  24. :: ——————————————————–
  25. for /f %%g in (‘wmic path win32_localtime get dayofweek^|findstr /v /r “^$“‘) do (set DOW=%%g)
  26.  
  27. if %DOW%==0 set DOW=So.
  28. if %DOW%==1 set DOW=Mo.
  29. if %DOW%==2 set DOW=Di.
  30. if %DOW%==3 set DOW=Mi.
  31. if %DOW%==4 set DOW=Do.
  32. if %DOW%==5 set DOW=Fr.
  33. if %DOW%==6 set DOW=Sa.
  34.  
  35. echo %DOW%
  36.  
  37. :: ——————————————————–
  38. :: Login speichern
  39. :: ——————————————————–
  40. echo %NOW% %DOW% Login >> %USERPROFILE%\LiLo\%cy%%cm%_lilo.log

In Zeile [17] wird die aktuelle System-Zeit ermittelt und in die Variable current time (ct) geschrieben. Danach werden in Zeile [19 + 20] zwei weitere Variablen now und datum aus den gesetzten Variablen, der zuvor ermittelten Einzelteile, zusammen gesetzt.

Zeile [25] ermittelt den aktuellen Wochentag, der systemseitig in Form einer Ziffer (0-6), wobei 0 = Sonntag bis 6 = Samstag ist, ausgegeben. Mit Hilfe des System-Tools “WMIC” kann die Variable für den aktuellen Wochentag, mit get dayofweek, ermittelt werden.

Die Abkürzung “WMIC” steht für “WMI Command-line” – ausgeschrieben “Windows Management Instrumentation Command-line”. Es handelt sich um ein Bordmittel, das über einen Befehlsinterpreter wie die Kommandozeile oder die PowerShell anzusprechen ist.

In den Zeile [27-33] wird geprüft, was in der Variablen %DOW% (Day of week) steht – wenn %DOW% = 0 dann setzte die Varable %DOW% auf den Text “So.” etc.

Zeile [35] gibt zur Kontolle den Wochentag auf stdout (Bildschirm) aus.

Zum Schluß sollen die ermittelten Variablen in eine Log-Datei geschrieben werden.

Für Log-Dateien bietet sich die Schreibweise als amerikanisches Datum an – statt 01.01.1970 wird 19700101 geschrieben, also erstes das Jahr dann der Monat und am Ende der Tag. Das hat den Vorteil, dass man eine logische Reihenfolge der Einträge erhält, die bei der Sortierung chonologisch aufgebaut ist. Mit der üblichen Schreibweise würde man alle Einträge nach Tagen erhalten, was nicht sehr übersichtlich ist.

Zeile [40] schreibt also die Variablen %NOW% z.B. “19790101-20:00” und die Variable %DOW% in diesem Falle “Do.”. Mit dem Argument “>>” (füge die Ausgabe an eine bestehende Datei an) wird die Ausgabe “19700101-20:00 Do. Login” in die Datei %cy%%cm%_lilo.log (197001_lilo.log) geschrieben. Der Pfad zur Log-Datei kann nach belieben ausgetauscht werden, ein guter Platz ist das eigene Profil-Verzeichnis, was auch mit der einfachen Variable %USERPROFILE% angesprochen werden kann.

Dadurch, dass die Log-Datei das Format einer monatlichen Sammlung der Einträge hat, bekommt man pro Jahr nur 12 Dateien. Was die Sammlung der Informationen übersichtlich macht.

Damit das ganze automatisch im Hintergrund abläuft braucht man noch einen neuen Eintrag in der Aufgabenplanung von Windows. Die Aufgabenplanung kann man mit der Eingabeaufforderung mit der Tastenkombination [Strg] + [R] aufrufen und dort folgendes Kommando eingeben “control schedtasks taskschd.msc“.

Damit wird immer beim System-Start ein neuer Eintrag, in der Form “19700101-20:00 Do. Login” in die Log-Datei geschrieben.

Will man auf protokollieren, wann man den PC ausschaltet z.B. zur Arbeitszeiterfassung kann man auch ein Batch-Skript als logout.cmd erstellen.

Hinweis: WMIC-Tool (Windows-Verwaltungsinstrumentation).

Das WMIC-Tool ist in Windows 10 Version 21H1 und der 21H1-Version des Kanals für allgemeine Verfügbarkeit von Windows Server veraltet. Dieses Tool wird durch Windows PowerShell für WMI ersetzt. Hinweis: Diese Einstellung gilt nur für das Befehlszeilenverwaltungstool. WMI selbst ist nicht betroffen.

Quelle: https://learn.microsoft.com/de-de/windows/whats-new/deprecated-features

Dieser Beitrag wurde bisher 234 mal gelesen.