Объект сортировки Powershell по [DateTime] :: ParseExact - PullRequest
3 голосов
/ 28 апреля 2011

Я пытаюсь отсортировать строки, возвращаемые консольной программой по дате, используя 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)

Сообщение об ошибке:

"Объект сортировки: не найден позиционный параметр, который принимает аргумент 'System.Object []'."

Откуда берется дополнительная пустая строка? Я делаю что-то неправильно, чтобы разобрать даты или отсортировать их?

Ответы [ 2 ]

7 голосов
/ 28 апреля 2011

Я думаю, что часть проблемы находится в первой строке.

% {} означает foreach-object {}.

Я думаю, что вы имели в виду @ (,).Вам даже не нужен @ ().

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

работает нормально.
Для сортировки по «производному полю» используйте блок скриптов.

$sortedDates = $dates | Sort-Object {[System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null)}
0 голосов
/ 28 апреля 2011

Для справки, если у кого-то есть подобная проблема, вот мое полное решение (на основе принятого ответа)

Я сортирую вывод меток 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...