我对Powershell有另一个棘手的问题。我有一个约4000个条目的列表,其中我有以下详细信息:
<Computername> | <Username> | <StartDate> | <LastDate> | <IDNum>
computer1 | jsmith | 4/12/12 | 4/12/13 | 52648
computer1 | jsmith | 4/12/12 | - | 52649
computer1 | jsmith | 4/12/12 | 8/7/13 | 52644
computer2 | hreid | 2/5/12 | 8/5/13 | 52396
computer2 | hreid | 4/10/12 | 5/18/13 | 52300
computer3 | mdrake | 2/10/11 | 12/18/12 | 52590
computer3 | mdrake | 5/10/11 | 3/20/12 | 52593
它是一个CSV,我试图找到一种方法来比较Computername和LastDate字段,并吐出最近一行的列表以及相关的computername值。我能够将CSV读入变量,但是我对get-member值和每个循环都有一段时间。
理想情况下,输出看起来像这样:
<Computername> | <Username> | <StartDate> | <LastDate> | <IDNum>
computer1 | jsmith | 4/12/12 | 8/7/13 | 52644
computer2 | hreid | 2/5/12 | 8/5/13 | 52396
computer3 | mdrake | 5/10/11 | 3/20/12 | 52593
有点复杂......我真的无法在脑海中打破这种局面。有帮助吗?甚至关于我如何开始编写脚本的想法......我在这里打了一堵墙。
- 更新 -
谢谢Rynant。所以我发现显然我的源列表有点复杂。它缺少列表中的一些计算机名称...此外它还缺少一些lastdate条目。所以我需要改变原始列表看起来更像这样:
<Computername> | <Username> | <StartDate> | <LastDate> | <IDNum>
computer1 | jsmith | 4/12/12 | 4/12/13 | 52648
computer1 | jsmith | 4/12/12 | - | 52649
computer1 | jsmith | 4/12/12 | 8/7/13 | 52644
computer2 | hreid | 2/5/12 | 8/5/13 | 52396
computer2 | hreid | 4/10/12 | 5/18/13 | 52300
computer3 | mdrake | 2/10/11 | 12/18/12 | 52590
computer3 | mdrake | 5/10/11 | 3/20/12 | 52593
| fmann | 4/11/12 | 3/20/13 | 52342
我会尝试使用您的代码示例,看看我是怎么做的。我对这个来源列表感到非常恼火,因为我发现某些条目缺少各种各样的东西......唉。
答案 0 :(得分:5)
您可以按Computername分组,然后按每个组分组,按LastDate排序并选择最后一项。
您必须进行调整以满足您的格式需求,但它看起来像这样。
Import-Csv -Path .\computers.csv|
group -Property Computername|
foreach {
$_.group|
sort { try { [datetime]$_.LastDate } catch {} }|
select -last 1
}|
Export-Csv -Path .\computers_LastDate.csv -NoTypeInformation