我想使用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