Tri des versions PowerShell
dans PowerShell, si j'ai une liste de chaînes contenant des versions, "3.0.1.1", "3.2.1.1", etc. comment puis-je trier le Système de sens.La Version classerait en C#?
10
demandé sur
Peter Mortensen
2009-04-02 22:53:00
4 réponses
PS C:\> $ver="3.0.1.1","3.2.1.1"
PS C:\> $ver|%{[System.Version]$_}|sort
Major Minor Build Revision
----- ----- ----- --------
3 0 1 1
3 2 1 1
24
répondu
James Pogran
2009-04-02 18:57:48
il suffit de le convertir en une Version et de trier de cette façon:
$list = "3.0.1.1","3.2.1.1"
$sorted = $list | %{ new-object System.Version ($_) } | sort
9
répondu
JaredPar
2015-02-21 21:12:48
juste pour ajouter un autre cas de coin: powershell traite ce type de version à un seul chiffre '2' comme invalide. Avoir à ajouter".0' à la fin pour créer la version de l'objet avant le tri:
if($version -match '^\d$')
{
$version = $version + '.0'
}
New-Object System.Version $version
0
répondu
Summer
2016-11-04 08:42:43
# I needed to sort historical versions (Octopus) with varying decimal formats.
# Try # this (it is easy to add to a more complex expression sort)
# Special Case "3.00.1.10.1.10" and "3.0.1.10.1.10" required the double sort
# to work correctly
$vers = @()`enter code here`
$vers += @( "3.1.60", "3.1.52","3.1.51")
$vers += @( "3.00.46", "3.00.36","3.50.2145.11")
$vers += @( "3.50.2145.10","3.50.2145.9")
$vers += @( "3.50.2145.8", "3.50.2145.7")
$vers += @( "3.50.2145.6", "3.50.2145.5")
$vers += @( "3.50.2145.4", "3.50.2145.3")
$vers += @( "3.50.2145.2", "3.50.2145.1")
$vers += @( "3.50.2145", "3.50.2143")
$vers += @( "3.50.2141", "3.50.2135")
$vers += @( "3.0.1.10.1.1", "3.00.1.10.1.10")
$vers += @( "2.1.3.4", "3.0","3.")
$vers += @( "3.0.1.10.1.100","3.0.1.10.1.10")
$mySortAsc = @{Expression={ [regex]::Replace($_ ,'\d+', { $args[0].Value.PadLeft(20,'0') }) };Descending=$false}
$mySortDesc = @{Expression={ [regex]::Replace($_ ,'\d+', { $args[0].Value.PadLeft(20,'0') }) };Descending=$true}
$nl = [Environment]::NewLine
Write-Output ($nl + "Ascending Sort" + $nl);
$vers | Sort-Object | Sort-Object $mySortAsc
Write-Output ($nl + "Descending Sort" + $nl);
$vers | Sort-Object -Descending | Sort-Object $mySortDesc
<# Result
Ascending Sort
2.1.3.4
3.
3.0
3.0.1.10.1.1
3.0.1.10.1.10
3.00.1.10.1.10
3.0.1.10.1.100
3.00.36
3.00.46
3.1.51
3.1.52
3.1.60
3.50.2135
3.50.2141
3.50.2143
3.50.2145
3.50.2145.1
3.50.2145.2
3.50.2145.3
3.50.2145.4
3.50.2145.5
3.50.2145.6
3.50.2145.7
3.50.2145.8
3.50.2145.9
3.50.2145.10
3.50.2145.11
Descending Sort
3.50.2145.11
3.50.2145.10
3.50.2145.9
3.50.2145.8
3.50.2145.7
3.50.2145.6
3.50.2145.5
3.50.2145.4
3.50.2145.3
3.50.2145.2
3.50.2145.1
3.50.2145
3.50.2143
3.50.2141
3.50.2135
3.1.60
3.1.52
3.1.51
3.00.46
3.00.36
3.0.1.10.1.100
3.00.1.10.1.10
3.0.1.10.1.10
3.0.1.10.1.1
3.0
3.
2.1.3.4
#>
0
répondu
phil
2018-05-10 03:21:40