我想记录执行某一行时的时间戳,以便脚本可以知道自上次执行该行以来已经过了多长时间,即使脚本在中间停止并且保存为变量的时间戳丢失。
我尝试通过以下方式保存时间戳
(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)