Как отфильтровать pscustomobject на основе нескольких столбцов - PullRequest
0 голосов
/ 22 марта 2019

У меня есть объект pscustomobject, из которого я хочу удалить элементы. Каждая запись содержит 3 значения, разделенные точкой с запятой. Первый - это код, второй - дата, а третий - описание. Я хотел бы создать новый объект pscustomobject, содержащий только самые последние (помеченные *), или отфильтровать все более старые записи из этого объекта. Любая помощь?

$allocationData = get-content $Global:costAllocationFile | sort

942200;20170701;Merk & Design
942200;20171106;Merk & Design
942200;20171207;Merk & Design *
942800;20170102;Formule Management
942800;20170327;Formule Management *
943120;20170102;Unit 4
943120;20170911;Unit 4 & retail
943120;20171207;Unit 4
943120;20180402;Unit 4
943120;20180703;Unit 4 *
943300;20170102;Inkoop
943300;20170130;Inkoop
943300;20170717;Inkoop *

edit: я забыл упомянуть, описания могут меняться со временем, объясняя мою мотивацию

1 Ответ

2 голосов
/ 22 марта 2019

Используйте Import-Csv вместо Get-Content

Import-Csv $Global:costAllocationFile -Delimiter ';' -Header Code,Date,Description 

И Group-Object code, чтобы затем отсортировать по дате внутри группы и просто выбрать последнюю

Import-Csv $Global:costAllocationFile -Delimiter ';' -Header Code,Date,Description |
  Group-Object Code | Foreach-Object {
    $_.Group  | Sort-Object Date | Select-Object -Last 1
  }

Пример вывода:

Code   Date     Description
----   ----     -----------
942200 20171207 Merk & Design *
942800 20170327 Formule Management *
943120 20180703 Unit 4 *
943300 20170717 Inkoop *
...