首页 > 解决方案 > 在 csv 文件的开头附加列

问题描述

使用此代码,我将前几列写入 csv

$Hash = [ordered]@{}

foreach ($Property in $Properties) {
    $Hash[$Property] = (($New_Extracted_Data.$Property | Measure -Sum).Sum)/$NumberOfRowsToPick
}

[pscustomobject]$Hash | Export-Csv "C:\script\sum_$Server$Services.csv" -NoType -Force

返回此结果:

rx_AVERAGE  rx_MAX  rx_MIN  tx_AVERAGE  tx_MAX  tx_MIN  
20538.44384 73426.92533 1886.881034 6355.250931 20152.27358 1817.357994

之后,我使用此代码附加 3 列:

$csv = Import-Csv -Path "c:\script\sum_$Server$Services.csv"                 

foreach($row in $csv)
{                    
    $row | Add-Member -MemberType NoteProperty -Name "ServerName" -Value $Server -Force
    $row | Add-Member -MemberType NoteProperty -Name "Start Time" -Value $FirstTimeStamp -Force 
    $row | Add-Member -MemberType NoteProperty -Name "End Time" -Value $LastTimeStamp -Force
}

$csv | Export-Csv -Path "c:\script\sum_$Server$Services.csv" -NoType

这产生了最终结果:

rx_AVERAGE  rx_MAX  rx_MIN  tx_AVERAGE  tx_MAX  tx_MIN  ServerName  Start Time  End Time
20538.44384 73426.92533 1886.881034 6355.250931 20152.27358 1817.357994 devas1.devad.myworldpanel.com   1597044600  1599633000

最后添加新添加的列。

我需要在开头添加新添加的列,如下所示:

ServerName  Start Time  End Time rx_AVERAGE rx_MAX  rx_MIN  tx_AVERAGE  tx_MAX  tx_MIN
devas1.devad.myworldpanel.com   1597044600  1599633000 20538.44384  73426.92533 1886.881034 6355.250931 20152.27358 1817.357994

ServerName  Start Time  End Time rx_AVERAGE rx_MAX  rx_MIN  tx_AVERAGE  tx_MAX  tx_MIN
devas1.devad.myworldpanel.com   1597044600  1599633000 20538.44384  73426.92533 1886.881034 6355.250931 20152.27358 1817.357994 

请让我知道如何在开头而不是结尾添加它们?

标签: powershell

解决方案


在添加循环中计算的属性之前将属性放入$Hash字典中:

$Hash = [ordered]@{
    ServerName   = $Server
    "Start Time" = $FirstTimeStamp
    "End Time"   = $LastTimeStamp
}
foreach ($Property in $Properties) {
    $Hash[$Property] = (($New_Extracted_Data.$Property | Measure -Sum).Sum)/$NumberOfRowsToPick
}
[pscustomobject]$Hash

您还可以使用$Hash.Insert()在字典顶部挤压新条目:

$Hash = [ordered]@{}
foreach ($Property in $Properties) {
    $Hash[$Property] = (($New_Extracted_Data.$Property | Measure -Sum).Sum)/$NumberOfRowsToPick
}

$hash.Insert(0, 'ServerName', $Server)
$hash.Insert(1, 'Start Time', $FirstTimeStamp)
$hash.Insert(2, 'End Time', $LastTimeStamp)

[pscustomobject]$Hash

对于现有对象(即,如果这些步骤由单独的脚本完成),唯一的方法是创建一个新对象,您可以Select-Object使用方便:

$csv |Select-Object -Property @('ServerName';'Start Time';'End Time';$Properties)

推荐阅读