首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell排序版本对象降序

Powershell排序版本对象降序
EN

Stack Overflow用户
提问于 2018-10-03 18:55:04
回答 3查看 670关注 0票数 0

我正在试图写一个脚本,以获得最新版本的citrix接收机,通过刮刮网站与PowerShell。我已经有了最新的版本,但是我不能正确地排序它们,因为版本次要是将9-1优先于99-10。

这是我的密码

代码语言:javascript
运行
复制
$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看起来就像

代码语言:javascript
运行
复制
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      

我希望它是

代码语言:javascript
运行
复制
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    

This question和我的相似。我使用排序版本,所以我不知道为什么我会得到一个不同的结果。在版本不够明确的情况下,我确实尝试使用System.Version。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-03 19:50:50

似乎当您按名称将数组传递给Sort-Object时,-InputObject实际上没有做任何事情,所以可以使用管道:

代码语言:javascript
运行
复制
$versionArray = $versionArray |Sort-Object -Descending -Property minor
票数 0
EN

Stack Overflow用户

发布于 2018-10-03 19:57:53

你确定你想按小调分类吗?为什么不对整个版本进行排序呢?

而不是:

代码语言:javascript
运行
复制
$versionArray = $versionArray | Sort-Object -Descending -Property minor

考虑一下

代码语言:javascript
运行
复制
$versionArray = $versionArray | Sort-Object -Descending

我把这个作为一个答案和一些思考.注意v3和v5测试用例

代码语言:javascript
运行
复制
<#
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
票数 1
EN

Stack Overflow用户

发布于 2018-10-03 19:49:49

如果你使用,你会得到什么输出?

代码语言:javascript
运行
复制
$versionArray | ForEach-Object {[System.Version]$_} | Sort-Object -Property minor -Descending

它应该产生您想要的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52633919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档