The following VBScript will retrieve the current hotfix for a specified SQL 2005 Server, and return that hotfix as a the return code. Useful in batch files for selectively applying unattended service packs.
Option Explicit
Dim sServer, sInstance, nVersion, bVerbose, sSQLServer
If (ParseCommandLine()) Then
nVersion = GetSQLServerHotfix(sServer, sInstance)
WScript.Quit(nVersion)
Else
ShowUsage()
WScript.Quit(-1)
End If
'*******************************************************************
'* GetSQLServerHotfix - Retrieves SQL 2005 server hotfix version #
'*******************************************************************
Function GetSQLServerHotfix(strServer, strInstance)
Dim oWMI, oRst, oRow, nHotfix, sSQLName, sVersion, sTemp, nPos
nHotfix = 0
If (UCase(sInstance) <> "MSSQLSERVER") Then
sSQLName = "MSSQL$" & sInstance
Else
sSQLName = "MSSQLSERVER"
End If
Set oWMI = GetObject("winmgmts:\\" & strServer & "\root\Microsoft\SqlServer\ComputerManagement")
Set oRst = oWMI.ExecQuery("SELECT PropertyStrValue FROM SQLServiceAdvancedProperty " _
& " WHERE PropertyName='Version'" _
& " AND ServiceName='" & sSQLName & "'",,48)
For Each oRow in oRst
sVersion = oRow.PropertyStrValue
If (bVerbose) Then
WScript.Echo("Server: " & sSQLServer)
WScript.Echo("Version: " & sVersion)
End If
If (Len(sVersion) > 2) Then
sTemp = sVersion
nPos = InStr(3,sTemp,".")
If (nPos > 0) Then
sTemp = Mid(sTemp,nPos + 1)
nPos = InStr(1,sTemp,".")
If (nPos > 0) Then
nHotfix = Left(sTemp,nPos-1)
If (bVerbose) Then
WScript.Echo("Hotfix: " & nHotfix)
End If
End If
End If
End If
Next
Set oRst = Nothing
Set oWMI = Nothing
GetSQLServerHotfix = nHotfix
End Function
'*******************************************************************
'* ParseCommandLine - Parses command line options into global vars
'*******************************************************************
Function ParseCommandLine()
Dim objArgs, i, sNextArg
Set objArgs = WScript.Arguments
For i = 0 To objArgs.Count - 1
If (i < objArgs.Count - 1) Then
sNextArg = objArgs(i+1)
Else
sNextArg = ""
End If
Select Case (UCase(objArgs(i)))
Case "/SERVER":
sSQLServer = sNextArg
i = i + 1
Case "/VERBOSE":
bVerbose = True
Case "/HELP":
ParseCommandLine = False
Exit Function
Case "/H":
ParseCommandLine = False
Exit Function
End Select
Next
' Check for valid arguments
If (Len(sSQLServer) > 0) Then
' Parse the server name/instance
Dim nSlash
nSlash = InStr(1,sSQLServer,"\")
If (nSlash > 0) Then
sInstance = Mid(sSQLServer,nSlash+1)
sServer = Left(sSQLServer,nSlash-1)
Else
sInstance = "MSSQLSERVER"
sServer = sSQLServer
End If
ParseCommandLine = True
Else
ParseCommandLine = False
End If
End Function