【问题标题】:How to parse a csv file with powershell for specfic results如何使用 powershell 解析 csv 文件以获得特定结果
【发布时间】:2012-08-20 15:55:09
【问题描述】:

我有一个包含用户登录数据的 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 数据并按用户名和时间戳对其进行排序:

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

但我现在陷入了如何过滤最后一次登录的问题。有没有一种简单的方法可以用 PowerShell 做到这一点,还是我采取了错误的方法?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    Group-Object 是你的朋友。首先按时间戳排序,然后分组。它将在捕获的组中保持排序顺序,因此您只需读取第一项即可。

    $data = "\\SomePath\LastLogon.csv"
    Import-Csv $data | sort {[DateTime]$_.TimeStamp} -Desc | group UserName |%{ $_.Group[0] }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 2021-06-22
      • 1970-01-01
      • 2014-11-19
      相关资源
      最近更新 更多