tilbum
Goto Top

Datums vergleich

Hallo liebe Community,


hab da mal eine Frage zum Datums vergleich.

Ich möchte prüfen, ob das Änderungsdatum einer Datei länger als 15h seit dem Start her ist.

Hierfür habe ich mir folgendes überlegt.

$aktuelleDatei  ="C:\test\test.exe"  

#folgendes Datum wird Stunden vor der if-Schleife Initialisiert
$Day = Get-Date


....

$lastwritetime1 = (Get-ItemProperty $aktuelleDatei -Name LastWriteTime).LastWriteTime


if((New-TimeSpan -Start $Day -End $lastwritetime1 ).Hours -gt 15 )

etc.


leider kann ich das ganze nicht so vergleichen, wie ich es gerne wollen würde.
Mir wird kein Fehler ausgegeben, nur das Ergebnis ist nicht das, womit man rechnen würde. Ich habe das Gefühl, dass das Datum relativ ist und nur die Uhrzeit verglichen wird.

Weiß jemand genau was hier an dieser Stelle passiert? Beide Werte haben das Format dd.MM.yyyy HH:mm:ss
lassen sich aber leider nicht richtig miteinander vergleichen.

Alternativen sind sehr gerne gesehen!

Danke im Voraus.

Content-Key: 589707

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

Printed on: May 14, 2024 at 17:05 o'clock

Member: em-pie
Solution em-pie Jul 22, 2020 updated at 15:31:09 (UTC)
Goto Top
Moin,

bin kein Powersheller (leider, aber kommt noch), aber mal vom Grundsatz:
Windows (und eigentlich alle anderen Systeme) rechnen ohnehin nur in Zeiten, nämlich in aller Regel in Sekunden, beginnend beim 01.01.1900.

Für ein "Debugging" würde ich mir ja mal beide Zeitstempel so wie sie sind irgendwo anzeigen lassen, um zu sehen, ob die Werte augenscheinlich überhaupt einem Datum/ Zeitstempel entsprechen.
Dann würde ich sicherstellen, dass beide Werte auch vom Typ datetime sind, bevor ich mit einem Vergleich beginne:
https://www.msxfaq.de/code/powershell/psdatetime.htm

Und dann gäbe es da noch die verschiedene Wege der Prüfung:
Man könnte z.B. vom aktuellen Zeitstempel (Zeile 9) 15h abziehen und dann prüfen, ob dein $Day < denn dein $lastwritetime1 ist...

Wie gesagt, bin kein PowerShell-Kenner/ Könner, aber das wären jetzt meine "logischen" Ansätze


Edit: das habe ich gerade noch gefunden:
$lastWrite = (get-item $fullPath).LastWriteTime
$timespan = new-timespan -days 5 -hours 10 -minutes 5

if (((get-date) - $lastWrite) -gt $timespan) {
    # older
} else {
    # newer
}

Quelle: https://stackoverflow.com/questions/16613656/how-can-i-check-if-a-file-i ...

Gruß
em-pie
Member: emeriks
emeriks Jul 22, 2020 updated at 15:53:21 (UTC)
Goto Top
Hi,
Erstens
$FileDatetime = (Get-ChildItem $aktuelleDatei).LastWriteTime    # viel einfacher
Zweitens
"mehr als 15 Stunden alt" ist ungleich "Änderungsdatum einer Datei länger als 15h seit dem Start her"

"mehr als 15 Stunden alt" wäre z.B.
If((Get-ChildItem $aktuelleDatei).LastWriteTime -lt (Get-Date).AddHours(-15)) {
  # Datei älter als 15h
}
If((Get-ChildItem $aktuelleDatei).LastWriteTime -gt (Get-Date).AddHours(-15)) {
  # Datei innerhalb der letzten 15h
}
"Datei länger als 15h seit dem Start her"
Hier muss man erstmal die letzte Startzeit des Computers herausbekommen und dann damit vergleichen.

E.

Edit
$LastBootTime = [datetime](gcim Win32_OperatingSystem).LastBootUpTime
If((Get-ChildItem $aktuelleDatei).LastWriteTime.AddHours(-15) -gt $LastBootTime) {
  # Datei jünger als 15h nach der Startzeit
}
Member: em-pie
em-pie Jul 22, 2020 at 15:52:29 (UTC)
Goto Top
Zitat von @emeriks:
"Datei länger als 15h seit dem Start her"
Hier muss man erstmal die letzte Startzeit des Computers herausbekommen und dann damit vergleichen.

Die Frage ist, ob mit "seit dem letzten Start" die Startzeit des OS oder die Startzeit des Scripts gemeint ist!?
Da muss der TO mal noch nachliefern.
Member: TilBum
TilBum Jul 24, 2020 at 13:23:11 (UTC)
Goto Top
Danke dir vielmals ! Das hat mir schon geholfen mein Problem zu lösen face-smile
Super!
Member: TilBum
TilBum Jul 24, 2020 at 13:25:18 (UTC)
Goto Top
Vielen Dank dir! Euro Ansätze haben mir sehr weiter geholfen. Habe das Problem lösen können, leider aber nicht eher Anworten können :/. Danke nochmal.
Member: emeriks
emeriks Jul 24, 2020 at 13:33:08 (UTC)
Goto Top
Oooch, keine Ursache ...