powershell 在使用 ConvertTo-Json 时将日期 属性 转换为字符串

powershell convert the date property to string when using ConvertTo-Json

我想从 Get-VM cmdlet 获取所有 Hyper-V 虚拟机信息,如下所示:

Get-Vm | Select-Object * | ConvertTo-Json

每个 VM 字典中的 CreationTime 在输出中看起来像 \/Date(-11644473600000)\/",

如何在输出 json 中使其看起来像这种格式 2017/11/29 16:09:00

当我猜测它是Epoch时间戳的数字时,我发现它有时是负数。

我发现一些关于这个问题的文章以 Get-Date 为例,但就我而言,它是 Get-VM 中的 属性 我不确定是否有更快的方法无需长脚本即可转换日期 属性 来解析输出。

要select一个基于用户定义表达式的属性,可以按以下方式在Select-Object中定义它们:

Get-VM | Select-Object -Property @{Name="ReadableCreationTime"; Expression={Get-Date $_.CreationTime}}, *

此 select 是用户定义的 属性 ReadableCreationTime 和所有其他属性 (*)。

现在,您想排除原始 CreationTime,因为它 a) 难以阅读并且 b) 对 ReadableCreationTime 来说是多余的。这可以使用 -ExcludeProperty 参数来完成:

Get-VM | Select-Object -Property @{Name="ReadableCreationTime"; Expression={Get-Date $_.CreationTime}}, * -ExcludeProperty CreationTime

...并将结果通过管道传递给 ConvertTo-Json

请记住,在读取结果 json 时,您必须解析日期,因为它只是一个字符串,而不是有效的日期值。