Is your server running slowly? Check with SolarWinds ipMonitor
Get a free evaluation copy of ipMonitor
Contents for Guy's Scripting Ezine 52 - OS Version Number
Thanks to people emailing me with feedback, I am building up a picture of what you the reader wants. The only trouble is that different people want different scripts. Thus, my personal mission is to design scripts that work at two or
even three
levels. My first and most important goal, is to produce a script which solves a particular problem, for example, this week's script extracts the operating system version number. We can then use this version number to branch a script.
This is what I mean by 'branch a script':
if version number = 5.1 (XP) the apply Group Policy abc, else apply Group Policy xyz. My secondary goal is for those who want to learn more about VBScript; for them I add Learning
Points at the end of each script. My OSVer.vbs script highlights the Select Case construction. Master the 'Case' statements here, then apply Select Case to other scripts. My third goal is one
of my hobby horses, I want to promote the concept of building up scripts
gradually. I urge you to break up real scripts into sections. Only when each section works perfectly, bolt them together and so create the complete package. Here I speak from the heart, because the majority of scripts that I am asked to troubleshoot are so long and complex
that it's a nightmare trying to debug the errors. What I see is people who keep adding more section to a script until failure is inevitable.
The purpose of this script is to programmatically discover the operating system's version number. In production scripts, this version number becomes the lynch pin, which gives users different
mappings depending on whether they are running XP or Window 9x. As ever, the computer thinks 'number' rather than 'text', as a result, the WMI property called version, displays 5.1 rather than XP. No matter, we scripter's can translate numbers into text.
This is how I made the translation: If version number = 5.1 then a variable called OSystem = "XP". However, in this example I am going to use Select Case instead of 'If...Then, Else, Endif '
Instructions
- Copy and paste the script below into notepad or OnScript
- Save the file with .vbs extension e.g. OSVer.vbs.
- Double click and examine the message boxes.
' OSVer.vbs ' Purpose VBScript to discover the operating system version. ' Learning Points: Win32_ WMI objects. Case Select ' Usage if want to 'branch' depending on the OS ' Author Guy
Thomas http://computerperformance.co.uk/ ' Version 2.2 - April 2007 ' --------------------------------------------------------------' Option Explicit Dim objWMI, objItem, colItems Dim
strComputer, VerOS, VerBig, Ver9x, Version9x, OS, OSystem
' Here is where we interrogate the Operating System ' On Error Resume Next
' Get the computer name dot = this computer. strComputer =
"." ' This is where WMI interrogates the operating system Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("Select * from Win32_OperatingSystem",,48)
' Here we filter Version from the dozens of properties For Each objItem in colItems VerBig = Left(objItem.Version,3) Next
' Spot VerBig variable in previous section ' Note the output
variable is called OSystem
Select Case VerBig Case "6.0" OSystem = "Vista" Case "5.2" OSystem = "Windows 2003" Case "5.1" OSystem = "XP" Case "5.0" OSystem = "W2K" Case "4.0" OSystem = "NT 4.0**" Case Else OSystem =
"Unknown - probably Win 9x" End Select
Wscript.Echo "Version No : " & VerBig & vbCr _ & "OS System : " & OSystem
WScript.Quit
' End of script
WMI Learning Points
Note 1: WMI's Version is a property of the Win32_OperatingSystem class. To tell the truth Version does not report Windows 9x operating system numbers. From a pure scripting point of view this
not a problem as I catch Version numbers like 95 with the Case Else... statement. There is a rumour that the Win 9x attribute is called Version9x not plain Version.
Note 2: However I do have a plan B, that is to substitute BuildNumber for Version on line 24, for example objItem.BuildNumber. Here are the actual build numbers: Windows 95 - 950, NT - 1381, Windows 2000 - 2195, XP - 2600,
Windows 2003 - 3790.
VBScript Learning Points
Note 3: For branching statements, Select Case is more efficient than multiple If, then else, else, else, else, else. Endif.
Note 4: The insignificant statement: Left(objItem.Version,3) gave me more trouble than any other line. That was because silly me tried to use Left(objItem.Version),3. My learning point is
that the Left 3 statement gives me just three digits, which is simpler than the raw string with multiple dots. 5.1 rather than 5.1.12.87.41.98.
Note 5: Where next?. On to Example 2 where we use the version number information to create a branching script.
' OSVerBranch.vbs ' Purpose VBScript to discover the operating system version. ' Learning Points: Win32_ WMI objects. Case Select ' Usage if want to 'branch' depending on the OS ' Author
Guy Thomas http://computerperformance.co.uk/ ' Version 3.2 - November 14th 2004 ' --------------------------------------------------------------' Option Explicit Dim objWMI, objItem, colItems
Dim strComputer, VerOS, VerBig, Ver9x, Version9x, OS, OSystem
' Here is where we interrogate the Operating System ' On Error Resume Next
' Get the computer name dot = this computer.
strComputer = "." ' This is where WMI interrogates the operating system Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMI.ExecQuery("Select * from
Win32_OperatingSystem",,48)
' Here we filter Version from the dozens of properties For Each objItem in colItems VerBig = Left(objItem.Version,3) Next
' Spot VerBig variable in previous
section ' Note the output variable is called OSystem
Select Case VerBig Case "5.0" OSystem = "W2K" Case "5.1" OSystem = "XP" Case "5.2" OSystem = "Windows 2003" Case "4.0" OSystem = "NT
4.0" Case Else OSystem = "Unknown - probably Win 9x" End Select
' Actual Branching section If OSystem = "XP" Then Wscript.Echo " This is where you set XP Group Policy " Else If OSystem = "Windows 2003" Then
Wscript.Echo " No Group Policy on the server" Else If OSystem = "W2K" Then Wscript.Echo " You could set W2K Group Policy " Else Wscript.Echo " Default group policy " End If End If End If
WScript.Quit
' End of script
Learning Points
Note 1: This script is purely for learning. Whilst example 2 is ugly, I hope that you can see how the value that WMI version returns could be used to create a branch or fork later in the
script.
Note 2: The fact that this script is so ugly, makes me hope that you will accept my challenge to amend it. What you could do is merge the Select Case and ' Actual branching section, into one
unit. Moreover, in that unit perhaps you could think of something more useful then WScript.Echo, for example, map network drive.
If you are looking for handy network utilities, try some of the free downloads at
Tools4Ever
Knowing the operating system version number gives your script a handle. That handle or test, is invaluable when it comes to branching decisions later in the script. For example if operating
system = XP, then provide a special group policy, else just provide the basic group policy.
Their topics and material are ideal for getting you started with VBScript. The
videos are easy to follow and you can control the pace. Try their free demo material and then see if you want to buy the full package.
See more about VB Script Training CD.
|