在 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)

相关内容