Сортировка версий PowerShell

В PowerShell, если у меня есть список строк, содержащих версии «3.0.1.1», «3.2.1.1» и т. д., как я могу отсортировать его так, как System.Version отсортирует его в C#?


person maxfridbe    schedule 02.04.2009    source источник


Ответы (4)


Просто преобразуйте его в версию и отсортируйте таким образом:

$list = "3.0.1.1","3.2.1.1" 
$sorted = $list | %{ new-object System.Version ($_) } | sort
person JaredPar    schedule 02.04.2009

Строка версии может быть приведена к объекту Version, а sort-object может быть передана в блок скрипта и отсортирована по результату.

PS C:\Users\me> "3.11.0.1", "3.0.1.1", "3.2.1.1" | sort
3.0.1.1
3.11.0.1
3.2.1.1

PS C:\Users\me> "3.11.0.1", "3.0.1.1", "3.2.1.1" | sort {[version] $_}
3.0.1.1
3.2.1.1
3.11.0.1

(Добавлена ​​дополнительная строка версии, чтобы сделать пример более осмысленным.)

person Nicolas Melay    schedule 19.06.2019

Просто чтобы добавить еще один угловой случай: powershell рассматривает эту однозначную версию версии «2» как недопустимую. Необходимо добавить «.0» в конец, чтобы создать объект версии перед сортировкой:

if($version  -match '^\d$')
{
  $version = $version + '.0'
}
New-Object System.Version $version
person Summer    schedule 04.11.2016

person    schedule
comment
Хотя этот код может дать ответ на вопрос, предоставление дополнительного контекста относительно того, как и почему он решает проблему, улучшит долгосрочную ценность ответа. - person Alexander; 10.05.2018
comment
Это работает очень хорошо! У меня нет надлежащих версий System.Versions, так как имена моих версий включают букву V перед номерами. Regex, похоже, не заботится об этом. Хороший! - person Master Azazel; 06.12.2018