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 时,您必须解析日期,因为它只是一个字符串,而不是有效的日期值。
我想从 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 时,您必须解析日期,因为它只是一个字符串,而不是有效的日期值。