方法1:使用WMI(最常用)
Dim objWMI, colOS, objOS, strOS, strVersion
' 获取WMI对象
Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
' 查询操作系统信息
Set colOS = objWMI.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS In colOS
' 操作系统名称
strOS = objOS.Caption
' 版本号(如 10.0.19045)
strVersion = objOS.Version
' 生成详细版本信息
Dim strInfo
strInfo = "操作系统: " & strOS & vbCrLf & _
"版本号: " & strVersion & vbCrLf & _
"架构: " & objOS.OSArchitecture & vbCrLf & _
"Build号: " & objOS.BuildNumber
MsgBox strInfo, vbInformation, "系统信息"
Next
Set colOS = Nothing
Set objWMI = Nothing
方法2:使用环境变量
' 获取Windows版本(简写)
Dim osVersion
osVersion = Environ("OS")
' 获取系统根目录
Dim systemRoot
systemRoot = Environ("SystemRoot")
' 显示结果
MsgBox "OS: " & osVersion & vbCrLf & _
"SystemRoot: " & systemRoot, vbInformation, "系统信息"
方法3:通过注册表获取更详细版本信息
Dim objShell, strVersion, strBuild, strEdition
Set objShell = CreateObject("WScript.Shell")
On Error Resume Next ' 防止注册表项不存在报错
' 获取当前版本
strVersion = objShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
strBuild = objShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentBuild")
strEdition = objShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EditionID")
' 显示结果
MsgBox "版本: " & strVersion & vbCrLf & _
"Build: " & strBuild & vbCrLf & _
"版本类型: " & strEdition, vbInformation, "注册表信息"
Set objShell = Nothing
方法4:完整版本识别脚本
' 获取Windows完整版本信息
Function GetWindowsVersion()
Dim objWMI, colOS, objOS, strVersion, strName
Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
Set colOS = objWMI.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS In colOS
strName = objOS.Caption
strVersion = objOS.Version
' 根据版本号判断Windows版本
Select Case True
Case InStr(strVersion, "10.0") > 0
GetWindowsVersion = "Windows 10/11 (" & strVersion & ")"
Case InStr(strVersion, "6.3") > 0
GetWindowsVersion = "Windows 8.1 (" & strVersion & ")"
Case InStr(strVersion, "6.2") > 0
GetWindowsVersion = "Windows 8 (" & strVersion & ")"
Case InStr(strVersion, "6.1") > 0
GetWindowsVersion = "Windows 7 (" & strVersion & ")"
Case InStr(strVersion, "6.0") > 0
GetWindowsVersion = "Windows Vista (" & strVersion & ")"
Case InStr(strVersion, "5.2") > 0
GetWindowsVersion = "Windows XP 64-bit/Server 2003 (" & strVersion & ")"
Case InStr(strVersion, "5.1") > 0
GetWindowsVersion = "Windows XP (" & strVersion & ")"
Case Else
GetWindowsVersion = strName & " (" & strVersion & ")"
End Select
Next
Set colOS = Nothing
Set objWMI = Nothing
End Function
' 使用示例
MsgBox GetWindowsVersion(), vbInformation, "Windows版本"
方法5:生成详细报告并保存到文件
' 获取详细系统信息并保存到文件
Sub GetSystemInfoReport()
Dim objWMI, colOS, objOS
Dim objFSO, objFile, strReport, strFileName
Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
Set colOS = objWMI.ExecQuery("Select * from Win32_OperatingSystem")
' 创建报告内容
strReport = "=== 操作系统信息报告 ===" & vbCrLf & vbCrLf
For Each objOS In colOS
strReport = strReport & _
"操作系统: " & objOS.Caption & vbCrLf & _
"版本号: " & objOS.Version & vbCrLf & _
"架构: " & objOS.OSArchitecture & vbCrLf & _
"Build号: " & objOS.BuildNumber & vbCrLf & _
"安装日期: " & objOS.InstallDate & vbCrLf & _
"系统目录: " & objOS.SystemDirectory & vbCrLf & _
"总物理内存: " & Round(objOS.TotalVisibleMemorySize/1024, 2) & " MB" & vbCrLf & _
"可用物理内存: " & Round(objOS.FreePhysicalMemory/1024, 2) & " MB" & vbCrLf & _
"制造商: " & objOS.Manufacturer & vbCrLf & _
"序列号: " & objOS.SerialNumber & vbCrLf
Next
' 保存到文件
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFileName = "C:\SystemInfo_" & Replace(Replace(Now(), "/", "_"), ":", "_") & ".txt"
Set objFile = objFSO.CreateTextFile(strFileName, True)
objFile.Write strReport
objFile.Close
MsgBox "系统信息已保存到: " & strFileName, vbInformation, "完成"
' 清理对象
Set objFile = Nothing
Set objFSO = Nothing
Set colOS = Nothing
Set objWMI = Nothing
End Sub
' 调用函数
GetSystemInfoReport
使用建议:
方法1(WMI) 是最推荐的方式,可以获取最全面的信息
方法4 适合需要识别具体Windows版本(如Win7、Win10等)的场景
方法5 适合需要生成报告或日志的场景
某些情况下可能需要以管理员权限运行才能获取完整信息
这些脚本都可以直接保存为 .vbs 文件,双击或在命令行使用 cscript 命令运行。