Execute Math entre dois arquivos CSV e imprima como novo arquivo CSV (ou imprima a maior diferença)

1

Eu tenho dois arquivos CSV com o FileCount e o Foldersize das mesmas pastas, tiradas em momentos diferentes. (Mesmos cabeçalhos, mesmas linhas e colunas. A única diferença entre esses dois arquivos são os valores de tamanho de filas e pastas)

Preciso comparar os dois e informar sobre as subpastas com a maior alteração no número de membros e a maior alteração no tamanho de pastas.

extrato de CSV abaixo.

CSV1

Directory         FileCount   FolderSize
D:\test\Documents   61         18.75
D:\test\Media       61         67,488.43
D:\test\Photos      53         7.88

CSV2

Directory         FileCount   FolderSize
D:\test\Documents   61        18.75
D:\test\Media       59        62,192.40
D:\test\Photos      32        6.51

Até agora eu tenho o abaixo, mas ele está produzindo uma cópia exata do CSV1, sem fazer as alterações que eu tenho no loop. O que estou fazendo errado?

#Importing CSV files
$CSV1 = Import-Csv -Path D:\test\folderstat1.csv
$CSV2 = Import-Csv -Path D:\test\folderstat2.csv

#Setting counts for do loop
$end     = $csv1.Count
$count   = 0

#Set $csv1 Filecount and foldersize to the difference between the row in CSV1 #and CSV2
do{
$csv1.filecount[$count] = $csv1.filecount[$count] - $csv2.filecount[$count]
$csv1.FolderSize[$count] = $csv1.FolderSize[$count] - $csv2.FolderSize[$count]
    $count++
}until($count -eq $end)

$CSV1 | export-csv D:\test\out.csv -NoTypeInformation
    
por Jonsonfrank 01.06.2018 / 06:20

1 resposta

0

Você está colocando o índice incorretamente. Experimente:

$csv1[$count].filecount -= $csv2[$count].filecount
$csv1[$count].FolderSize-= $csv2[$count].FolderSize

Ou crie um novo CSV3

## Q:\Test18\SU_1327671.ps1
#Importing CSV files
$CSV1 = Import-Csv -Path "D:\test\folderstat1.csv"
$CSV2 = Import-Csv -Path "D:\test\folderstat2.csv"
#Setting counts for do loop
$end     = $csv1.Count
$count   = 0

#Set $CSV3 Filecount and foldersize to the difference between the row in CSV1 #and CSV2

$CSV3 = do{
    [PSCustomObject]@{
        Directory =  $csv1[$count].Directory
        Filecount = ($csv1[$count].filecount  - $csv2[$count].filecount)
        FolderSize= ($csv1[$count].FolderSize - $csv2[$count].FolderSize)
    }
    $count++
} until($count -eq $end)
$CSV3 | Export-Csv "D:\test\out.csv" -NoTypeInformation

"=" * 50

$CSV3 | Sort {[Math]::Abs($_.FolderSize)} -Desc | Select -First 1|
    ForEach{"Largest (absolute) change {0} in {1}" -f $_.FolderSize,$_.Directory}

Exemplo de saída:

> . .\SU_1327671.ps1
==================================================
Largest (absolute) change 5296 in D:\test\Media
> import-csv .\out.csv

Directory         Filecount FolderSize
---------         --------- ----------
D:\test\Documents 0         0
D:\test\Media     2         5296
D:\test\Photos    21        1,37
    
por 01.06.2018 / 07:13