2009-04-02 10 views
10

Dans PowerShell, si j'ai une liste de chaînes contenant les versions "3.0.1.1", "3.2.1.1", etc., comment puis-je le trier comme System.Version le trierait en C#?Tri des versions de PowerShell

Répondre

22
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 
+0

+1 exactement mes pensées ... – Sung

9

Il suffit de le convertir en une version et trier cette façon:

$list = "3.0.1.1","3.2.1.1" 
$sorted = $list | %{ new-object System.Version ($_) } | sort 
+1

+1 Vous avez va pratiquer pour taper plus vite probablement;) – Sung

+0

@Sung , J'étais lent dans ce cas parce que je ne pouvais pas me souvenir si | tri travaillé ou non dans PowerShell. – JaredPar

0

Juste pour ajouter un autre cas de coin: powershell traite ce genre de la version à un seul chiffre « 2 » comme non valide. devez ajouter » .0' à la fin pour créer l'objet version avant de tri:

if($version -match '^\d$') 
{ 
    $version = $version + '.0' 
} 
New-Object System.Version $version