2
votes

Convertir un objet en chaîne avec un format personnalisé

Disons que j'ai ceci:

[System.Version]::new(1, 2, 3, 4)

Comment puis-je le convertir en "3.4" ? Je suis intéressé à le canaliser si possible pour éviter d'avoir à créer une variable intermédiaire.


0 commentaires

7 Réponses :


0
votes

Si vous le définissez sur une variable, vous pouvez le faire:

$version = [System.Version]::new(1, 2, 3, 4)
"$($version.Build).$($version.Revision)"


0 commentaires

3
votes

c'est moche mais cela fonctionne assez bien en ligne. il utilise l'option .Split () pour placer les résultats dans un nombre spécifique d'éléments avec tous les éléments restants ajoutés au dernier.

([version]'1.2.3.4').ToString().Split('.', 3)[-1]

output = 3.4


0 commentaires

3
votes

Une autre solution moche mais intégrée utilise ForEach-Object pour accéder à la référence redirigée.

[System.Version]::new(1, 2, 3, 4) | ForEach-Object { "$($_.Build).$($_.Revision)" }


0 commentaires

1
votes

Voici une autre option, qui utilise Select-Object et une propriété calculée pour obtenir le résultat souhaité en tant que propriété nommée BR qui est ensuite renvoyée:

([System.Version]::new(1, 2, 3, 4) | Select @{N ='BR'; E = { "$($_.Build).$($_.Revision)" }}).BR


0 commentaires

2
votes

Vous pouvez également envisager de créer une fonction pour cela qui fonctionne via l'entrée Pipeline:

Function ConvertTo-BuildRevision {
    Param(
        [Parameter(ValueFromPipeline)]
        [system.version]
        $Version
    )
    Process {
        Return "$($Version.Build).$($Version.Revision)"
    }
}

[System.Version]::new(1, 2, 3, 4) | ConvertTo-BuildRevision

Il s'agit évidemment de beaucoup plus de lignes de code, mais si vous effectuiez ce type de conversion plusieurs fois dans votre code serait beaucoup plus propre.


0 commentaires

0
votes

A regex - solution basée sur -replace opérateur :

PS> [System.Version]::new(1, 2, 3, 4) -replace '^(.+?\.){2}'
3.4


0 commentaires

0
votes

Utilisation d'un wrapper et ajout d'une ScriptProperty:

(New-Version 1 2 3 4).BuildRevision
3.4

Function New-Version {
    $Version = New-Object System.Version $Args
    $Version | Add-Member ScriptProperty BuildRevision {"$($This.Build).$($This.Revision)"} 
    Write-Output $Version
}


0 commentaires