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

相關內容