首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConvertTo-Json格式设置

ConvertTo-Json格式设置
EN

Stack Overflow用户
提问于 2019-03-25 20:13:37
回答 2查看 493关注 0票数 2

运行以下命令:

代码语言:javascript
复制
Get-Process | Select-Object Id,ProcessName,CPU,StartTime | ConvertTo-Json

生成的JSON将StartTime显示为:

代码语言:javascript
复制
"\/Date(1553511537485)\/"

请告诉我如何以给定的日期格式显示StartTime?

EN

回答 2

Stack Overflow用户

发布于 2019-03-25 20:16:58

您可以使用计算属性在StartTime上执行.ToString方法,该方法会将其转换为其默认的等效字符串格式:

代码语言:javascript
复制
Get-Process | Select-Object Id,ProcessName,CPU,@{N='StartTime';E={$_.StartTime.ToString()}}| ConvertTo-Json

示例结果:

代码语言:javascript
复制
 "StartTime":  "23/03/2019 08:55:06"
票数 2
EN

Stack Overflow用户

发布于 2020-04-23 21:12:24

试着通过管道通过类似这样的东西,它的好处是处理具有未知属性名称的日期时间:

代码语言:javascript
复制
foreach-object {$_.Psobject.properties | foreach-object {if ($_.value -ne $null -and $_.value.gettype() -match '.*datetime'){$_.value=$_.value.toString("o")}};$_}

例如,对于原始问题:

代码语言:javascript
复制
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。

代码语言:javascript
复制
    {
        "Id":  7192,
        "ProcessName":  "ZeroConfigService",
        "CPU":  19.703125,
        "StartTime":  "2020-04-20T16:59:44.1843370+01:00"
    }

...instead的地址:

代码语言:javascript
复制
    {
        "Id":  7192,
        "ProcessName":  "ZeroConfigService",
        "CPU":  19.71875,
        "StartTime":  "\/Date(1587398384184)\/"
    }

一种类似的方法可以用于数据库结果,其中字段名可能是未知的:

代码语言:javascript
复制
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery, getDate() anotherDate,'test' string" -ServerInstance "localhost" | Select-Object * -ExcludeProperty ItemArray, Table, RowError, RowState, HasErrors | convertto-json

...gives:

代码语言:javascript
复制
{
    "TimeOfQuery":  "\/Date(1587646812587)\/",
    "anotherDate":  "\/Date(1587646812587)\/",
    "string":  "test"
}

鉴于这一点:

代码语言:javascript
复制
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格式的日期:

代码语言:javascript
复制
{
    "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子句将尝试更新原始对象的属性,这可能是只读的,您可能不希望这样做。(有没有人知道更好的方法?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55337557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档