gpt4 book ai didi

powershell - 在 Powershell 中比较 System.Version

转载 作者:行者123 更新时间:2023-12-02 22:11:25 25 4
gpt4 key购买 nike

我有一个案例,我必须根据比较版本在脚本中做出决定
考虑这个例子:

PS C:\>
[version]$SomeVersion='1.1.1'
[version]$OtherVersion='1.1.1.0'

PS C:\> $SomeVersion

Major Minor Build Revision
----- ----- ----- --------
1 1 1 -1

PS C:\> $OtherVersion

Major Minor Build Revision
----- ----- ----- --------
1 1 1 0

PS C:\>$SomeVersion -ge $OtherVersion
False

我想在比较 System.Version 类型的对象时省略修订
我找不到任何理智的方法来做到这一点。
有没有?

注意 - 我试过这样做:
PS C:\> ($scriptversion |select major,minor,build) -gt ($currentVersion|select major,minor,build)

Cannot compare "@{Major=1; Minor=1; Build=1}" to "@{Major=1; Minor=1;
Build=1}" because the objects are not the same type or the object "@{Major=1;
Minor=1; Build=1}" does not implement "IComparable".
At line:1 char:1
+ ($scriptversion |select major,minor,build) -gt ($currentVersion |sele ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException
+ FullyQualifiedErrorId : PSObjectCompareTo

当我尝试用 0 覆盖修订号时,它表示它是只读属性...
我有一个解决方法但我希望用 system.version 做得更好

最佳答案

使用 three argument System.Version constructor使用相关属性创建新实例:

[Version]::new($scriptversion.Major,$scriptversion.Minor,$scriptversion.Build) -gt [Version]::new($currentVersion.Major,$currentVersion.Minor,$currentVersion.Build)

或者您可以使用 New-Object 进行详细说明:
$NormalizedScriptVersion = New-Object -TypeName System.Version -ArgumentList $scriptversion.Major,$scriptversion.Minor,$scriptversion.Build
$NormalizedCurrentVersion = New-Object -TypeName System.Version -ArgumentList $currentVersion.Major,$currentVersion.Minor,$currentVersion.Build

$NormalizedScriptVersion -gt $NormalizedCurrentVersion

使用您认为更易于维护的任何一个。

关于powershell - 在 Powershell 中比较 System.Version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com