运行以下命令:
Get-Process | Select-Object Id,ProcessName,CPU,StartTime | ConvertTo-Json生成的JSON将StartTime显示为:
"\/Date(1553511537485)\/"请告诉我如何以给定的日期格式显示StartTime?
发布于 2019-03-25 20:16:58
您可以使用计算属性在StartTime上执行.ToString方法,该方法会将其转换为其默认的等效字符串格式:
Get-Process | Select-Object Id,ProcessName,CPU,@{N='StartTime';E={$_.StartTime.ToString()}}| ConvertTo-Json示例结果:
"StartTime": "23/03/2019 08:55:06"发布于 2020-04-23 21:12:24
试着通过管道通过类似这样的东西,它的好处是处理具有未知属性名称的日期时间:
foreach-object {$_.Psobject.properties | foreach-object {if ($_.value -ne $null -and $_.value.gettype() -match '.*datetime'){$_.value=$_.value.toString("o")}};$_}例如,对于原始问题:
Get-Process | Select-Object Id,ProcessName,CPU,StartTime | foreach-object {$_.Psobject.properties | foreach-object {if ($_.value -ne $null -and $_.value.gettype() -match '.*datetime'){$_.value=$_.value.toString("o")}};$_} | convertto-json这里的StartTime是一个日期时间字段,因此它在输出JSON中转换为一个ISO。
{
"Id": 7192,
"ProcessName": "ZeroConfigService",
"CPU": 19.703125,
"StartTime": "2020-04-20T16:59:44.1843370+01:00"
}...instead的地址:
{
"Id": 7192,
"ProcessName": "ZeroConfigService",
"CPU": 19.71875,
"StartTime": "\/Date(1587398384184)\/"
}一种类似的方法可以用于数据库结果,其中字段名可能是未知的:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery, getDate() anotherDate,'test' string" -ServerInstance "localhost" | Select-Object * -ExcludeProperty ItemArray, Table, RowError, RowState, HasErrors | convertto-json...gives:
{
"TimeOfQuery": "\/Date(1587646812587)\/",
"anotherDate": "\/Date(1587646812587)\/",
"string": "test"
}鉴于这一点:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery, getDate() anotherDate,'test' string" -ServerInstance "localhost" | Select-Object * -ExcludeProperty ItemArray, Table, RowError, RowState, HasErrors | foreach-object {$_.Psobject.properties | foreach-object {if ($_.value -ne $null -and $_.value.gettype() -match '.*datetime'){$_.value=$_.value.toString("o")}};$_} | convertto-json...gives ISO格式的日期:
{
"TimeOfQuery": "2020-04-23T13:53:59.1230000",
"anotherDate": "2020-04-23T13:53:59.1230000",
"string": "test"
}可以通过更改getString方法toString("o")的参数来更改日期格式。"o“表示ISO日期格式。有关详细信息,请参阅(我认为) https://docs.microsoft.com/en-us/dotnet/api/system.datetime.tostring的示例部分。
请注意,管道中的select-object是必需的,否则foreach-object子句将尝试更新原始对象的属性,这可能是只读的,您可能不希望这样做。(有没有人知道更好的方法?)
https://stackoverflow.com/questions/55337557
复制相似问题