Den Zeitpunkt des letzten Herunterfahrens auslesen

  • Hallo Gemeinde,

    aufgrund der strengen Auslegung bei uns im Betrieb, der gesetzlichen Pausenzeiten möchte ich mir einen Feierabendrechner erstellen.

    Dazu ist es notwendig den Zeitpunkt des letzten Herunterfahrens zu ermitteln, weil ich oft morgens homeoffice mache und später ins Büro fahre.
    Durch diese Teilung ist es mir leider öfters passiert, das ich über die 10-Std-Grenze gekommen bin. Ergo: Chef ist mörderböse =O

    Ich habe es Dank Vorschlägen des Forums mit folgendem Code versucht:

    Laut dem Eventlog war aber dieser Zeitpunkt 7 min später. Also statt 14:40 wie obiger Code ergibt, 14:47 (UTC, etc. nicht mit eingerechnet).

    Hätte jemand eine Idee wie ich den richtigen Zeipunkt des letzten Herunterfahrens sonst noch auslesen kann?

  • Woher diese Differenz kommt weiß ich nicht, aber alternativ drüber nachgedacht beim Shutdown einen Eintrag (Registry/Datei o.ä.) zu machen mit der entsprechenden Zeit und diesen dann auszulesen

  • Da der Eventlog ja offensichtlich das korrekte Ergebnis bringt, könntest du ja stattdessen eben diesen abfragen?`

    Bin jetzt kein Experte für den Eventlog aber vielleicht soetwas?:

  • Woher diese Differenz kommt weiß ich nicht,

    Ich vermute das es ein Zeitzonenproblem ist. Bei mir ist die Zeit 1 Stunde und 4 Minuten. Kann man vielleicht irgendwie eine Stunde dazu addieren, z. Bsp. $_plus1Std = ???????

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallo Moombas,

    zunächst danke für deine Antwort. Nein, die Zeit selber zu erfassen hatte ich nicht im Fokus...


    @ alle: Gibt es eine Möglichkeit mit Autoit das Eventlog dahingehend auszulesen?

  • ich hab nicht ganz verstanden was du sucht.


    aspirinjunkie hat schon die richtige Antwort geliefert.
    meine testvariante sah so aus, bevor ich aspirinjunkie seine getestet habe.

    Code
    #Include <Array.au3>
    $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'System'", "WQL", 0x10 + 0x20)
    
    For $objItem In $colItems
        ConsoleWrite("Event ID: " & $objItem.EventCode & @CRLF)
        ConsoleWrite("Type: " & $objItem.Type & @CRLF)
        ConsoleWrite("Time Generated: " & $objItem.TimeGenerated & @CRLF)
        ConsoleWrite("Message: " & $objItem.Message & @CRLF & @CRLF)
    Next
  • hallole,

    @ Alina: Das mit der Zeitzone ist insofern klar, als das tatsächlich eine Stunde fehlt. Aber 7 minuten Differenz? Das liegt wohl eher nicht an der Zeitzone.
    Zumindest kenne ich nur stundenweise Zeitzonen(natürlich denke ich, das man wissenschaftlich per Längen.- und Breitengrad die tatsächliche Zeit berechnen kann
    aber so rechnet unser Arbeitszeittool eher nicht ;) und Windows wohl auch nicht).

    @ Aspirinjunkie: HEUREKA :party::party::party: dein Script liefert die korrekte Zeit des letzten Herunterfahrens.
    Ich teste aber noch was es liefert, wenn man untertägig den Rechner neu startet...

  • So mal geteset und Ausgabe würde doch ausreichend sein. ;)

    Aspirinjunkie seine Lsg gefällt mir. Kann man bestimmt mal irgendwo einsetzen. Als wird es gespeichert. ;)
    Und mal Danke für die Fragestellung. ---------------------------------------> :rofl:

    Spoiler anzeigen

    .#include <EventLog.au3>
    #include <Array.au3>

    Global $hEventLog = _EventLog__Open("", "System")

    Global $i = 0, $aEvent
    Do
    $aEvent = _EventLog__Read($hEventLog, True, False, $i)
    If $aEvent[0] = False Then ExitLoop

    If $aEvent[6] = 6006 Then
    ; _ArrayDisplay($aEvent, "Das letzte mal heruntergefahren")
    ExitLoop
    EndIf

    $i += 1
    Until 0

    _EventLog__Close($hEventLog)


    ConsoleWrite(@CRLF & $aEvent[4] & " " & $aEvent[5] & @CRLF)
    MsgBox("","",$aEvent[4] & " " & $aEvent[5])

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Ich möchte noch eine Sache zu bedenken geben aber wneiger wegen des Auslesens an sich, sondern der Anwendung dessen.
    Das Skript würde dies auch auslesen und anwenden, wenn dein PC wegen anderen Gründen heruntergefahren und später wieder gestartet wird. Obwohl die Zeit dazwischen ggf. Arbeitszeit war.
    Das erfordert dann eine manuelle Anpassung der Zeiten. Ich bin daher kritisch dem gegenüber genau dieses las Grundlage für die Arbeitszeiten zu nehmen.

    Wäre es nicht Sinnvoller den Sleepmode zu nehmen und diesen zu Plotten?
    - Laptop hochfahren: Arbeitszeit Start (egal ob Homeoffice oder Office)
    - Sleepmode Start = Ende Homeoffice = Unterbrechung der Arbeitszeit start
    - Sleepmode Ende = Unterbrechung der Arbeitszeit Ende
    - Laptop herunter fahren = Arbeitszeit Ende (egal ob Homeoffice oder Office)
    - Spätestes Ende = Laptop hochfahren + 10h + Dauer Unterbrechung (korrigiere mich, wenn ich da nun rechtlich falsch bin oder was vergessen habe)

    Empfehlung: Prüfung, ob die maximal Erlaubte Wochenarbeitszeit (50h bei 5-Tage-Woche/60h bei 6-Tage-Woche) damit nicht überschritten wird, sonst muss vorher Feierabend gemacht werden.
    Empfehlung 2: Prüfung ob die Ruhepause (Arbeits Ende bis Arbeits Start) von 11h eingehalten wurde.

    3 Mal editiert, zuletzt von Moombas (6. Dezember 2023 um 14:53)

  • Ich habe folgendes festgestellt.

    Fahre ich den PC ohne die "Großschreibtaste" gedrück zu halten herunten und starte dann neu, stimmt die Zahl nicht, es kommt das vorletzte mal Herunterfahren aus Ausgabe.
    Halte ich beim Herunterfahren die "Großschreibtaste", so simmt es auf die Minute.

    Da sagt mir doch, das es zwischen diesen Beiden Arten des Herunterfahrens ein Unterschied gibt, der meiner Meinung nach nicht zu übersehen sein sollte.
    Ich fahre immer mit der gehaltenden "Großschreibtaste" herunter. Der PC braucht danach nur nein paar Sekunden mehr, was aber nicht mal ein Schluck Kaffee wert ist. ;)

    Och ist das nur bei mir so, weil ich etwas vergessen habe ein/aus zu schalten? *kopfkratzen*

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Die 6006 war jetzt nur das erstbeste Beispiel. Es gibt ja weitere Event-IDs welche man zum herunterfahren abfragen kann. Einfach probieren welche ID am zuverlässigsten funktioniert.

    Wenn zwischendurch neu gestartet wurde, dann kann man ja die Schleife weiterführen und die jeweils davor liegenden Events ausgeben.

  • Hallole moombas,

    danke für deinen Hinweis. Da hast du recht. Es geht mir auch eigentlich nur darum anzuzeigen, wann ich Feierabend machen soll wenn ich:
    a) meine normale Zeit voll habe,
    b) das ich nicht 10 Std überschreite,
    und c) wann ich ArbZG-gerecht evtl. auch früher Feierabend machen kann.

    Das Tool soll NIEMLASNIENICHT zur Arbeitszeiterfassung dienen!

    Es soll nur die "Blöcke" der Arbeitszeiten zusammen rechnen und den wie vor erläuterten Zeitpunkt für den Feierabend anzeigen.

    @ Alina: ich habe für die Antworten zu danken! Die Fragen ergeben sich ja ganz natürlich :)

    @ Aspirinjunkie: eine Letzte Frage, so sieht das Array aus

    Row|Col 0
    # 0|True
    # 1|143290
    # 2|12/06/2023
    # 3|02:19:04 PM
    # 4|12/06/2023
    # 5|02:19:04 PM
    # 6|6006
    # 7|4
    # 8|Information
    # 9|0
    # 10|EventLog
    # 11| Computername
    # 12|
    # 13|Der Ereignisprotokolldienst wurde beendet.
    # 14|{Array[9]}

    Weiss tu du evtl. warum die Zeit 02:19:04(Zeitpunkt des Herunterfahrens) zweimal auftaucht oder ist das nicht von Belang?

  • hipfzwirgel : Siehe Hilfe:

    [ 2] - Date at which this entry was submitted
    [ 3] - Time at which this entry was submitted
    [ 4] - Date at which this entry was received to be written to the log
    [ 5] - Time at which this entry was received to be written to the log

    Naja selbst wenn nciht zur Erfassung, brauchst du dennoch ja die richtigen und logisch richtig nachvollziehbaren Werte ;)
    Und dafür sind die genannten Eckpunkte wichtig und richtig zu erfassen und wären auch für Arbeitszeiterfassung möglich (ob zulässig weiß ich jedoch nicht^^).

  • Hallo Moombas,

    ich gebe dir in all den Punkten grundsätzlich recht. :thumbup:

    Da es aber eben nur für mich den bestmöglichen Feierabendzeitpunkt anzeigen soll und das für meine normal strukturierten Arbeitstage,
    denke ich, ist es zumindest für mich nicht so wichtig für Rechtskonformität zu sorgen. Letzendlich wird die Arbeitszeit in der Firma per "Stechuhr" oder
    per SAP offiziell erfasst. Es ist aber halt immer doof wenn ich aufgrund des Homeoffice dem Chef erklären muss wenns mal später geworden ist...;);)

    achja: Danke für deine Erklärung bzgl. des Array.

    Shifttaste drücken vor Herunterfahren klicken bewirkt das totale Herunterfahren... Also keine Speicherung i-welcher Daten für Schnellstartmodus, etc.
    Schnellstart ist bei unseren Rechnern aber deaktiviert und spielt somit keine Rolle...

    Ich denke damit ist der Thread erledigt... Lösung liegt ja vor.

  • Nur zur Info:

    Zur Arbeitszeiterfassung gibt es keinerlei Verschriften, wie die genau zu erfassen ist. Nur was erfasst werden muss:

    • Maximale Arbeitszeiten pro Tag
    • Mindestdauer der täglichen Ruhezeiten
    • Arbeit an Sonn- und Feiertagen
    • Arbeitszeitgrundnormen

    Das kann man Handschriftlich machen oder halt digital erfassen oder wie es bei uns gerade getestet wird über Handy mit Geo App. Hauptsache es wird erfasst und noch wichtiger der Arbeitgeber erkennt es auch so an.

    Es gibt dabei ja auch noch die Vertrauensarbeitszeit und das ist im Grunde Homeoffice ja auch, egal wie man die Zeiten erfasst, es kommt dem AG auf die erledigte Arbeit an, denn nur diese kann er wirklich auch bewerten.

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Warum sollte man beim herunterfahren die Shift-Taste gedrückt halten? -.-

    Bei meinem Laptop bekomme ich mit o. g. Script nur richtige Werte, wenn ich die Shift-Tasts gedrückt halte. Unser Admin sagt, das so richtig herunter gefahren wird. er sagt, das ich dazu bei Google austeichend finde. Ja, unser Hauptadmin ist nicht gerade gesprächig oder erklärt gerne. Seine Meinung ist immer, das man nicht alles erklären muss, wenn das Internet die Erklärung bringt.

    Dennoch komisch das ich nur so die richtige Datum- / Zeitangaben vekomme.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Naja, ich kenne niemanden der den PC mit gedrückter Shift-Taste herunter fährt :rofl:.
    Ggf. wird halt per Default der Fastboot deaktiviert, wenn das immer gewünscht ist den PC "richtig" herunterzufahren anstatt jedesmal irgendeine Taste drücken zu müssen wenn man Herunterfahren anklickt.

  • Hallo Gemeinde,

    doch noch eine Frage:

    die Rückgabe vom Datum und der Uhrzeit erfolgt nach folgendem Muster: $aEvent[2] = mm/dd/yyyy $aEvent[3] = hh:mm:ss pm
    Gibt es funktionen die bei der Formatierung unterstützen, denn um z.B. _DateDiff zu nutzen muss die Formatierung ja
    für das Datum so sein: YYYY/MM/DD ?

    oder kann man das nur per String-Management umstellen?

    p.s. ich habe es mit den Date-Management Funktionen versucht aber die laufen alle auf Fehler, da dort die Eingabe bereits in einer bestimmten Form erfolgen muss...