В PowerShell, если у меня есть список строк, содержащих версии «3.0.1.1», «3.2.1.1» и т. д., как я могу отсортировать его так, как System.Version отсортирует его в C#?
Сортировка версий PowerShell
Ответы (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
Хотя этот код может дать ответ на вопрос, предоставление дополнительного контекста относительно того, как и почему он решает проблему, улучшит долгосрочную ценность ответа.
- person Alexander; 10.05.2018
Это работает очень хорошо! У меня нет надлежащих версий System.Versions, так как имена моих версий включают букву V перед номерами. Regex, похоже, не заботится об этом. Хороший!
- person Master Azazel; 06.12.2018