使用powershell在现有CSV中添加列CSV

使用powershell在现有CSV中添加列CSV,powershell,shell,powershell-3.0,veeam,Powershell,Shell,Powershell 3.0,Veeam,我有一个Powershell脚本,它收集备份的大小,并将其导出到CSV,我想知道是否有可能将其添加到下一个CSV列或excel 我一直在看文档,因为我认为它在excel上看起来更好,但我不能再添加一列,我始终相信它是从头开始的 $today = (get-date).Date $backup = Get-VBRBackup | where {$_.info.jobname -eq "A. ProduccionInterna.Infraestructura Backup Copy"} if ($b

我有一个Powershell脚本,它收集备份的大小,并将其导出到CSV,我想知道是否有可能将其添加到下一个CSV列或excel

我一直在看文档,因为我认为它在excel上看起来更好,但我不能再添加一列,我始终相信它是从头开始的

$today = (get-date).Date
$backup = Get-VBRBackup | where {$_.info.jobname -eq "A. ProduccionInterna.Infraestructura Backup Copy"}
if ($backup) {
$backup.GetAllStorages() | where {$_.CreationTime.Date -eq $today} | select {$_.PartialPath}, {$_.Stats.BackupSize/1GB} |
export-csv -Path C:\Users\acepero\Documents\test.csv -NoTypeInformation -Delimiter ';'
}
更新 我已经创建了一次新列,但出现了一个错误:

Select-Object : The property cannot be processed because the property "{$_.PartialPath}, {$_.Stats.BackupSize/1GB} , {$Session.BackupStats.DedupRatio} , 
{$Session.BackupStats.CompressRatio}" already exists.
代码现在有了这个表单

$today = (get-date).Date
$backup = Get-VBRBackup | where {$_.info.jobname -eq "A. ProduccionInterna.Infraestructura Backup Copy"}
if ($backup) {
$backup.GetAllStorages() | where {$_.CreationTime.Date -eq $today} | select {$_.PartialPath}, {$_.Stats.BackupSize/1GB} , {$Session.BackupStats.DedupRatio} , {$Session.BackupStats.CompressRatio} 
(Import-Csv "C:\Users\acepero\Documents\test.csv") |
    Select-Object *, {{$_.PartialPath}, {$_.Stats.BackupSize/1GB} , {$Session.BackupStats.DedupRatio} , {$Session.BackupStats.CompressRatio}} |
Export-csv -Path C:\Users\acepero\Documents\test.csv -NoTypeInformation #-Delimiter ';' 
}

从命令获取输出并通过“选择”传递时,您正在创建一个输出对象,该对象将选定值作为特性。下面是一个使用
getchilditem
命令的示例:

$result = Get-ChildItem C:\Temp | select Name, Length
$result数组包含具有“Length”和“Name”属性的对象。当通过管道将该对象导出CSV时,它会为该对象具有的每个属性/注释属性创建一列。为了“向CSV添加列”,只需向对象添加NoteProperty。您可以使用
addmember
cmdlet执行此操作,如下所示:

$result | Add-Member -MemberType NoteProperty -Name 'ColumnName' -Value 'ColumnValue'
小心你怎么做。如果$result是单个对象,此命令将向该对象添加NoteProperty/值对。如果$result是一个对象数组,它将把NoteProperty/值对添加到数组中的所有对象中。如果需要为每个对象指定不同的值,则需要遍历数组:

ForEach ($res in $result)
{
    $thisvalue = '' #Assign specific value here
    $res | Add-Member -MemberType NoteProperty -Name 'ColumnName' -Value $thisvalue
}

我希望这对你有帮助。如果是,请不要忘记接受答案。

首先,不要将所有计算属性“分组”在
{}
中。此外,如果不命名这些属性,您将得到列名称,如
$Session.BackupStats.DedupRatio
。尝试创建计算属性,方法是为它们指定一个名称,如使用
@{name='PartialPath';Expression={$\uu.PartialPath}}
。此外,我不明白为什么需要导入Csv。您是否尝试使用
Get-VBRBackup
cmdlet中的数据更新csv文件或写出一个全新的csv文件?如果您需要更新,请编辑您的问题并添加原始文件的一些行,并向我们显示所需的新文件的外观。您的
选择对象的语法错误。我不理解*选择所有属性,然后选择一个包含4个额外脚本块的脚本块。在不迭代任何内容的情况下,您也在使用
$\uu
快捷方式。您的
选择对象
应该只需要所需的参数,而不需要*、不需要脚本块和
$\uu