【问题标题】:Can the PowerShell -match operator be used to test version strings?可以使用 PowerShell -match 运算符来测试版本字符串吗?
【发布时间】:2019-05-06 13:39:30
【问题描述】:

我想使用 PowerShell 检查操作系统版本。脚本是这样的:

$a = "6.3.9600"
$a -match "6.0"

我在 PowerShell ISE 上运行此脚本,此脚本返回 $true。为什么?

【问题讨论】:

    标签: regex powershell match version


    【解决方案1】:

    至于您测试版本字符串的特定用例,.NET 提供了一个Version class,在此处很有用。你可以像这样创建一个实例...

    $version = [Version] $a
    

    ...或者像这样...

    $version = [Version]::Parse($a)
    

    有主要版本、次要版本、构建和修订的属性...

    PS> $version
    
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    6      3      9600   -1
    

    然后您可以执行这样的测试...

    PS> $version.Major -eq 6
    True
    PS> $version.Major -eq 6 -and $version.Minor -eq 3
    True
    PS> $version.Major -eq 6 -and $version.Minor -ge 3
    True
    PS> $version.Major -eq 6 -and $version.Minor -gt 3
    False
    

    【讨论】:

    • 好主意,这就是我真正想要的。
    【解决方案2】:

    PowerShell -match 是正则表达式匹配,其中句点. 匹配任何字符。所以对于你的代码:

    $a = "6.3.9600"
    $a -match "6.0"
    

    找到匹配项,如 "600" 'matches' "6.0"

    如果您想专门搜索句号,则需要将其转义,将其替换为\.

    "600" -match "6.0"
    True
    "600" -match "6\.0"
    False
    
    $a = "6.3.9600"
    $a -match "6\.0"
    False
    

    【讨论】:

    • 最好也使用^6\.0 将匹配锚定到输入字符串的开头,以免匹配,例如版本6.6.0 应该曾经发布过.
    • 这是匹配的答案。我忘记了比赛使用regx...非常感谢。
    【解决方案3】:

    powershell 可以为此使用 dotnet [version] 类型的加速器。它理解版本号,因此它知道6.0.9.1 小于6.0.11.1。这是一个演示......

    $FoundVersion = [version]'6.3.9600'
    $WantedVersion = [version]'6.0'
    
    'Is it greater or equal? = {0}' -f ($FoundVersion -ge $WantedVersion)
    'Is it equal?            = {0}' -f ($FoundVersion -eq $WantedVersion)
    

    输出...

    Is it greater or equal? = True
    Is it equal?            = False
    

    【讨论】:

    • 这没有回答 powershell 匹配用法。但它确实回答了我想要的。非常感谢!
    • @AaronHu - 是的,你对-match 的使用似乎是一种非常迂回的方式来获得答案——一旦知道[version] 类型的加速器。我看到您已经对正则表达式处理点的方式有了答案。不用客气! [咧嘴]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多