powershell中表中的自然排序版本号



我已经写了一个powershell函数以查询citrix接收器版本:https://gist.github.com/aaronparker/8204E49405A78245301DAE1DAE1DAEBAF1DF71

这返回一个看起来像这样的数组/表:

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

我想对版本属性进行自然搜索。我可以成功地做到这一点,只要对版本属性进行排序(或排序仅包含版本号的数组(,例如:

$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}

最新更新