Добавить столбец CSV в существующий CSV с PowerShell - PullRequest
1 голос
/ 18 февраля 2020

У меня есть скрипт 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 ';' 
}

1 Ответ

1 голос
/ 18 февраля 2020

Когда вы берете выходные данные из команды и передаете их через select, вы создаете выходной объект, который имеет выбранные значения в качестве свойств. Вот пример использования команды Get-ChildItem:

$result = Get-ChildItem C:\Temp | select Name, Length

Массив $ result содержит объекты, которые имеют свойства NoteProperties «Длина» и «Имя». Когда вы передаете этот объект в Export-CSV, он создает один столбец для каждого свойства / свойства свойства объекта. Чтобы «добавить столбец в CSV», все, что вам нужно сделать, это добавить NoteProperty к объекту. Это можно сделать с помощью командлета Add-Member, например:

$result | Add-Member -MemberType NoteProperty -Name 'ColumnName' -Value 'ColumnValue'

Будьте осторожны с этим. Если $ result является единственным объектом, эта команда добавит к этому объекту пару NoteProperty / Value. Если $ result является массивом объектов, он добавит эту пару NoteProperty / Value ко всем объектам, хранящимся в массиве. Если вам нужно присвоить разные значения каждому объекту, вам нужно будет выполнить итерацию по массиву:

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

Надеюсь, это вам поможет. Если да, пожалуйста, не забудьте принять ответ.

...