0

ユーザーのログオンデータを含むCSVファイルがあり、PowerShellを使用してデータを解析し、各ユーザーの最後のログオンを見つけたいと考えています。

データの形式は次のとおりです。

TimeStamp                  UserName                           
---------                  --------                           
10/14/2011 12:53:12 PM     Smith                      
10/14/2011 12:54:07 PM     Jones                      
10/14/2011 12:59:45 PM     Green                      
10/14/2011 1:10:43 PM      Brown                      
8/20/2012 6:20:11 PM       Jones                     
8/20/2012 6:20:36 PM       Brown                     
8/20/2012 6:33:04 PM       Smith                      
8/20/2012 6:35:45 PM       Brown                  
8/20/2012 6:45:05 PM       Jones                  
8/20/2012 6:45:45 PM       Smith 

必要な出力は次のとおりです。

UserName                   TimeStamp                          
--------                   ---------                           
Brown                      8/20/2012 6:45:45 PM
Green                      10/14/2011 12:59:45 PM
Jones                      8/20/2012 6:45:05 PM
Smith                      8/20/2012 6:45:45 PM

行ごと、ネストされたループ、ソリューションでこれを行うことはできますが、PowerShellでアプローチするには不十分な方法のようです。

csvデータを読み込んで、UserNameとTimeStampで並べ替えることができます。

$data = "\\SomePath\LastLogon.csv"
$list = Import-Csv $data |Sort @{expression="UserName";Ascending=$true},@{expression="TimeStamp";Descending=$true}
$list

しかし、私は今、最後のログオンだけをフィルタリングする方法に固執しています。PowerShellを使用してこれを行う簡単な方法はありますか、それとも間違ったアプローチを取っていますか?

4

1 に答える 1

2

Group-Objectあなたの友だちです。最初にTimeStampで並べ替え、次にグループ化します。キャプチャされたグループ内でソート順が維持されるため、最初のアイテムを読み取ることができます。

$data = "\\SomePath\LastLogon.csv"
Import-Csv $data | sort {[DateTime]$_.TimeStamp} -Desc | group UserName |%{ $_.Group[0] }
于 2012-08-20T16:52:44.333 に答える