PowerShell修改JSON对象timestamp格式不生效如何解决?
问题根因
- 你的代码中存在语法错误:
ForEach块内给timestamp赋值时,额外包裹的大括号{}在PowerShell中代表定义脚本块,而非执行逻辑。你实际是把未执行的脚本块对象赋值给了timestamp字段,并没有真正执行日期解析逻辑,所以原字段的值看起来没有更新。 - 额外说明:通过
ConvertFrom-Json默认转换得到的日志对象属性是可写的,直接修改属性值即可生效,无需额外重建对象或修改JSON源。
修复代码
如果你需要将timestamp转换为PowerShell的DateTime类型对象,直接去掉多余的大括号即可:
$currentLogs.logs | Where-Object { $_.type -eq 'alert' } | ForEach-Object { $_.timestamp = [datetime]::parseexact($_.timestamp, 'yyyyMMdd\THH:mm:ss', $null) }
如果你需要输出为可读性更强的中文日期字符串,可以在解析后追加ToString方法指定格式:
$currentLogs.logs | Where-Object { $_.type -eq 'alert' } | ForEach-Object { $parsedDate = [datetime]::parseexact($_.timestamp, 'yyyyMMdd\THH:mm:ss', $null) $_.timestamp = $parsedDate.ToString('yyyy年MM月dd日 HH:mm:ss') }
修改验证
执行完成后运行以下代码即可查看修改结果:
$currentLogs.logs | Select-Object timestamp, description, severity
内容的提问来源于stack exchange,提问作者Francesca Suba
相关产品推荐
相关产品推荐

