[英]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.