1
$csv1 = Import-Csv csv1.csv
$csv2 = Import-Csv csv2.csv
$merged = Merge-Csv -InputObject $csv1,$csv2 -ID "Invoice Number"
$merged | Select "Invoice Date","Invoice Number", @{name="CSV1InvStat";Expression={$_."CSV1 Invoice Status" -Replace "Open", "Unpaid" -Replace "Closed","Paid"}}, "CSV2 Invoice Status", "Customer", "Invoice Amount", "Paid Amount", @{Name=Diff;Expression={ $_."Invoice Amount" - $_."Paid Amount" }} | Sort "Invoice Number" | Export-Csv -encoding utf8 merged.csv

Результат, который я получаю, выглядит так:

Invoice Date     Invoice Number     CSV1InvStat     CSV2 Invoice Status   CSV1Amount  ...
4/1/2016         INVPQ-0001         Paid            Unpaid                3,000.00
6/30/2016        HKXLY43901         Paid            Paid                  500

Что я хочу сделать, это сравнить поле "CSV1InvStat" с "Состояние счета CSV2" после выполнения замены:

$csv1 = Import-Csv csv1.csv
$csv2 = Import-Csv csv2.csv
$merged = Merge-Csv -InputObject $csv1,$csv2 -ID "Invoice Number"
$merged | Select "Invoice Date","Invoice Number", @{name="CSV1InvStat";Expression={$_."CSV1 Invoice Status" -Replace "Open", "Unpaid" -Replace "Closed","Paid"}}, "CSV2 Invoice Status",@{Name=StatusDiff;Expression={IF($_."CSV1InvStat" -eq $_."CSV2 Invoice Status") {0} Else {1}}}, "Customer", "Invoice Amount", "Paid Amount", @{Name=Diff;Expression={ $_."Invoice Amount" - $_."Paid Amount" }} | Sort "Invoice Number" | Export-Csv -encoding utf8 merged.csv

Проблема с:

@{Name="StatusDiff";Expression={IF($_."CSV1InvStat" -eq $_."CSV2 Invoice Status") {0} Else {1}}}

Я подумал, что в merged.csv появится столбец после статусов с 1, если статус другой, и с 0, если они одинаковые. Это, похоже, не работает, я просто получаю 0, независимо от того, совпадают они или нет. Я думаю, что это потому, что CSV1InvStat технически не существует в данных.

Есть ли способ сделать это, или мне просто лучше, чтобы пользователи запоминали формулу Excel (= IF (C2 = D2,0,1)) и делали это вручную?

0