uridium69
Goto Top

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

Content-Key: 4219658381

Url: https://administrator.de/contentid/4219658381

Printed on: April 25, 2024 at 10:04 o'clock

Member: maretz
maretz Oct 10, 2022 at 12:19:14 (UTC)
Goto Top
Du kannst die Event-Logs von Windows ansehen - da stehen ja die zig Events drinne wenn der Rechner "an" ist.
Das wird dir zwar nicht viel helfen aber zumindest siehst du ob der eingeschaltet war oder nicht.
Member: radiogugu
radiogugu Oct 10, 2022 at 12:20:29 (UTC)
Goto Top
Mahlzeit.

Geht wahrscheinlich um Stromeinsparpotential face-smile

Zitat von @uridium69:
Ist dies ohne großen Aufwand möglich ? Falls ja, wie?

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
Member: it-fraggle
it-fraggle Oct 10, 2022 at 12:54:02 (UTC)
Goto Top
Arbeitszeitüberwachung ist hier aber nicht das primäre Ziel oder?
Oder vielleicht Arbeitnehmerüberwachung? Das ist doch m. W. n. verboten oder?
Member: radiogugu
radiogugu Oct 10, 2022 at 12:57:22 (UTC)
Goto Top
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 face-smile

Gruß
Marc
Member: maretz
maretz Oct 10, 2022 at 13:20:25 (UTC)
Goto Top
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...
Member: Doskias
Doskias Oct 10, 2022 at 14:05:14 (UTC)
Goto Top
Moin,

Ja das geht, sogar mit recht wenig Aufwand.
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
Member: uridium69
uridium69 Oct 10, 2022 at 14:18:11 (UTC)
Goto Top
@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.
Member: erikro
erikro Oct 10, 2022 updated at 14:27:30 (UTC)
Goto Top
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

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
Member: radiogugu
radiogugu Oct 10, 2022 at 14:24:37 (UTC)
Goto Top
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.

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
Member: Doskias
Doskias Oct 11, 2022 at 06:14:45 (UTC)
Goto Top
Moin
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.

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.
Member: AndreaZ
AndreaZ Oct 12, 2022 at 05:48:49 (UTC)
Goto Top
Ich verwende dazu das Tool CWSysinfo (Freeware)

Laufzeit gesamt, Letzter Boot, Letztes Herunterfahren
boottime
Member: Doskias
Doskias Oct 12, 2022 at 06:59:17 (UTC)
Goto Top
Moin,

Letzter Boot und letztes Herunterfahren nützt dir aber nichts, wenn du einen definierten Zeitraum wissen willst. ich selbst Pinge einfach Nachts um 3 Uhr alle Geräte der Client-OU durch und notiere in einer Textdatei, welche Geräte erreichbar waren.

Gruß
Doskias
Member: uridium69
uridium69 Oct 12, 2022 at 12:03:20 (UTC)
Goto Top
@Doskias: Genau, es geht ja darum wie lange die Geräte "Up & Running" waren, ja das Script kann ja nicht wissen was zwischen Boot und Herunterfahren gelaufen ist, aber im Nachhinein kann ich es nicht mehr ermitteln?
Member: Doskias
Doskias Oct 12, 2022 updated at 12:22:50 (UTC)
Goto Top
Doch, habe ich doch weiter oben geschreiben:

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.

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

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 ;)
Member: uridium69
uridium69 Oct 12, 2022 at 12:55:06 (UTC)
Goto Top
Das müsste fürs Erste ausreichen. Nun aber die Frage, ich will das Remote abfragen, sprich vielleicht am Idealsten von einem Server aus, Rein Spasshalber habe ich den Befehal mal bei mir im Powershell (Adminmodus) eingegeben und erhielt folgende Fehlermeldung:

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

back-to-topget-eventlog -after "09/12/2022" -before "09/26/2022" -logname system ...

back-to-top~~~~~~~~~~~~

+ CategoryInfo : InvalidArgument: (face-smile [Get-EventLog], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.GetEventLogCommand

Allerdings müssten noch die PC Namen mitgegeben werden, und wie?

Zb.

PC-1
PC-4
PC-7


usw...
Member: Doskias
Doskias Oct 12, 2022 at 13:18:04 (UTC)
Goto Top
wie ist denn deine Datum-Format im System?

Ich vermute, wenn du es in ein passendes Format schreibst, dann funktioniert es:

get-eventlog -after "12.09.2022" -before "26.09.2022" -logname system | ?{($_.eventid -eq 12) -and ($_.category -eq "(1)")}  

Gruß
Doskias
Member: erikro
erikro Oct 12, 2022 updated at 13:32:08 (UTC)
Goto Top
Moin,

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

back-to-topget-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

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

Es gibt dafür den Parameter -computername. Da muss auch WMI auf den Rechnern erreichbar sein.

hth

Erik
Member: Doskias
Doskias Oct 12, 2022 at 13:39:26 (UTC)
Goto Top
Zitat von @erikro:
Echt? Das amerikanische Format geht doch sonst immer.

Ich hab es bei mir ausprobiert. Das amerikanische Format hat er nicht geschluckt. Das europäische Format schon.
Member: erikro
erikro Oct 12, 2022 at 13:57:10 (UTC)
Goto Top
Zitat von @Doskias:

Zitat von @erikro:
Echt? Das amerikanische Format geht doch sonst immer.

Ich hab es bei mir ausprobiert. Das amerikanische Format hat er nicht geschluckt. Das europäische Format schon.

OK, wieder was gelernt. face-wink
Member: myssv-Anwender
myssv-Anwender Oct 17, 2022 at 08:02:52 (UTC)
Goto Top
Ich nutze die kostenlose Version von Lansweeper mit 100 freien Assets.

Da gibt es neben vielen anderen Optionen auch die Uptimes sogar als Grafik:
temp