将字符串数组添加到 CSV

Add string array to CSV

我正在使用一个 Powershell 脚本,该脚本从 XML 文档中提取的数据创建 CSV 文件。我为每种数据类型创建了数组,然后使用这些数组创建了 CSV。

XML 有一个 UNIX 时间戳。我创建了一个数组,将 UNIX 时间转换为更易读的格式,但该数组未打印到 CVS。

$StartTimeComp = [xml]$RMAudit.RMAudit.RMRecord.StartTime

foreach ($time in $StartTimeComp){
$StartTime += [System.TimeZone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($time))
}

$outArray = @()

foreach ( $newtime in $StartTime ) 
{
    $outArray += New-Object PsObject -Property @{
    'Start Time' = $NewTime}
}

$outArray | export-csv 'C:\location\Results.csv'

严格按照您上面的代码,有一个明显的问题可以通过两种方式解决。 $StartTime 不是数组。您可以像使用 $outArray 一样将它创建为一个空数组,或者您可以移动它,使其看起来像这样:

$Starttime = foreach ($time in $StartTimeComp){
[System.TimeZone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($time))
}

这将导致[System.TimeZone]行为ForEach循环的每个循环输出一个[DateTime]对象,并且$StartTime将它们全部收集为一个数组。然后你有一系列的东西可以循环创建你的自定义对象数组......但你真的只是在浪费周期。试试这个:

[xml]$RMAudit.RMAudit.RMRecord.StartTime|Select @{label = 'Start Time';expression = {[System.TimeZone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($_))}}|Export-CSV 'C:\Location\Results.csv'

这应该可以在一行中完成上述代码的所有工作。