Quiero registrar la marca de tiempo cuando se ejecuta una determinada línea para que el script pueda saber cuánto tiempo ha pasado desde la última ejecución de esa línea, incluso si el script se detiene en el medio y la marca de tiempo guardada como variable se pierde.
Intenté guardar la marca de tiempo por
(Get-Date) | ConvertTo-Json | Out-File "$($env:TEMP)\LastTimeChecked.json"
y leyendo la marca de tiempo por
[DateTime]$LastTimeChecked=(Get-Content "$($env:TEMP)\LastTimeChecked.json" | ConvertFrom-Json)
Pero PowerShall ya no puede convertir los datos almacenados en Json al formato DateTime. El archivo se guarda de la siguiente manera:
"value": "\/Date(1656291839853)\/",
"DisplayHint": 2,
"DateTime": "Monday, 27. June 2022 00:03:59"
¿Cómo recuperar la marca de tiempo de este archivo Json?
Respuesta1
Si necesita analizar esa cadena de fecha en un objeto DateTime en la misma máquina (o una que esté instalada con la misma configuración regional con la que guardó el archivo), puede usar:
$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
Si no está seguro de qué configuración regional de fecha y hora tiene la máquina lectora, utilice
$date = (Get-Content "$($env:TEMP)\LastTimeChecked.json" -Raw | ConvertFrom-Json).DateTime
$LastTimeChecked = [datetime]::ParseExact($date, 'dddd, dd. MMMM yyyy HH:mm:ss', [cultureinfo]::InvariantCulture)