Powershell 将数据附加到包含数据的现有csv文件
以下是我的csv中已有的数据Powershell 将数据附加到包含数据的现有csv文件,powershell,Powershell,以下是我的csv中已有的数据 ServerName Start Time End Time localhost 1599222660 1599222660 现在我有以下数据需要添加到现有数据中 pl_AVERAGE pl_MAX pl_MIN rta_AVERAGE rta_MAX rta_MIN 0 0 0 0.044726667 0.044726667 0.044726667 我像下面那样试过,但出现了错误 Expor
ServerName Start Time End Time
localhost 1599222660 1599222660
现在我有以下数据需要添加到现有数据中
pl_AVERAGE pl_MAX pl_MIN rta_AVERAGE rta_MAX rta_MIN
0 0 0 0.044726667 0.044726667 0.044726667
我像下面那样试过,但出现了错误
Export-Csv "C:\Script\sum.csv" -NoType -Append
我尝试添加-force,但它没有向csv写入任何内容
下面是代码
$csvContents = @()
$row = New-Object System.Object
$row | Add-Member -MemberType NoteProperty -Name "ServerName" -Value $Server
$row | Add-Member -MemberType NoteProperty -Name "Start Time" -Value $FirstTimeStamp
$row | Add-Member -MemberType NoteProperty -Name "End Time" -Value $FirstTimeStamp
$csvContents += $row
#writing first 3 columns
$csvContents | Export-CSV -Path "C:\Script\sum.csv" -NoTypeInformation -Append
$New_Extracted_Data | Export-Csv "C:\Script\Final.csv" -NoType
$New_Extracted_Data | Select-Object -Property * -ExcludeProperty timestamp |
Export-Csv "C:\Script\Final.csv" -NoType
$Properties = ($New_Extracted_Data[0] | Get-Member -MemberType NoteProperty |
Where Name -ne 'timestamp').Name
$Hash = [ordered]@{}
foreach ($Property in $Properties) {
$Hash[$Property] = (($New_Extracted_Data.$Property | Measure -Sum).Sum)/$NumberOfRowsToPick
}
#2nd time writing
[pscustomobject]$Hash | Export-Csv "C:\Script\sum.csv" -NoType -Append
如果要向每行添加属性,可以使用
foreach
循环迭代数据行并添加成员:
$csv = Import-Csv -Path 'c:\script\sum.csv'
foreach ($row in $csv) {
$row | Add-Member -MemberType NoteProperty -Name "ServerName" -Value $Server
$row | Add-Member -MemberType NoteProperty -Name "Start Time" -Value $FirstTimeStamp
$row | Add-Member -MemberType NoteProperty -Name "End Time" -Value $FirstTimeStamp
}
$csv | Export-Csv -Path 'c:\script\sum.csv' -NoType
由于$row
是对$csv
集合中项目的引用,因此对$row
所做的任何更改都将自动反映在$csv
中
如果您希望每行添加的属性值不同,则需要在循环中添加逻辑来完成此操作。另一种情况是,如果使用Select Object
来添加属性,则不需要循环,这可能类似于:
Import-Csv -Path 'c:\script\sum.csv' |
Select-Object *,
@{ Name = 'ServerName'; Expression = { $Server } }
@{ Name = 'Start Time"'; Expression = { $FirstTimeStamp } }
@{ Name = 'End Time'; Expression = { $FirstTimeStamp } } |
Export-Csv -Path 'c:\script\sum.csv' -NoTypeInformation
就我个人而言,我很少使用addmember
来做这类事情。我所知道的唯一优点是保留了一些类型数据,但是,在本例中,您已经在处理PSCustomObjects
另外,我认为初始问题的一个重要部分是使用-Append
参数。它本质上意味着附加新记录,而不是附加到现有记录。如果您在这里查看这两种解决方案,我们将覆盖或创建一个新的CSV文件
关键是在导出新的CSV文件之前将对象完整地保存起来。我尝试在多个服务器的情况下使用foreach循环和append,但它没有附加值。如果您有一个具有一组属性的单个对象(与对象数组相反),则可以使用
addmember
向该对象添加属性。在多个服务器的情况下,如何知道哪个服务器与其他数据一起使用?
Import-Csv -Path 'c:\script\sum.csv' |
Select-Object *,
@{ Name = 'ServerName'; Expression = { $Server } }
@{ Name = 'Start Time"'; Expression = { $FirstTimeStamp } }
@{ Name = 'End Time'; Expression = { $FirstTimeStamp } } |
Export-Csv -Path 'c:\script\sum.csv' -NoTypeInformation