2014-04-22 250 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

相關問題