簡體   English   中英

PowerShell中表格中的自然排序版本號

[英]Natural Sort version numbers in a table in PowerShell

我已經編寫了一個PowerShell函數來查詢Citrix Receiver版本: https : //gist.github.com/aaronparker/8204e49405a78245301dae1ebaf1df71

這將返回如下所示的數組/表:

Platform                                         Version
--------                                         -------
Receiver for Linux                               13.0
Receiver for Linux                               13.1
Receiver for Linux                               13.2
Receiver for Linux                               13.2.1
Receiver for Linux                               13.3
Receiver for Linux                               13.4
Receiver for Linux                               13.5
Receiver for Linux                               13.6
Receiver for Linux                               13.7
Receiver for Linux                               13.8
Receiver for Mac                                 11.9.15
Receiver for Mac                                 12.1.100
Receiver for Mac                                 12.2
Receiver for Mac                                 12.3
Receiver for Mac                                 12.4
Receiver for Mac                                 12.5
Receiver for Mac                                 12.6
Receiver for Mac                                 12.7
Receiver for Mac                                 12.8.1
Receiver for Windows                             4.10.1
Receiver for Windows                             4.3.100
Receiver for Windows                             4.5
Receiver for Windows                             4.6
Receiver for Windows                             4.7
Receiver for Windows                             4.8

我想對Version屬性執行自然搜索。 如果僅對Versions屬性進行排序(或對僅包含版本號的數組進行排序),則可以成功完成此操作,例如:

$SortNatural = { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }
$array.Version | Sort-Object $SortNatural

但是,這在對整個表進行排序時變得更加困難。 我想對平台進行排序,然后對版本進行排序。 我當然可以做這樣的事情:

$array | Sort-Object -Property Platform, @{Expression = '$_.Version'; Ascending = $True}

但這不能提供正確的排序。 我試圖了解如何使用帶有排序對象的表達式的自然排序。

對實現我所需的排序方法有任何指示或替代建議嗎?

對於任何想做同樣事情的人,這里都是通過@Bill_Stewart修復的。 上面的Gist鏈接中的完整代碼。

$Receivers += $ReceiverLinks | Select-Object @{Name = "Platform"; Expression = {$_.innerText -replace $RegExVersion}}, `
                @{Name = "Version"; Expression = {[Version]$($_.innerText -replace $RegExNumbers)}}
$Receivers | Sort-Object -Property Platform, @{Expression = 'Version'; Descending = $True}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM