Powershell - метод фильтра EPOCH по EndDate - PullRequest
0 голосов
/ 05 февраля 2020

Я уже задавал вопрос на этом сайте, чтобы найти только самую последнюю дату окончания гарантии, я также хотел бы использовать таблицу с: Servicetag | EndDate и преобразовать даты окончания гарантии с Epoch, чтобы получить самую последнюю дату. Точнее:
Первый шаг: столбец с серийными номерами и другой столбец с датой окончания гарантии (в таблице). Второй шаг: столбец с серийными номерами и еще один с датой окончания гарантии, преобразованной благодаря Epoch. В-третьих, извлеките серийный номер с наивысшей датой окончания гарантии (номер эпохи). Четвертый шаг: отформатируйте один столбец с серийным номером, а другой столбец с самой высокой датой окончания гарантии и экспортируйте его в другой файл CSV. В моем CSV у меня есть это:

"Service Tag", "Start Date", "End Date"... 
"57D2D85", "12/11/2015 01:00:00 ", "12/12/2016 12:59:59 "  
"57D2D85", "12/11/2015 01:00:00 ", "12/12/2019 12:59:59 " 
"57D2D85", "12/11/2015 01:00:00 ", "12/12/2017 12:59:59 " 
"4ZRMD85", "01/12/2016 01:00:00 ", "01/13/2017 12:59:59 "
"4ZRMD85", "01/12/2016 01:00:00 ", "01/13/2018 12:59:59 "
"4ZRMD85", "01/12/2016 01:00:00 ", "01/13/2020 12:59:59 " 

Я хотел бы получить в результате:

"57D2D85", "12/11/2015 01:00:00 ", "12/12/2019 12:59:59 " 
"4ZRMD85", "01/12/2016 01:00:00 ", "01/13/2020 12:59:59 "

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

вот моя версия. [ ухмылка ] 1-й раздел подделывает чтение в CSV-файле. используйте командлет Import-Csv, когда будете готовы использовать реальные данные. комментарии, кажется, охватывают то, что происходит. пожалуйста, попросите разъяснений, если я не был уверен enuf ...

#region >>> fake reading in the data
#    in real life, use Import-CSV
$InStuff = @'
"Service Tag", "Start Date", "End Date"
"57D2D85", "12/11/2015 01:00:00 ", "12/12/2016 12:59:59 "
"57D2D85", "12/11/2015 01:00:00 ", "12/12/2019 12:59:59 "
"57D2D85", "12/11/2015 01:00:00 ", "12/12/2017 12:59:59 "
"4ZRMD85", "01/12/2016 01:00:00 ", "01/13/2017 12:59:59 "
"4ZRMD85", "01/12/2016 01:00:00 ", "01/13/2018 12:59:59 "
"4ZRMD85", "01/12/2016 01:00:00 ", "01/13/2020 12:59:59 "
'@ | ConvertFrom-Csv
#endregion >>> fake reading in the data

$Results = $InStuff |
    # sort by the "End Date" property
    #    this would be MUCH more direct without the trailing spaces in the data
    #    it would also be simpler without the silly embedded spaces in the column/property names
    Sort-Object {[datetime]::ParseExact($_.'End Date'.Trim(), 'MM/dd/yyyy HH:mm:ss', $Null)} |
    Group-Object -Property 'Service Tag' |
    ForEach-Object {
        # this grabs the last item in each group
        #    combined with the earlier "Sort-Object" it gives the newest item for each "Service Tag"
        $_.Group[-1]
        }

# on screen
$Results

# send to CSV    
$Results |
    Export-Csv -LiteralPath "$env:TEMP\Smarty13_ExpirationDateReport.csv" -NoTypeInformation

на экране ...

Service Tag Start Date           End Date            
----------- ----------           --------            
57D2D85     12/11/2015 01:00:00  12/12/2019 12:59:59 
4ZRMD85     01/12/2016 01:00:00  01/13/2020 12:59:59

csv-файл ...

"Service Tag","Start Date","End Date"
"57D2D85","12/11/2015 01:00:00 ","12/12/2019 12:59:59 "
"4ZRMD85","01/12/2016 01:00:00 ","01/13/2020 12:59:59 "
0 голосов
/ 05 февраля 2020

Это простой способ сделать это:

$CleanedWarranties = Import-Csv .\warranty.csv | Sort-Object -Property @{Expression={[DateTime]$_."End Date"}; Ascending = $True} | Group-Object -Property "Service Tag" | foreach {($_).Group[-1]}
$CleanedWarranties | Export-Csv -Path cleanedwarranties.csv -NoTypeInformation
(Get-Content .\cleanedwarranties.csv | Select-Object -Skip 1) | Out-File .\headerlesswarranties.csv -Encoding ASCII

Импортирует данные, сортирует их по свойству «Дата окончания», помещает их в группы на основе «Сервисного тега» и затем использует foreach, чтобы выбрать только последний элемент каждой группы. Тогда вы можете избавиться от заголовка, используя Select-Object -Skip 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...