修改Azure DevOps脚本时间戳格式以适配PowerBI
问题:Azure DevOps脚本生成的嵌套时间戳导致PowerBI导入失败
我用Azure DevOps脚本采集数据时,通过Get-Date生成的TimeStamp字段在导出JSON后呈现嵌套结构(包含value、DisplayHint、DateTime子字段),将该JSON导入PowerBI时触发报错。需要把TimeStamp转换为ISO 8601标准格式(示例:"2022-08-08T19:00:53.0907571-05:00")。
相关代码片段:
try { $projectsDataArray = getProjects| ForEach-Object { @{ TimeStamp = Get-Date ProjectMeta = processProject($_) } } #****遍历获取每个定义的ID $projectsDataArray | ConvertTo-Json -Depth 8 | Set-Content C:\Users\60085367\Documents\Proyecto3ApiDevOps\NuevaPrueba\devopsmetaFinal.json } catch { Write-Output $_ }
解决方案
问题根源是Get-Date默认返回DateTime对象,ConvertTo-Json会将其序列化为嵌套结构。只需让Get-Date直接输出ISO 8601格式的字符串即可,有两种简便实现方式:
方式1:使用内置格式符快速生成
PowerShell的Get-Date支持用-Format o参数直接输出ISO 8601标准格式的字符串,修改TimeStamp赋值语句即可:
try { $projectsDataArray = getProjects| ForEach-Object { @{ TimeStamp = Get-Date -Format o ProjectMeta = processProject($_) } } #****遍历获取每个定义的ID $projectsDataArray | ConvertTo-Json -Depth 8 | Set-Content C:\Users\60085367\Documents\Proyecto3ApiDevOps\NuevaPrueba\devopsmetaFinal.json } catch { Write-Output $_ }
方式2:自定义格式字符串(灵活控制)
如果需要更精细的格式控制,可以调用DateTime对象的ToString()方法,指定完整的ISO 8601格式模板:
TimeStamp = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz")
若需要UTC时间格式(带Z后缀),可转换为UTC时间后再输出:
TimeStamp = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")
修改后导出的JSON中,TimeStamp会是标准的字符串格式,PowerBI可直接识别,不会再因嵌套结构报错。
内容的提问来源于stack exchange,提问作者Alberto Smith
相关产品推荐
相关产品推荐

