2014-04-22 201 views
0

嗨我无法理解此代码。有人可以帮我解释它的作用吗?检查操作系统版本

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

基本上,它使用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构件,它返回一个串的一个实例。该成员被查询,并且Left函数从其左侧提取前3个字符。这3个字符存储在OSVersion变量中。

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

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

因此,当函数完成时,OSVersion变量包含操作系统的当前版本,取整为3位小数。该代码是脆弱的,但必须谨慎维护。当微软发布版本号为6.10.xxxx的Windows版本时会发生什么? (回答:此代码称为版本6.1。)

+0

哇,谢谢科迪的快速回复。现在我明白了这个功能的作用。先生非常感谢您! – amirul

相关问题