我想从Get-VM
cmdlet获取所有Hyper-V VM信息,如下所示:
Get-Vm | Select-Object * | ConvertTo-Json
每个VM词典中的CreationTime
在输出中看起来像\/Date(-11644473600000)\/",
如何在输出json中使其看起来像2017/11/29 16:09:00
格式?
当我猜它是Epoch时间戳的数量时,我发现它有时是负数。
我发现了一些关于此问题的文章,以Get-Date
为例,但在我的情况下,它是Get-VM
中的一个属性,我不确定是否有更快的方法来转换日期属性用于解析输出的长脚本。
答案 0 :(得分:0)
要根据用户定义的表达式选择属性,可以通过以下方式在Select-Object
中定义它们:
Get-VM | Select-Object -Property @{Name="ReadableCreationTime"; Expression={Get-Date $_.CreationTime}}, *
这将选择用户定义的属性ReadableCreationTime
和所有其他属性(*
)。
现在,您要排除原始CreationTime
,因为它是a)难以阅读,b)多余为ReadableCreationTime
。这可以使用-ExcludeProperty
参数完成:
Get-VM | Select-Object -Property @{Name="ReadableCreationTime"; Expression={Get-Date $_.CreationTime}}, * -ExcludeProperty CreationTime
...并将结果传递给ConvertTo-Json
请记住,在读取生成的json时,您必须解析日期,因为它只是一个字符串,而不是有效的Date值。