首页 > 解决方案 > 操作系统版本的 if 语句

问题描述

我没有让它工作,我真的很困惑为什么它不工作。我的操作系统版本是 10.0.14393,但它仍然显示它低于 6?这里有什么问题?

$verCheckOS = (Get-WmiObject Win32_OperatingSystem).Version

if ($verCheckOS -lt 6) {
    Write-Host -ForeGroundColor Red "Version is too low, $verCheckOS"
} else { 
    Write-Host -ForegroundColor Green "OS version is good, $verCheckOS"
}

下面的简单数字效果很好,所以我不知道操作系统版本号是否是某种特定类型的数据类型?如何将操作系统版本号与if语句进行比较?

$value = 10

if ($value -lt 6) {
    Write-Host "Value is lower than 6"
} else {
    Write-Host "Value is greater than 6"
}

标签: windowspowershellif-statement

解决方案


如果你对$verCheckOS变量进行类型转换,那么会发生更有趣的事情:

[version]$verCheckOS = (Get-WmiObject win32_operatingsystem).version

运行您提供的代码时,我们收到错误消息:

if($verCheckOS -lt 6) { write-host -ForeGroundColor Red "Version is too low, $verCheckOS" }
Else { write-host -ForegroundColor Green "OS version is good, $verCheckOS" }

Could not compare "10.0.17134" to "6". Error: "Cannot convert value "6" to type "System.Version". 
Error: "Version string portion was too short or too long.""
At line:1 char:8

这里发生的情况是变量$verCheckOS现在是数据类型,并且无法将[version]唯一整数转换为数据类型。它需要至少 2 个八位字节才能进行转换,因为数据类型表示如下:6[version][version]

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      17134  -1      

有很多方法可以解决这个问题,具体取决于您要比较的数字。如果您只是想比较“主要”版本八位字节,则可以比较整数与版本:

if($verCheckOS.Major -lt 6) { write-host -ForeGroundColor Red "Version is too low, $verCheckOS" }
Else { write-host -ForegroundColor Green "OS version is good, $verCheckOS" }

通过推断“主要”版本号并进行整数与整数比较,这将返回一个肯定的结果。

如果您想比较真实的“版本”,那么您需要提供与 2 个版本对象的比较,这是一个示例:

[version]$verCheckOS = (Get-WmiObject win32_operatingsystem).version
[version]$verCompare = "6.0"

if($verCheckOS -lt $verCompare) { write-host -ForeGroundColor Red "Version is too low, $verCheckOS" }
Else { write-host -ForegroundColor Green "OS version is good, $verCheckOS" }

要查看从字符串到版本的转换或尝试解析您自己的版本号,请使用[version].NET 类,如下所示:

[version]::new("6.0")

推荐阅读