Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 将数据附加到包含数据的现有csv文件_Powershell - Fatal编程技术网

Powershell 将数据附加到包含数据的现有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

以下是我的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
我像下面那样试过,但出现了错误

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