0

使用“ConvertTo-Json”时,Powershell 会自动将所有日期时间字段转换为纪元时间。有没有办法防止这种情况发生或将其更改回人类可读的日期时间?例如,检查输出中的一些字段

命令:

Get-LocalUser | ConvertTo-Json

输出:

"PasswordChangeableDate":  "\/Date(1597311158786)\/",
"PasswordExpires":  null,
"UserMayChangePassword":  true,
"PasswordRequired":  true,
"PasswordLastSet":  "\/Date(1597224758786)\/",
"LastLogon":  "\/Date(1597238163431)\/",

有没有办法阻止 Powershell 将上述字段转换为纪元时间,或者将它们转换回人类可读的日期时间?

4

1 回答 1

2

我怀疑您使用的是 Powershell 5 版本。在 Powershell 5ConvertTo-Json中,cmdlet 是使用JavaScriptSerializer实现的。请参阅此以了解托管类型和等效 JSON 之间的映射。

托管类型 JSON 等价物
约会时间 日期对象,在 JSON 中表示为"/Date(number of ticks)/"。刻度数是一个正或负长值,表示自 UTC 1970 年 1 月 1 日午夜以来经过的刻度数(毫秒)。支持的最大日期值为 MaxValue(12/31/9999 11:59:59 PM ) 并且支持的最小日期值为 MinValue (1/1/0001 12:00:00 AM)。

我能想到的一种解决方案是在序列化为 JSON 或升级到Powershell 7之前将日期转换为字符串( UsingToString() ) 。这是因为 PowerShell 7 在后台使用Newtonsoft Json.NET,而 Json.NET 使用的默认格式是 ISO 8601 标准:."2012-03-19T07:22Z"

于 2021-09-22T06:18:17.220 回答