检查OS版本

时间:2014-04-22 03:40:37

标签: vbscript

嗨,我无法理解这段代码。有人可以帮我解释一下它的作用吗?

GetOperatingSystemVersion
If OSVersion > 6.0 Then
strCMD = "c:\Windows\System32\manage-bde.exe "
Else
strCMD = "cscript.exe c:\Windows\System32\manage-bde.wsf "
End If`

Sub GetOperatingSystemVersion

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set oss = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")`
For Each os in oss
OSVersion = Left(os.Version,3)
OSVersion = Round(OSVersion,3)
Next

End Sub

根据我的理解,它将调用GetOperatingSystemVersion并检查for循环。这是我不理解的部分。提前谢谢你:)

1 个答案:

答案 0 :(得分:1)

基本上,它使用WMI来检索操作系统版本。

前两行只是标准的WMI-from-VBScript习语。如果您运行关键字搜索,您将在线找到大量示例代码和信息。重要的部分是Win32_OperatingSystem,它指定要查询的WMI类。将其插入MSDN,您将找到the documentation,包括该类公开的属性和方法的列表。

总而言之,语法Select * from Win32_OperatingSystem是一个查询Win32_OperatingSystem类的所有实例的查询,包括该类的所有成员。

For Each循环遍历返回集合中的所有项目,一次一个。对于Win32_OperatingSystem类,这不是必需的,因为只应返回一个全局对象。但是VBScript(至少在Vista之前)没有任何方法可以访问集合中的特定项目,所以你必须这样做。

For Each循环内部,os对象变量引用Win32_OperatingSystem类的实例,如the documentation所示,展示Version member,返回一个字符串。查询该成员,Left函数从其左侧提取前3个字符。这3个字符存储在OSVersion变量中。

这是必要的,因为现代版本的Windows将版本号作为版本号的一部分包含在内,从而产生类似于6.1.76015.1.2600的字符串。将使用版本号的代码显然不关心构建号;它只需要主要版本号和次要版本号,因此它只从版本字段中提取前3个字符。

最后,使用OSVersion函数将Round变量中存储的3个字符四舍五入到3个小数位,并将结果保存回OSVersion变量。因为它只从版本字段中提取了前3个字符,所以我不知道为什么要这样做。

因此,当函数完成时,OSVersion变量包含操作系统的当前版本,四舍五入到小数点后3位。但代码很脆弱,必须小心维护。 Microsoft发布版本号为6.10.xxxx的Windows版本时会发生什么? (答案:此代码将其称为版本6.1。)