假设我有这个:
[System.Version]::new(1, 2, 3, 4)
如何将其转换为"3.4"
?我对尽可能地传递代码感兴趣,以避免必须创建一个中间变量。
答案 0 :(得分:3)
这是 ugly ,但是它在行内工作得很好。它使用.Split()
选项将结果放入特定数量的项目中,所有剩余的项目都添加到最后一个项目中。
([version]'1.2.3.4').ToString().Split('.', 3)[-1]
output = 3.4
答案 1 :(得分:2)
另一个丑陋但内联的解决方案,使用ForEach-Object
来获取管道引用。
[System.Version]::new(1, 2, 3, 4) | ForEach-Object { "$($_.Build).$($_.Revision)" }
答案 2 :(得分:2)
您还可以考虑为此创建一个通过管道输入起作用的函数:
Function ConvertTo-BuildRevision {
Param(
[Parameter(ValueFromPipeline)]
[system.version]
$Version
)
Process {
Return "$($Version.Build).$($Version.Revision)"
}
}
[System.Version]::new(1, 2, 3, 4) | ConvertTo-BuildRevision
这显然要多得多的代码行,但是如果您在代码中多次执行这种转换,看起来会更加干净。
答案 3 :(得分:1)
这是另一种选择,它使用Select-Object
和计算所得的属性作为名为BR
的属性来获取所需的结果,然后将其返回:
([System.Version]::new(1, 2, 3, 4) | Select @{N ='BR'; E = { "$($_.Build).$($_.Revision)" }}).BR
答案 4 :(得分:0)
如果将其设置为变量,则可以执行以下操作:
$version = [System.Version]::new(1, 2, 3, 4)
"$($version.Build).$($version.Revision)"
答案 5 :(得分:0)
具有regex的基于-replace
operator的解决方案:
PS> [System.Version]::new(1, 2, 3, 4) -replace '^(.+?\.){2}'
3.4
答案 6 :(得分:0)
使用包装器并添加chmod +x install
:
ScriptProperty
Function New-Version {
$Version = New-Object System.Version $Args
$Version | Add-Member ScriptProperty BuildRevision {"$($This.Build).$($This.Revision)"}
Write-Output $Version
}