Конвертировать объект в строку в произвольном формате - PullRequest
2 голосов
/ 04 мая 2019

Допустим, у меня есть это:

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

Как я могу преобразовать его в "3.4"? Я заинтересован в том, чтобы передать его, если это возможно, чтобы избежать создания промежуточной переменной.

Ответы [ 7 ]

3 голосов
/ 04 мая 2019

это некрасиво , но работает он довольно хорошо. он использует опцию .Split(), чтобы поместить результаты в определенное количество элементов, а все остальные добавляются к последнему.

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

вывод = 3.4

2 голосов
/ 04 мая 2019

Вы могли бы также подумать о создании для этого функции, которая работала бы с помощью конвейерного ввода:

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

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

Это, очевидно, намного больше строк кода, но если вы выполняли такое преобразование несколько раз в вашемкод будет выглядеть чище.

2 голосов
/ 04 мая 2019

Другое уродливое, но встроенное решение, использует ForEach-Object, чтобы получить ссылку на канал.

[System.Version]::new(1, 2, 3, 4) | ForEach-Object { "$($_.Build).$($_.Revision)" }
1 голос
/ 04 мая 2019

Вот еще одна опция, которая использует Select-Object и вычисленное свойство, чтобы получить желаемый результат в виде свойства с именем BR, которое затем возвращается:

([System.Version]::new(1, 2, 3, 4) | Select @{N ='BR'; E = { "$($_.Build).$($_.Revision)" }}).BR
0 голосов
/ 05 мая 2019

Использование оболочки и добавление ScriptProperty:

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

(New-Version 1 2 3 4).BuildRevision
3.4
0 голосов
/ 05 мая 2019

A на основе регулярного выражения решение с оператором -replace :

PS> [System.Version]::new(1, 2, 3, 4) -replace '^(.+?\.){2}'
3.4
0 голосов
/ 04 мая 2019

Если вы установите его в переменную, вы можете сделать это:

$version = [System.Version]::new(1, 2, 3, 4)
"$($version.Build).$($version.Revision)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...