Я хочу регистрировать временную метку при выполнении определенной строки, чтобы скрипт мог знать, сколько времени прошло с момента последнего выполнения этой строки, даже если скрипт был остановлен в это время и временная метка, сохраненная как переменная, была утеряна.
Я попробовал сохранить временную метку
(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)