我想記錄執行某一行時的時間戳,以便腳本可以知道自上次執行該行以來已經過去了多長時間,即使腳本在中間停止並且保存為變數的時間戳丟失。
我嘗試透過保存時間戳
(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)