Ich möchte den Zeitstempel protokollieren, wenn eine bestimmte Zeile ausgeführt wird, damit das Skript weiß, wie viel Zeit seit der letzten Ausführung dieser Zeile vergangen ist, auch wenn das Skript zwischendurch angehalten wird und der als Variable gespeicherte Zeitstempel verloren geht.
Ich habe versucht, den Zeitstempel zu speichern, indem
(Get-Date) | ConvertTo-Json | Out-File "$($env:TEMP)\LastTimeChecked.json"
und Lesen des Zeitstempels durch
[DateTime]$LastTimeChecked=(Get-Content "$($env:TEMP)\LastTimeChecked.json" | ConvertFrom-Json)
Allerdings kann PowerShall die im Json-Format gespeicherten Daten nicht mehr in das DateTime-Format zurückkonvertieren. Die Datei wird wie folgt gespeichert:
"value": "\/Date(1656291839853)\/",
"DisplayHint": 2,
"DateTime": "Monday, 27. June 2022 00:03:59"
Wie rufe ich den Zeitstempel aus dieser JSON-Datei ab?
Antwort1
Wenn Sie diese Datumszeichenfolge in ein DateTime-Objekt auf demselben Computer (oder einem Computer, der mit denselben regionalen Einstellungen installiert ist wie der, mit dem Sie die Datei gespeichert haben) analysieren müssen, können Sie Folgendes verwenden:
$date = (Get-Content "$($env:TEMP)\LastTimeChecked.json" -Raw | ConvertFrom-Json).DateTime
$LastTimeChecked = [datetime]::ParseExact($date, 'dddd, dd. MMMM yyyy HH:mm:ss', $null) # or [cultureinfo]::CurrentCulture instead of $null
Wenn Sie nicht sicher sind, welche regionalen Datums-/Uhrzeiteinstellungen das Lesegerät hat, verwenden Sie
$date = (Get-Content "$($env:TEMP)\LastTimeChecked.json" -Raw | ConvertFrom-Json).DateTime
$LastTimeChecked = [datetime]::ParseExact($date, 'dddd, dd. MMMM yyyy HH:mm:ss', [cultureinfo]::InvariantCulture)