У меня есть скрипт, который содержит массив буквенно-цифровых строк, таких как VER11.10.00.000
, VER11.10.01.123
и VER9.09.02.050
.
Я сортирую этот массив следующим образом
[string[]] $HighestVER = $Version | Sort -Descending
foreach($element in $HighestVER) {
Write-Host $element
}
$Version
представляет неупорядоченный массив строк.
При запуске скрипта результат выглядит так:
VER9.16.00.000
VER9.15.00.000
VER9.14.00.000
VER9.13.00.000
VER11.9.00.000
VER11.8.00.000
VER11.7.00.000
VER11.6.00.000
VER11.5.00
VER11.4.00.000
VER11.3.00.016
VER11.3.00.000
VER11.2.00.000
VER11.10.00.000
Как вы можете видеть, сортировка что-то делает, но не делает, как я ожидал. Мой ожидаемый результат:
VER11.10.00.000
VER11.9.00.000
VER11.8.00.000
VER11.7.00.000
VER11.6.00.000
VER11.5.00
VER11.4.00.000
VER11.3.00.016
VER11.3.00.000
VER11.2.00.000
VER9.16.00.000
VER9.15.00.000
VER9.14.00.000
VER9.13.00.000
Как я могу улучшить свой код, чтобы он соответствовал ожидаемому результату?
Edit:
Я не могу решить эту проблему с [System.Version]
, потому что у меня есть алфавитные символы в моей версии. Если я удаляю первые три символа VER
и выполняю сравнение, это вроде работает, но элементы версии запутываются.
[string[]] $HighestVER = $Version2 | ForEach-Object { [System.Version] $_ } | Sort-Object -Descending | ForEach-Object { $_.toString() }
#[string[]] $HighestVER = $Version | Sort -Descending
foreach($element in $HighestVER) {
$element = "VER" + $element
Write-Host $element
}
, который дает мне этот вывод:
VER11.10.0.0
VER11.9.0.0
VER11.8.0.0
VER11.7.0.0
VER11.6.0.0
VER11.5.0
VER11.4.0.0
VER11.3.0.16
VER11.3.0.0
VER11.2.0.0
VER9.16.0.0
VER9.15.0.0
VER9.14.0.0
VER9.13.0.0
Высшая версия нет. используется для сравнения и расширения списка версий (автоматическая сборка Dynamics NAV). Из-за этого формат должен быть идентичным.