PowerShell-match运算符可以用于测试版本字符串吗



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

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

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

对于测试版本字符串的特定用例,.NET提供了一个Version类,它在这里很有用。您可以创建这样的实例。。。

$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

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-match是一个正则表达式匹配,其中句点.匹配任何字符。因此,对于您的代码:

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

找到匹配项,因为"600""匹配""6.0"

如果你想专门搜索句点,你需要用.:替换它来转义它

"600" -match "6.0"
True
"600" -match "6.0"
False
$a = "6.3.9600"
$a -match "6.0"
False

相关内容

最新更新