[英]Powershell: Comparing multiple values in an array
我在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
有點復雜...我真的無法將其分解。 有什么幫助嗎? 甚至關於如何開始編寫腳本的想法...我在這里碰壁。
-更新-
謝謝雷納特。 所以我發現我的來源清單顯然要復雜一些。 它缺少列表中的一些計算機名稱...此外,它還缺少一些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
我將嘗試使用您的代碼示例,看看我如何做。 我真的很煩這個源列表,因為我發現某些條目缺少所有東西……啊。
您可以按計算機名分組,然后為每個組按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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.