PowerShell — сортировка, сверху

#powershell #sort-object

#powershell #сортировка-объект

Вопрос:

Могу я попросить о помощи,

У меня есть дата — «имя компа» и «Дата», например, в размере $

 |"Comp Name"| "Date" | |:----------|----------:| |computer1 | 2021-12-02| |Computer2 | 2021-10-02| |computer3 | 2021-08-02| |computer1 | 2021-11-02| |computer2 | 2021-12-02|  |computer3 | 2021-12-02|  |computer1 | 2021-10-02| |computer4 | 2021-09-23|  |computer2 | 2021-09-02| |computer3 | 2021-12-02|  |computer4 | 2021-12-07|  

Теперь я хочу отсортировать его по дате и указать 1 -е место, что означает, что он ожидает результата.

 |"Comp Name"| "Date" | |:----------|----------:|  |computer1 |2021-12-02 |  |computer2 |2021-12-02 | |computer3 |2021-12-02 |  |computer4 |2021-12-07 |  

И я использовал:

 $list | Sort-Object -Property Date -Descending | Select-Object -First 1  

но я получаю только это, computer1 2021-12-02, как правильно ввести его

Комментарии:

1. Является ли источник данных файлом csv?

Ответ №1:

Похоже, вы хотите сгруппироваться по имени компании, а затем выбрать максимальную дату для каждой группы?

 $list | Group-Object -Property 'Comp Name' | ForEach-Object { $_.Group | Sort-Object Date -Descending | Select-Object -First 1 }  

*Старый (на основе первоначального требования): Один из способов-получить максимальное значение, затем снова выполнить итерацию по списку, выполнив фильтрацию с помощью командлета Where-Object:

 $max = $list | Sort-Object -Property Date -Descending | Select-Object -First 1  $list | Where-Object { $_.Date -eq $max.Date } | Sort-Object -Property 'Comp Name' | Get-Unique -AsString  

Комментарии:

1. единственная проблема будет заключаться в том, что максимальные даты для разных компьютеров будут разными. например, у Computer4 максимальная дата 2021-12-04

2. Вы хотите сказать, что хотите получить максимальную дату для каждой группы (максимальную дату для каждого компьютера)?

3. Обновленный ответ с новым пониманием намерения.

4. Ты молодец, это прекрасно работает !