PowerShell ForEach-Object Only соответствует первому переданному значению

Я пишу сценарий PowerShell, который читает файл CSV в следующем формате:

      A,B,ProgrammeSeller,D,E,F,G,H,I,J,K,L,M,N,O,P,SellerCode,Date,Seller,Currency1,InvoiceAmmount,DiscountAmount,PurchasePrice,TotalsCurrency,TotalInvoiceAmmount,TotalDiscountAmmount,TotalPurchasePrice,Reviewed,AC,Signed
,,PROGRAMME,,,,,,,,,,,,,,380,09/12/2021,SELLER_BE,EUR,2813828.46,17594.22,2796234.24,EUR,0,0,0,Reviewed by:,,Signed:
,,PROGRAMME,,,,,,,,,,,,,,383,09/12/2021,SELLER_DE,EUR,3287812.58,17595.8,3270216.78,EUR,0,0,0,Reviewed by:,,Signed:
,,PROGRAMME,,,,,,,,,,,,,,383,09/12/2021,SELLER_DE,USD,1520725.4,11428.98,1509296.42,USD,0,0,0,Reviewed by:,,Signed:
,,PROGRAMME,,,,,,,,,,,,,,381,09/12/2021,SELLER_DK,DKK,6047281.25,26163.13,6021118.12,DKK,0,0,0,Reviewed by:,,Signed:
,,PROGRAMME,,,,,,,,,,,,,,381,09/12/2021,SELLER_DK,EUR,11376479.39,39580.28,11336899.11,EUR,0,0,0,Reviewed by:,,Signed:
,,PROGRAMME,,,,,,,,,,,,,,381,09/12/2021,SELLER_DK,USD,12571895.13,71198.51,12500696.62,USD,0,0,0,Reviewed by:,,Signed:

И я хочу сгруппировать и суммировать 3 столбца (InvoiceAmmount,DiscountAmount,PurchasePrice) и обновить столбцы (TotalInvoiceAmmount,TotalDiscountAmmount,TotalPurchasePrice) в новом файле, который является копией оригинала, но со столбцами (TotalInvoiceAmmount,TotalDiscountAmmount, TotalPurchasePrice) обновляется значениями сумм всякий раз, когда есть совпадение в значении валюты.

Я написал следующий скрипт:

      $csvFile = Import-Csv "C:\OutputFiles\OTC_Purchase_Report_EUProgramme_20220420_TMP.csv"
$csvFinal = "C:\OutputFiles\OTC_Purchase_Report_EUProgramme_20220420.csv"

function WriteTotalsToCSV
{
    $totals | ForEach-Object {
        $totalCurrency = $_.Currency
        $totalInvoiceAmmount = $_.TotalInvoiceAmmount
        $totalDiscountAmmount = $_.TotalDiscountAmmount
        $totalPurchasePrice = $_.TotalPurchasePrice
        $csvFile | ForEach-Object {

            if($_.Currency1 -eq $totalCurrency){
                $_.TotalsCurrency = $totalCurrency
                $_.TotalInvoiceAmmount = $totalInvoiceAmmount
                $_.TotalDiscountAmmount = $totalDiscountAmmount
                $_.TotalPurchasePrice = $totalPurchasePrice
            }
            $_ | Export-Csv $csvFinal -NoTypeInformation -Append 
        }


    }
}

function InvoiceAmmountTotals
{
    param ($file)

    $headers = ($file | Get-Member -MemberType NoteProperty).Name
    $totals = $file | Select-Object $headers | Group-Object Currency1



    foreach ($total in $totals)
    {

        $showtotal = New-Object System.Management.Automation.PsObject
        $showtotal | Add-Member NoteProperty Currency $total.Name
        $showtotal | Add-Member NoteProperty TotalInvoiceAmmount ($total.Group | Measure-Object -Sum InvoiceAmmount).Sum
        $showtotal | Add-Member NoteProperty TotalDiscountAmmount ($total.Group | Measure-Object -Sum DiscountAmount).Sum
        $showtotal | Add-Member NoteProperty TotalPurchasePrice ($total.Group | Measure-Object -Sum PurchasePrice).Sum
        $showtotal
    }
}


#execution
$totals = InvoiceAmmountTotals $csvFile
WriteTotalsToCSV

Сценарий группирует и суммирует итоги, как и ожидалось, но когда он записывает новый файл CSV, он должен обновить столбцы на основе совпадения столбца Currency1, но он делает это только для первого совпадения (в данном случае EUR) и игнорируя оставшиеся совпадения, т.е.:

      "A","B","ProgrammeSeller","D","E","F","G","H","I","J","K","L","M","N","O","P","SellerCode","Date","Seller","Currency1","InvoiceAmmount","DiscountAmount","PurchasePrice","TotalsCurrency","TotalInvoiceAmmount","TotalDiscountAmmount","TotalPurchasePrice","Reviewed","AC","Signed"
"","","PROGRAMME","","","","","","","","","","","","","","380","09/12/2021","SELLER_BE","EUR","2813828.46","17594.22","2796234.24","EUR","153995434.65","797318.07","153198116.58","Reviewed by:","","Signed:"
"","","PROGRAMME","","","","","","","","","","","","","","383","09/12/2021","SELLER_DE","EUR","3287812.58","17595.8","3270216.78","EUR","153995434.65","797318.07","153198116.58","Reviewed by:","","Signed:"
"","","PROGRAMME","","","","","","","","","","","","","","383","09/12/2021","SELLER_DE","USD","1520725.4","11428.98","1509296.42","USD","0","0","0","Reviewed by:","","Signed:"
"","","PROGRAMME","","","","","","","","","","","","","","381","09/12/2021","SELLER_DK","DKK","6047281.25","26163.13","6021118.12","DKK","0","0","0","Reviewed by:","","Signed:"
"","","PROGRAMME","","","","","","","","","","","","","","381","09/12/2021","SELLER_DK","EUR","11376479.39","39580.28","11336899.11","EUR","153995434.65","797318.07","153198116.58","Reviewed by:","","Signed:"
"","","PROGRAMME","","","","","","","","","","","","","","381","09/12/2021","SELLER_DK","USD","12571895.13","71198.51","12500696.62","USD","0","0","0","Reviewed by:","","Signed:"

Обратите внимание, что когда значением столбца Currency1 является доллар США, столбцы (TotalInvoiceAmmount, TotalDiscountAmmount, TotalPurchasePrice) не обновляются.

Любые предложения о том, где я ошибаюсь здесь?

Примечание. Файлы CSV намного больше, я добавил небольшое количество записей для примера.

Спасибо

0 ответов

Другие вопросы по тегам