Library: GetOS

Tested with opsi 4.0.2
required WInst Version: 4.11.3
By Frank Thommen, 2014/04/24 20:25

Tree:

%SCRIPTDRIVE%\lib\
  └ GetOS.sub

GetOS.sub

;
; -----------------------------------------------------------
;  GetOS.sub - Retrieve the current OS version
; -----------------------------------------------------------
;
; AUTHOR: Frank Thommen, EMBL Heidelberg
; SHORTNAME (for variable names): os
;
;
; PREREQUISITE: none
;
; RETURN VARIABLE: $_os
;
; PURPOSE: Retrieve the current OS version using a consistent
;          naming "Win"+version, where version can be one of
;             XP
;             Vista
;             7
;             8
;             8.1
;
;          The OS version is returned in the variable $_os.  The
;          default value of $_os is "UNKNOWN".
;
;
; NOTE: This script implements the informations published at
;       http://msdn.microsoft.com/en-us/library/ms724833%28VS.85%29.aspx
;       and in the chapter "7.4.1. Info Maps" of the OPSI Winst manual
;       for version 4.11.3.  HOWEVER, only a SUBSET of the possible
;       OS versions is supported (see above).
;
;
; USAGE:
;          Sub "%SCRIPTDRIVE%\lib\GetOS.sub"
;          if ($_os = "UNKNKOWN")
;             PAUSE "This is OS is UNKNOWN"
;          else
;             PAUSE "OS is " + $_os
;          endif
;
;
; HISTORY: 2013:        Initial version
;          12-FEB-2014: Added Windows 8 and 8.1 support
;
;
 
; avoid error message if run several times
ScriptErrorMessages = off
FatalOnSyntaxError  = false
  DefVar $_os
  Set    $_os = "UNKNOWN"
 
  DefStringList $__MSVersionMap
  Set           $__MSVersionMap = getMSVersionMap
 
  DefVar $__os.majorversion
  Set    $__os.majorversion = getValue("major_version", $__MSVersionMap)
 
  DefVar $__os.minorversion
  Set    $__os.minorversion = getValue("minor_version", $__MSVersionMap)
 
  ; ProductType:
  ;   1 = VER_NT_WORKSTATION
  ;   2 = VER_NT_DOMAIN_CONTROLLER
  ;   3 = VER_NT_SERVER
  ;
  DefVar $__os.producttype
  Set    $__os.producttype = getValue("product_type_nr", $__MSVersionMap)
ScriptErrorMessages = on
FatalOnSyntaxError  = true
 
 
if ( $__os.producttype = "1" )
  ; Client OS versions
  ;
  if ( $__os.majorversion = "6" )
    if ( $__os.minorversion = "3")
      Set $_os = "Win8.1"
    else
      if ( $__os.minorversion = "2")
        Set $_os = "Win8"
      else
        if ( $__os.minorversion = "1")
          Set $_os = "Win7"
        else
          if ( $__os.minorversion = "0")
            Set $_os = "WinVista"
          endif
        endif
      endif
    endif
  else
    if ( $__os.majorversion = "5" )
      ; this detection is a pragmatic approach as the
      ; detecting Win XP Pro 64bit is more complicated
      ; (see http://msdn.microsoft.com/en-us/library/ms724833%28VS.85%29.aspx) 
      Set $_os = "WinXP"
    endif
  endif
endif