Как в PowerShell сохранить переменную DateTime в файл для последующего извлечения?

Как в PowerShell сохранить переменную DateTime в файл для последующего извлечения?

Я хочу регистрировать временную метку при выполнении определенной строки, чтобы скрипт мог знать, сколько времени прошло с момента последнего выполнения этой строки, даже если скрипт был остановлен в это время и временная метка, сохраненная как переменная, была утеряна.

Я попробовал сохранить временную метку

(Get-Date) | ConvertTo-Json | Out-File "$($env:TEMP)\LastTimeChecked.json"

и чтение временной метки по

[DateTime]$LastTimeChecked=(Get-Content "$($env:TEMP)\LastTimeChecked.json" | ConvertFrom-Json)

Но PowerShall больше не может преобразовать данные, хранящиеся в Json, обратно в формат DateTime. Файл сохраняется следующим образом:

"value":  "\/Date(1656291839853)\/",
"DisplayHint":  2,
"DateTime":  "Monday, 27. June 2022 00:03:59"

Как извлечь временную метку из этого JSON-файла?

решение1

Если вам необходимо преобразовать эту строку даты в объект DateTime на том же компьютере (или на том, на котором установлены те же региональные настройки, что и на том, на котором вы сохранили файл), вы можете использовать:

$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

Если вы не уверены, какие региональные настройки даты и времени установлены на считывающем устройстве, используйте

$date = (Get-Content "$($env:TEMP)\LastTimeChecked.json" -Raw | ConvertFrom-Json).DateTime
$LastTimeChecked = [datetime]::ParseExact($date, 'dddd, dd. MMMM yyyy HH:mm:ss', [cultureinfo]::InvariantCulture)

Связанный контент