Версия сортировки Powershell Объекты по убыванию - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь написать скрипт для получения последней версии приемника Citrix, очистив веб-сайт с помощью PowerShell.Я дошел до того, что у меня есть последние версии, но я не могу отсортировать их по убыванию правильно, потому что второстепенная версия имеет приоритет 9-1 над 99-10.

Вот мой код

$url = "https://www.citrix.com/downloads/citrix-receiver/"
$html = Invoke-WebRequest -Uri "$url"
$versionLinks = $html.Links | where innerHTML -Match "Receiver \d+(\.\d+)+.* for Windows$" | Sort-Object -Property innerHTML -Descending

$versionArray = @()
foreach ($version in $versionLinks){
    [version]$VersionNumber = $version.innerHTML -split " " | Select -First 2 | select -Last 1
    $versionArray += $VersionNumber
}

$versionArray = Sort-Object -InputObject $versionArray -Descending -Property minor
$LatestAppVersion = $versionArray[0]
$LatestAppVersion

Что он выводит, это 4,9.$ versionArray выглядит так:

Major  Minor  Build  Revision
-----  -----  -----  --------
4      9      -1     -1      
4      8      -1     -1      
4      7      -1     -1      
4      6      -1     -1      
4      5      -1     -1      
4      3      100    -1      
4      12     -1     -1      
4      11     -1     -1      
4      10     1      -1      

Мне бы хотелось, чтобы оно было

Major  Minor  Build  Revision
-----  -----  -----  --------
4      12     -1     -1      
4      11     -1     -1      
4      10     1      -1      
4      9      -1     -1      
4      8      -1     -1      
4      7      -1     -1      
4      6      -1     -1      
4      5      -1     -1      
4      3      100    -1    

Этот вопрос похож на мой.Я использую версию сортировки, хотя я не уверен, почему я получаю другой результат.Я попытался использовать [System.Version] в случае, если [версия] не была достаточно конкретной.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Кажется, что Sort-Object на самом деле ничего не делает, когда вы передаете массив в -InputObject по имени, поэтому передайте его вместо этого:

$versionArray = $versionArray |Sort-Object -Descending -Property minor
0 голосов
/ 03 октября 2018

Вы уверены, что хотите отсортировать по несовершеннолетним?Почему бы не выполнить сортировку по всей версии?

Вместо:

$versionArray = $versionArray | Sort-Object -Descending -Property minor

Рассмотрим

$versionArray = $versionArray | Sort-Object -Descending

Я представляю это как ответ и что-то для размышления ... Обратите вниманиетестовые случаи v3 и v5

<#
HAS

Major  Minor  Build  Revision
-----  -----  -----  --------
4      9      -1     -1      
4      8      -1     -1      
4      7      -1     -1      
4      6      -1     -1      
4      5      -1     -1      
4      3      100    -1      
4      12     -1     -1      
4      11     -1     -1      
4      10     1      -1      

WANTS
Major  Minor  Build  Revision
-----  -----  -----  --------
4      12     -1     -1      
4      11     -1     -1      
4      10     1      -1      
4      9      -1     -1      
4      8      -1     -1      
4      7      -1     -1      
4      6      -1     -1      
4      5      -1     -1      
4      3      100    -1    
#>

$v = @()

$v += [version]::new(4,9)
$v += [version]::new(4,8)
$v += [version]::new(4,7)
$v += [version]::new(4,6)
$v += [version]::new(4,5)
$v += [version]::new(4,3,100)
$v += [version]::new(4,12)
$v += [version]::new(4,11)
$v += [version]::new(4,10,1)
$v += [version]::new(5,1)
$v += [version]::new(3,99)

"======== MINOR ===================="
$v | Sort -Descending -Property Minor

"======== WHAT YOU MAY REALLY WANT ===================="
$v | Sort -Descending
0 голосов
/ 03 октября 2018

Какой вывод вы получаете, если используете?

$versionArray | ForEach-Object {[System.Version]$_} | Sort-Object -Property minor -Descending

Он должен выдавать желаемый результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...