我正在尝试使用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 []'的位置参数。”
多余的空白行是从哪里来的?我在解析日期或对它们进行排序时做错了吗?
答案 0 :(得分:7)
我认为部分问题出在第一行。
%{}表示foreach-object {}。
我认为你的意思是@(,)。你甚至不需要@()。
$dates= "10/24/2010", "02/03/2010"
工作正常 要按“派生字段”排序,请使用脚本块。
$sortedDates = $dates | Sort-Object {[System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null)}
答案 1 :(得分:0)
作为参考,如果有人有类似的问题,这是我的完整解决方案(基于接受的答案)
我按日期排序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