VBSでOSのバージョンを取得する

WMI (Windows Management Instrumentation) を使ってOSのバージョンを取得する。

SWbemServicesからOSの情報取得やシャットダウンが実行できるWin32_OperationSytemクラスを呼び出し必要な情報を取得する。


OSのバージョン番号(メジャー番号と1番目のマイナー番号)でどのWindowsOSかを判断する。


Class OSInfo
  Private m_wmi
  Private m_osset
  Private m_os
  Private Sub Class_Initialize
    dim wmi
    dim osset
    dim elem

    'SWbemServicesインスタンスを取得
    Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")  
    'SWbemObjectSetインスタンスを取得 (中にはWin32_OperationSytemインスタンスが1つ含まれている)
    Set osset = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem") 
   
    for each elem in osset
      'SWbemObjectSetからWin32_OperationSytemインスタンスを取得
      'for each 以外でどのように集合内の要素にアクセスするか不明なため
      set m_os = elem
      exit Sub
    next
  End Sub

  Function getVersion()
      'OSTypeが16, 17の場合はOSTypeのみでOSが判明する。
     select case m_os.OSType
       case 16
         getVersion = "Win95"
         exit function
       case 17
         getVersion = "Win98"
         exit function
     end select

      'OSTypeが18の場合Versionプロパティの
      '第1マイナーバージョンまででOSが判明する。
     select case Left(m_os.version, 3)
       case "4.0"
         getVersion = "WinNT"
       case "5.0"
         getVersion = "Win2000"
       case "5.1"
         getVersion = "WinXP"
       case "5.2"
         getVersion = "Win2003Server"
       case "6.0"
        'Version 6以降はPC向けOSとサーバ向けOSのバージョン情報が
        '同じになるため、Captionで判断
         if right(m_os.Caption, 5) = "Vista" then
           getVersion = "WinVista"
         else
           getVersion = "Win2008Server"
         end if
       case "6.1"
         if mid(m_os.Caption, inStr(m_os.Caption, "Windows") + 8, 1) = "7" then
           getVersion = "Win7"
         else
           getVersion = "Win2008ServerR2"
         end if
       case else
         getVersion = "????"
     end select
  End Function
  Function getVerNo()
    getVerNo = left(m_os.Version, 3)
  End Function

  Function getDesc()
    getDesc = m_os.Caption & " " & m_os.CSDVersion
  End Function

  Function getHostName()
   getHostName = m_os.CSName
  End Function
End Class