Powershell-按EndDate的历元方法筛选器

Powershell-按EndDate的历元方法筛选器,powershell,filter,epoch,Powershell,Filter,Epoch,我已经在这个网站上问了一个问题,只想找到最新的保修结束日期,我还想使用一个带有:Servicetag | EndDate的表,并将保修结束日期与历元转换为最新的日期。 更准确地说: 第一步:一列带有序列号,另一列包含保修结束日期(在表格中)。 第二步:一列带有序列号,另一列带有保修期结束日期,这要归功于Epoch。 第三,提取具有最高保修结束日期(历元编号)的序列号。 第四步:将一列格式化为序列号,另一列格式化为最高保修结束日期,并将其导出到另一个CSV文件中。 在我的CSV中,我有以下内容:

我已经在这个网站上问了一个问题,只想找到最新的保修结束日期,我还想使用一个带有:Servicetag | EndDate的表,并将保修结束日期与历元转换为最新的日期。 更准确地说:
第一步:一列带有序列号,另一列包含保修结束日期(在表格中)。 第二步:一列带有序列号,另一列带有保修期结束日期,这要归功于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 "

谢谢您的帮助。

这是一个简单的方法:

$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
仅选择每个组的最后一个元素。然后,您可以使用
选择对象-跳过1

删除标题这是我的版本。[grin]第一部分假装在CSV文件中读取。准备好使用真实数据时,请使用
Import Csv
cmdlet。这些评论似乎涵盖了正在发生的事情。请要求澄清,如果我不清楚

#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 "

感谢Drake pereraneat的布局!我唯一想改变的就是。。。[1] 测试
[datetime]
调用,确保它可以使用
dd/MM/yyyy
作为区域设置格式。我不得不应付欧盟/美国/军事时间,当我得到一个而期待另一个时,我发现了许多小故障。[2] 将那长长的第1行包装起来,这样就可以在没有侧边滚动的情况下阅读。[3] 在尝试解析示例日期之前,我可能会删除其中的尾随空格。感谢您的回复和研究。我在导出.csv时有一个问题,我们可以删除.csv中的“servicetag”标签吗?目标是在你的头脑中只有序列号而不是服务标签。你知道怎么做吗?@Smarty13更新!李戴利,首先感谢你的回复。我首先测试了你的版本,它工作得很好,但正如你在现实生活中所说,我不得不说:使用导入Csv。仅I标记:$Instuff=导入csv C:\。csv,但它不起作用。你能告诉我为什么吗?非常感谢。(我在评论region>>数据中的假读数)@Smarty13-您应该能够[A]注释掉或删除
\region/\endregion
内容,然后[B]添加
$InStuff=Import Csv c:\Full\Path\to\Your\FIle.Csv
,它应该可以工作。//如果没有,那么您看到了哪些错误?在您的情况下,“不工作”是什么意思?我在导出.csv时有一个问题,我们可以删除.csv中的“servicetag”标签吗?目标是在你的头脑中只有序列号而不是服务标签。你知道怎么做吗?@Smarty13-不客气![grin]////重新排列对象中属性的常用方法是使用
选择对象
为您提供所需的道具,或者使用
[PSCustomObject]
以稍微整洁、稍快的结构执行相同的操作。