Betriebszeiten von diversen PCs
Tach allerseits
Ich habe den Auftrag erhalten von ca. 20 bestimmten Windows 10 PCs die sich in unserer AD befinden, die Ein und Ausschaltzeiten über zwei Wochen vom 12.-25.09.22 herauszufinden.
Ist dies ohne großen Aufwand möglich ? Falls ja, wie?
Danke
Ich habe den Auftrag erhalten von ca. 20 bestimmten Windows 10 PCs die sich in unserer AD befinden, die Ein und Ausschaltzeiten über zwei Wochen vom 12.-25.09.22 herauszufinden.
Ist dies ohne großen Aufwand möglich ? Falls ja, wie?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4219658381
Url: https://administrator.de/forum/betriebszeiten-von-diversen-pcs-4219658381.html
Ausgedruckt am: 11.04.2025 um 01:04 Uhr
20 Kommentare
Neuester Kommentar
Mahlzeit.
Geht wahrscheinlich um Stromeinsparpotential
Nicht gänzlich.
Ein Monitoring wäre das einfachste und dann die Systemlaufzeiten überwachen.
Ansonsten müsstest du die Eventlogs der PC auslesen zu Zeiten, wo diese eingeschaltet sind.
Das geht bestimmt mit Powershell > Internetsuche an der Stelle mal bemühen.
Gibt es denn Gründe, warum die über Nacht eingeschaltet bleiben sollen? Eventuell wird auf den Clients ja von zuhause gearbeitet.
Da könnte man ja mit Skripten diese PC zu einem gewissen Zeitpunkt herunterfahren und zeitgesteuert mittels WOL dann morgens wieder hochbringen.
Arbeitszeitüberwachung ist hier aber nicht das primäre Ziel oder? Denn diese ist ja durch das (inzwischen) gesetzlich vorgeschriebene Zeiterfassungssystem "einfacher" zu gestalten.
Gruß
Marc
Geht wahrscheinlich um Stromeinsparpotential
Nicht gänzlich.
Ein Monitoring wäre das einfachste und dann die Systemlaufzeiten überwachen.
Ansonsten müsstest du die Eventlogs der PC auslesen zu Zeiten, wo diese eingeschaltet sind.
Das geht bestimmt mit Powershell > Internetsuche an der Stelle mal bemühen.
Gibt es denn Gründe, warum die über Nacht eingeschaltet bleiben sollen? Eventuell wird auf den Clients ja von zuhause gearbeitet.
Da könnte man ja mit Skripten diese PC zu einem gewissen Zeitpunkt herunterfahren und zeitgesteuert mittels WOL dann morgens wieder hochbringen.
Arbeitszeitüberwachung ist hier aber nicht das primäre Ziel oder? Denn diese ist ja durch das (inzwischen) gesetzlich vorgeschriebene Zeiterfassungssystem "einfacher" zu gestalten.
Gruß
Marc
Zitat von @it-fraggle:
Arbeitszeitüberwachung ist hier aber nicht das primäre Ziel oder?
Oder vielleicht Arbeitnehmerüberwachung? Das ist doch m. W. n. verboten oder?Wenn ich als Unternehmer jetzt immer nachweisen muss, wie lange meine Mitarbeitenden anwesend sind, wird es da bestimmt eine Aufweichung geben
Gruß
Marc
Zitat von @it-fraggle:
Arbeitszeitüberwachung ist hier aber nicht das primäre Ziel oder?
Oder vielleicht Arbeitnehmerüberwachung? Das ist doch m. W. n. verboten oder?Wenn du das über die Einschalt-Zeiten der PCs machen willst - gute Nacht... Da lacht dich nun wirklich JEDER Arbeitnehmer aus... Im _einfachen_ Fall ist es ja eh so das die meisten AN erstmal morgens den Rechner anmachen (so die nich eh nur auf Standby sind) weil der ja hochfahren muss... In der Zeit holt man dann nen Kaffee, nen Raucher geht noch ne Zigarette rauchen,... Jetzt hast du irgendwann Frühstücks/Mittagspause - auch da macht eher keiner den Rechner aus. Und selbst wenn man dann seinen gemütlichen Nachmittagsschlaf von 12:30 - 17:00 hält (weil in ner Behörde beschäftigt :D) bleibt der halt an...
Also über die Zeiten nen AN überwachen wäre ziemlich sinnlos. Wenn man da nicht wirklich in den illegalen Teil geht (Bewegung der Maus/Tastaturanschläge,...) sagt die Ein-/Ausschaltzeit nicht wirklich viel über den Tag aus...
Moin,
Ja das geht, sogar mit recht wenig Aufwand.
Du erhältst eine Liste mit den entsprechenden Event-IDs. 4648 sind Anmeldungen, 4647 ist die Abmeldung, 4800 ist die Abmeldung bei Bildschirmsperre.
Allerdings werden hier auch noch Anmeldeevent von Programmen wie Outlook mit überwacht und Protokolliert. Das musst du mittels message -notmatch "OUTLOOK.EXE" in einer if-Schleife rausfiltern. Wir haben so ein Skript Erstellt, welches wir bei Bedarf ausführen können und dann das Datum eingeben. Das Skript nutzt dann ein invoke-command um an dem Zielrechner alle an und Abmeldung zu ermitteln und in einer Text-Datei zu speichern. Ein weiteres Skript wertet dann die Zeiten zwischen erster und letzter Anmeldung bzw. die dazwischenliegenden Speerzeiten aus.
Gruß
Doskias
Ja das geht, sogar mit recht wenig Aufwand.
1
Get-WinEvent -FilterHashtable @{ LogName='Security'; StartTime=$Auswahl_Datum; EndTime=$day_after; ID=4647,4800,4648}
Du erhältst eine Liste mit den entsprechenden Event-IDs. 4648 sind Anmeldungen, 4647 ist die Abmeldung, 4800 ist die Abmeldung bei Bildschirmsperre.
Allerdings werden hier auch noch Anmeldeevent von Programmen wie Outlook mit überwacht und Protokolliert. Das musst du mittels message -notmatch "OUTLOOK.EXE" in einer if-Schleife rausfiltern. Wir haben so ein Skript Erstellt, welches wir bei Bedarf ausführen können und dann das Datum eingeben. Das Skript nutzt dann ein invoke-command um an dem Zielrechner alle an und Abmeldung zu ermitteln und in einer Text-Datei zu speichern. Ein weiteres Skript wertet dann die Zeiten zwischen erster und letzter Anmeldung bzw. die dazwischenliegenden Speerzeiten aus.
Gruß
Doskias
Moin,
Der Start löst ein Event mit der ID 12 (Kategorie 1) Quelle Kernel-General und das Herunterfahren ein Event 13 (Kategorie 2) Quelle Kernel-General im Systemprotokoll aus. Dann noch ein klein wenig Powershell
Und schon weißt Du, wann der Rechner ein- und wieder ausgeschaltet wurde. Allerdings nur, wenn er wirklich neu gestartet wurde. Geht der Rechner z. B. in den Ruhezustand, dann sehen die Events anders aus. Wenn beide Events direkt aufeinander folgen, dann war es ein reboot.
hth
Erik
Der Start löst ein Event mit der ID 12 (Kategorie 1) Quelle Kernel-General und das Herunterfahren ein Event 13 (Kategorie 2) Quelle Kernel-General im Systemprotokoll aus. Dann noch ein klein wenig Powershell
1
2
2
get-eventlog -after "09/12/2022" -before "09/26/2022" -logname system | ?{($_.eventid -eq 12) -and ($_.category -eq "(1)")}
get-eventlog -after "09/12/2022" -before "09/26/2022" -logname system | ?{($_.eventid -eq 13) -and ($_.category -eq "(2)")}
Und schon weißt Du, wann der Rechner ein- und wieder ausgeschaltet wurde. Allerdings nur, wenn er wirklich neu gestartet wurde. Geht der Rechner z. B. in den Ruhezustand, dann sehen die Events anders aus. Wenn beide Events direkt aufeinander folgen, dann war es ein reboot.
hth
Erik
Zitat von @uridium69:
@radioguru: Nein es gibt keinerlei Gründe diese über Nacht eingeschaltet zu lassen. Wir haben bereits andere PCs, welche wir mittels Script zeitgesteuert herunterfahren lassen, dies sind alle unpersönliche PCs in unserem Laborumfeld.
Ja es geht ums Energiesparen.
@radioguru: Nein es gibt keinerlei Gründe diese über Nacht eingeschaltet zu lassen. Wir haben bereits andere PCs, welche wir mittels Script zeitgesteuert herunterfahren lassen, dies sind alle unpersönliche PCs in unserem Laborumfeld.
Ja es geht ums Energiesparen.
Dann das Skript um die 20 Stationen erweitern und gut, oder nicht?
Wenn sich dann Mitarbeiter morgends beschweren, dass der PC ja 49 Sekunden brauchte um hochzufahren, dann würde ich da gelassen auf die GF verweisen.
Wenn ein GF PC dabei sein sollte mit der gleichen Beschwerde, würde ich auf den Plan mit dem Energiesparen verweisen.
Case closed.
Gruß
Marc
Moin
Da brauchst du doch keine bestimmten Events prüfen. Prüf doch einfach ob außerhalb der Arbeitszeit (also zum Beispiel zwischen 22:00 Uhr und 04:00 Uhr) irgend ein Eintrag im Protokoll zu finden ist. Selbst wenn der Rechner nur an ist und nichts gemacht wird, dann findest du (wenn nicht verändert) spätestens alle 120 Minuten die Gruppenrichtlinien-Aktualisierung der Maschine.
Zitat von @uridium69:
@radioguru: Nein es gibt keinerlei Gründe diese über Nacht eingeschaltet zu lassen. Wir haben bereits andere PCs, welche wir mittels Script zeitgesteuert herunterfahren lassen, dies sind alle unpersönliche PCs in unserem Laborumfeld.
Ja es geht ums Energiesparen.
@radioguru: Nein es gibt keinerlei Gründe diese über Nacht eingeschaltet zu lassen. Wir haben bereits andere PCs, welche wir mittels Script zeitgesteuert herunterfahren lassen, dies sind alle unpersönliche PCs in unserem Laborumfeld.
Ja es geht ums Energiesparen.
Da brauchst du doch keine bestimmten Events prüfen. Prüf doch einfach ob außerhalb der Arbeitszeit (also zum Beispiel zwischen 22:00 Uhr und 04:00 Uhr) irgend ein Eintrag im Protokoll zu finden ist. Selbst wenn der Rechner nur an ist und nichts gemacht wird, dann findest du (wenn nicht verändert) spätestens alle 120 Minuten die Gruppenrichtlinien-Aktualisierung der Maschine.
Doch, habe ich doch weiter oben geschreiben:
Du erhältst eine Liste mit den entsprechenden Event-IDs. 4648 sind Anmeldungen, 4647 ist die Abmeldung, 4800 ist die Abmeldung bei Bildschirmsperre.
Solange dein Security-Protokoll am lokalen Rechner zurück reicht, kannst du an und Abmeldungen damit ermitteln.
und Erikro hat geschrieben:
Also eigentlich hast du alle Informationen, die du brauchst ;)
1
Get-WinEvent -FilterHashtable @{ LogName='Security'; StartTime=$Auswahl_Datum; EndTime=$day_after; ID=4647,4800,4648}
Solange dein Security-Protokoll am lokalen Rechner zurück reicht, kannst du an und Abmeldungen damit ermitteln.
und Erikro hat geschrieben:
Zitat von @erikro:
Moin,
Der Start löst ein Event mit der ID 12 (Kategorie 1) Quelle Kernel-General und das Herunterfahren ein Event 13 (Kategorie 2) Quelle Kernel-General im Systemprotokoll aus. Dann noch ein klein wenig Powershell
Und schon weißt Du, wann der Rechner ein- und wieder ausgeschaltet wurde. Allerdings nur, wenn er wirklich neu gestartet wurde. Geht der Rechner z. B. in den Ruhezustand, dann sehen die Events anders aus. Wenn beide Events direkt aufeinander folgen, dann war es ein reboot.
Moin,
Der Start löst ein Event mit der ID 12 (Kategorie 1) Quelle Kernel-General und das Herunterfahren ein Event 13 (Kategorie 2) Quelle Kernel-General im Systemprotokoll aus. Dann noch ein klein wenig Powershell
1
2
2
get-eventlog -after "09/12/2022" -before "09/26/2022" -logname system | ?{($_.eventid -eq 12) -and ($_.category -eq "(1)")}
get-eventlog -after "09/12/2022" -before "09/26/2022" -logname system | ?{($_.eventid -eq 13) -and ($_.category -eq "(2)")}
Und schon weißt Du, wann der Rechner ein- und wieder ausgeschaltet wurde. Allerdings nur, wenn er wirklich neu gestartet wurde. Geht der Rechner z. B. in den Ruhezustand, dann sehen die Events anders aus. Wenn beide Events direkt aufeinander folgen, dann war es ein reboot.
Also eigentlich hast du alle Informationen, die du brauchst ;)
Moin,
Echt? Das amerikanische Format geht doch sonst immer. Als Tipp: Ich nehme gerne an solchen Stellen get-date. Also so
Es gibt dafür den Parameter -computername. Da muss auch WMI auf den Rechnern erreichbar sein.
hth
Erik
Zitat von @uridium69:
Get-EventLog : Der Parameter "Before" kann nicht gebunden werden. Der Wert "09/26/2022" kann nicht in den Typ "System.DateTime" konvertiert werden. Fehler:
"Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."
In Zeile:1 Zeichen:42
Get-EventLog : Der Parameter "Before" kann nicht gebunden werden. Der Wert "09/26/2022" kann nicht in den Typ "System.DateTime" konvertiert werden. Fehler:
"Die Zeichenfolge wurde nicht als gültiges DateTime erkannt."
In Zeile:1 Zeichen:42
get-eventlog -after "09/12/2022" -before "09/26/2022" -logname system ...
Echt? Das amerikanische Format geht doch sonst immer. Als Tipp: Ich nehme gerne an solchen Stellen get-date. Also so
1
get-eventlog -after (get-date "12.09.2022") -before (get-date "26.09.2022") -logname system
Allerdings müssten noch die PC Namen mitgegeben werden, und wie?
PC-1
PC-4
PC-7
PC-1
PC-4
PC-7
Es gibt dafür den Parameter -computername. Da muss auch WMI auf den Rechnern erreichbar sein.
hth
Erik
Ich hab es bei mir ausprobiert. Das amerikanische Format hat er nicht geschluckt. Das europäische Format schon.