首页 > 解决方案 > Powershell 导出到 csv 时间跨度总和

问题描述

我需要将总时间跨度值的结果导出到 csv 文件。

 $outItems = New-Object System.Collections.Generic.List[System.Object]

 [TimeSpan[]]$outItems = foreach ($eachtimer in $DurationColl){

 if ($eachtimer -match 'H|M|S'){
   Convert-TimeString -Time  $eachtimer -Format 'm\Ms\.fff\S' }
 else {
   Convert-TimeString -Time $eachtimer -Format "h\:mm\:ss"} 
}

 $seconds = ($outItems | Measure-Object -Property TotalMilliseconds -Sum).Sum
 $ts =  [timespan]::FromMilliseconds($seconds) 
 $ert =  ("{0:hh\:mm\:ss\,fff}" -f $ts) 
 $ert | Export-Csv  C:\Users\User\Documents\output.csv -Append -NoTypeInformation -Encoding ASCII

$ert 值为 04:05:38,631,在 csv 上出现属性长度。在简历中,我的 Export-Csv 不起作用。

谢谢你的帮助

标签: powershell

解决方案


Export-Csv将输入对象转换为带分隔符的文本文件。这些对象的属性成为列/标题,值成为在列下对齐的行。当您的输入对象是类型字符串时,字符串的唯一属性是Length. 因此,您看到的结果是预期的。要实现预期的行为,您应该使用包含所需属性的对象类型或创建您自己的自定义对象。

使用自定义对象,您可以执行以下操作,这将创建一个具有 property 的对象Timespan

[pscustomobject]@{'Timespan' = $ert} |
    Export-Csv C:\Users\User\Documents\output.csv -Append -NoTypeInformation -Encoding ASCII

推荐阅读