Powershell Sort-Object by [DateTime]::ParseExact



我正在尝试使用PowerShell按日期对控制台程序返回的行进行排序。

日期以MM/dd/yyyy格式格式化,因此必须将它们转换为DateTime对象,以便以可排序的格式。

解析日期,我使用:

$dates = %{ "10/24/2010", "02/03/2010" }
$dates | %{ [System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null) }

将日期解析为System。DateTime对象,并显示其默认的ToString()表示,但它也在开始处显示一个额外的空行。

现在,如果我尝试用sort - object对日期进行排序,我得到一条错误消息,我猜错误来自额外的空行:

$sortedDates = $dates | Sort-Object [System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null)

错误信息:

"Sort-Object:无法找到接受参数'System.Object[]'的位置参数。"

额外的空行是从哪里来的?我在解析日期或对它们进行排序时是否做错了什么?

我认为部分问题在第一行。

%{}表示foreach-object{}。

我想你的意思是@(,)。你甚至不需要@()。

$dates= "10/24/2010", "02/03/2010"  

工作好。要按"派生字段"排序,请使用scriptblock。

$sortedDates = $dates | Sort-Object {[System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null)}

供参考,如果有人有类似的问题,这里是我的完整解决方案(基于公认的答案)

我按日期排序tf.exe标签(TFS命令行)的输出,然后获得最新的标签:

$lines = tf labels | Select-Object -skip 2 # Skip the header lines
$sortedLines = $lines | Sort-Object { [DateTime]::ParseExact(($_ -split 's+')[2],"M/d/yyyy",$null) }
$labels = $sortedLines | %{ ($_ -split 's+')[0] } # get the first column
$latestLabel = $labels[-1] # Last item in the list

最新更新