Your question, your audience. Choose who sees your identity—and your question—with question security.
============================== get_service_pack.hta
<html>
<!-------------------------------------------------------------------------
Get the Service Pack of a list of systems from servfers.txt
---------------------------------------------------------------------------->
<head>
<title>Service Pack Information</title>
<HTA:APPLICATION ID="oHTA"
APPLICATIONNAME="Service Pack Information"
SINGLEINSTANCE="yes"
NAVIGABLE="yes"
>
<style type="text/css">
html {
font-family:arial;
font-size:smaller;
}
table {
border-collapse:collapse;
border:solid 1px black;
font-family:arial;
font-size:0.8em;
}
tr, td {
border:solid 1px black;
}
</style>
</head>
<body>
<p><h2 align=center><font color=red>Service Pack Information</font></h2>
<div align=right>S Test 04/05/2009</div><hr size=1>
This hta application uses VBScript and WMI to enumerate the service pack for systems in a text file.<p>
<script language="VBScript">
'This will open the current document for writing to:
Sub GetServicePack
'document.open
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const intForReading = 1
strComputersFile = "servers.txt"
Set objComputers = objFSO.OpenTextFile(strComputersFile, intForReading, False)
document.writeln "<center><table width='40%' border=1 bgcolor='white'><tr><td style='background:c0c0c0'>" & "<b>System</b>" & "</td><td style='background:c0c0c0'>" & "<b>Service
Pack</b>" & "</td></tr>"
'document.writeln "<center><table border=1 bgcolor='c0c0c0'>"
While Not objComputers.AtEndOfStream
strComputer = objComputers.ReadLine
'If you can connect to the machine, then get the Service pack:
If Ping(strComputer) = True Then
On Error Resume Next
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
If Err.Number = 0 Then On Error GoTo 0
'Get Service Pack:
'-----------------------------------------------------
Set colSpack = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objSpack in colSpack
strSpack = objSpack.ServicePackMajorVersion
Next
document.writeln "<tr><td>" & strComputer & "</td><td>" & strSpack & "</td></tr>"
Else
document.writeln "<tr><td>" & strComputer & "</td><td style='background:black;'>" & "<font color='red'>Unreachable</font>" & "</td></tr>"
'document.writeln strComputer & vbTab & vbTab & "Unreachable"
End If
Wend
objComputers.Close
document.writeln "</table></center>"
document.close
End Sub
Function Ping(strComputer)
Dim objShell, boolCode
Set objShell = CreateObject("WScript.Shell")
boolCode = objShell.Run("Ping -n 1 -w 300 " & strComputer, 0, True)
If boolCode = 0 Then
Ping = True
Else
Ping = False
End If
End Function
</script>
<input id=getsp class="button" type="button" value="Get Service Pack" name="getsp_button" onClick="GetServicePack">
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Computer Inventory Tool</title>
<script language="vbscript">
Sub btnOK_onClick
Dim arrComputers, strComputer, objWMIService, colItems, objItem, strHTML
'get the computer names into a string
'and split it into an array
arrComputers = Split(txtComputers.InnerText,vbcrlf)
'create the starting HTML
strHTML = "<table border=1>" & VbCrLf
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>Computer</td>" & VbCrLf
If chkBuild.value = "ON" Then
strHTML = strHTML & "<td>Build</td>" & VbCrLf
End If
If chkServicePack.value = "ON" Then
strHTML = strHTML & "<td>Service Pack</td>" & VbCrLf
End If
If chkVersion.value = "ON" Then
strHTML = strHTML & "<td>Version</td>" & VbCrLf
End If
If chkSerialNumber.value = "ON" Then
strHTML = strHTML & "<td>Serial Number</td>" & VbCrLf
End If
'read through the array
For Each strComputer In arrComputers
'add a table row to the HTML
strHTML = strHTML & "<tr>" & VbCrLf
'query the computer
On Error Resume Next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & _
"\root\cimv2")
If Err = 0 Then
'no error connecting - query the info
Set colItems = objWMIService.ExecQuery("SELECT * " & _
"FROM Win32_OperatingSystem")
'build the output HTML cells
For Each objItem In colItems
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
If chkBuild.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.BuildNumber & "</td>" & VbCrLf
End If
If chkServicePack.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.ServicePackMajorVersion & "</td>" & VbCrLf
End If
If chkVersion.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.Version & "</td>" & VbCrLf
End If
If chkSerialNumber.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.SerialNumber & "</td>" & VbCrLf
End If
Next
'finish the HTML row
strHTML = strHTML & "</tr>"
Else
'error connecting
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
strHTML = strHTML & "<td>?</td>" & VbCrLf
strHTML = strHTML & "</tr>" & VbCrLf
End If
On Error GoTo 0
Next
'close the table
strHTML = strHTML & "</table>" & VbCrLf
'display the table
DisplayOutputInIE(strHTML)
End Sub
Sub DisplayOutputInIE(strHTML)
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "about:blank"
objIE.Document.body.innerhtml = strHTML
objIE.Visible = True
End Sub
Sub btnLoadFromFile_onClick()
Dim objFSO, objTS, strFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFile = InputBox("Path and filename to load?")
If objFSO.FileExists(strFile) Then
Set objTS = objFSO.OpenTextFile(strFile)
txtComputers.innerText = objTS.ReadAll
objTS.Close
Else
MsgBox("File does not exist.")
End If
End Sub
</script>
<hta:application>
</head>
<body>
<p align="center"><b>Computer Inventory Tool</b></p>
<p align="left">Inventory the following computers (one per line):<br>
<textarea id="txtComputers" rows="4" name="txtComputers" cols="40"></textarea><input type="button" value="Load From File" id="btnLoadFromFile" name="btnLoadFromFile"></p>
<p align="left">Inventory this information:<br>
<input type="checkbox" id="chkServicePack" name="chkServicePack" value="ON">Service pack major
version<br>
<input type="checkbox" id="chkBuild" name="chkBuild" value="ON">Windows build<br>
<input type="checkbox" id="chkVersion" name="chkVersion" value="ON">Version<br>
<input type="checkbox" id="chkSerialNumber" name="chkSerialNumber" value="ON">Serial number</p>
<p align="left"><input id="btnOK" type="button" value="OK" name="btnOK"></p>
</body>
</html>
<!--Script Settings
<ScriptSettings xmlns="http://tempuri.org/ScriptSettings.xsd">
<ScriptPackager>
<process />
<arguments />
<extractdir>%TEMP%</extractdir>
<files />
<usedefaulticon>true</usedefaulticon>
<showinsystray>false</showinsystray>
<altcreds>false</altcreds>
<efs>true</efs>
<ntfs>true</ntfs>
<local>false</local>
<abortonfail>true</abortonfail>
<product />
<version>1.0.0.1</version>
<versionstring />
<comments />
<includeinterpreter>false</includeinterpreter>
<forcecomregistration>false</forcecomregistration>
<consolemode>false</consolemode>
<EnableChangelog>false</EnableChangelog>
<AutoBackup>false</AutoBackup>
<snapinforce>false</snapinforce>
<snapinshowprogress>false</snapinshowprogress>
<snapinautoadd>0</snapinautoadd>
<snapinpermanentpath />
</ScriptPackager>
</ScriptSettings>
endregion-->
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Computer Inventory Tool</title>
<script language="vbscript">
Sub btnOK_onClick
Dim arrComputers, strComputer, objWMIService, colItems, objItem, strHTML
'get the computer names into a string
'and split it into an array
arrComputers = Split(txtComputers.InnerText,vbcrlf)
'create the starting HTML
strHTML = "<table border=1>" & VbCrLf
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>Computer</td>" & VbCrLf
If chkBuild.value = "ON" Then
strHTML = strHTML & "<td>Build</td>" & VbCrLf
End If
If chkServicePack.value = "ON" Then
strHTML = strHTML & "<td>Service Pack</td>" & VbCrLf
End If
If chkVersion.value = "ON" Then
strHTML = strHTML & "<td>Version</td>" & VbCrLf
End If
If chkSerialNumber.value = "ON" Then
strHTML = strHTML & "<td>Serial Number</td>" & VbCrLf
End If
'read through the array
For Each strComputer In arrComputers
'add a table row to the HTML
strHTML = strHTML & "<tr>" & VbCrLf
'query the computer
On Error Resume Next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & _
"\root\cimv2")
If Err = 0 Then
'no error connecting - query the info
Set colItems = objWMIService.ExecQuery("SELECT * " & _
"FROM Win32_OperatingSystem")
'build the output HTML cells
For Each objItem In colItems
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
If chkBuild.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.BuildNumber & "</td>" & VbCrLf
End If
If chkServicePack.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.ServicePackMajorVersion & "</td>" & VbCrLf
End If
If chkVersion.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.Version & "</td>" & VbCrLf
End If
If chkSerialNumber.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.SerialNumber & "</td>" & VbCrLf
End If
Next
'finish the HTML row
strHTML = strHTML & "</tr>"
Else
'error connecting
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
strHTML = strHTML & "<td>?</td>" & VbCrLf
strHTML = strHTML & "</tr>" & VbCrLf
End If
On Error GoTo 0
Next
'close the table
strHTML = strHTML & "</table>" & VbCrLf
'display the table
'DisplayOutputInIE(strHTML)
DataArea.InnerHTML = strHTML
End Sub
Sub DisplayOutputInIE(strHTML)
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "about:blank"
objIE.Document.body.innerhtml = strHTML
objIE.Visible = True
End Sub
Sub btnLoadFromFile_onClick()
Dim objFSO, objTS, strFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFile = InputBox("Path and filename to load?")
If objFSO.FileExists(strFile) Then
Set objTS = objFSO.OpenTextFile(strFile)
txtComputers.innerText = objTS.ReadAll
objTS.Close
Else
MsgBox("File does not exist.")
End If
End Sub
</script>
<hta:application>
</head>
<body>
<p align="center"><b>Computer Inventory Tool</b></p>
<p align="left">Inventory the following computers (one per line):<br>
<textarea id="txtComputers" rows="4" name="txtComputers" cols="40"></textarea><input type="button" value="Load From File" id="btnLoadFromFile" name="btnLoadFromFile"></p>
<p align="left">Inventory this information:<br>
<input type="checkbox" id="chkServicePack" name="chkServicePack" value="ON">Service pack major
version<br>
<input type="checkbox" id="chkBuild" name="chkBuild" value="ON">Windows build<br>
<input type="checkbox" id="chkVersion" name="chkVersion" value="ON">Version<br>
<input type="checkbox" id="chkSerialNumber" name="chkSerialNumber" value="ON">Serial number</p>
<p align="left"><input id="btnOK" type="button" value="OK" name="btnOK"></p>
<span id=DataArea></span>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Computer Inventory Tool</title>
<script language="vbscript">
Sub btnOK_onClick
Dim arrComputers, strComputer, objWMIService, colItems, objItem, strHTML
'get the computer names into a string
'and split it into an array
arrComputers = Split(txtComputers.InnerText,vbcrlf)
'create the starting HTML
strHTML = "<table border=1>" & VbCrLf
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>Computer</td>" & VbCrLf
If chkBuild.value = "ON" Then
strHTML = strHTML & "<td>Build</td>" & VbCrLf
End If
If chkServicePack.value = "ON" Then
strHTML = strHTML & "<td>Service Pack</td>" & VbCrLf
End If
If chkVersion.value = "ON" Then
strHTML = strHTML & "<td>Version</td>" & VbCrLf
End If
If chkSerialNumber.value = "ON" Then
strHTML = strHTML & "<td>Serial Number</td>" & VbCrLf
End If
'read through the array
For Each strComputer In arrComputers
'add a table row to the HTML
strHTML = strHTML & "<tr>" & VbCrLf
'query the computer
On Error Resume Next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & _
"\root\cimv2")
If Err = 0 Then
'no error connecting - query the info
Set colItems = objWMIService.ExecQuery("SELECT * " & _
"FROM Win32_OperatingSystem")
'build the output HTML cells
For Each objItem In colItems
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
If chkBuild.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.BuildNumber & "</td>" & VbCrLf
End If
If chkServicePack.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.ServicePackMajorVersion & "</td>" & VbCrLf
End If
If chkVersion.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.Version & "</td>" & VbCrLf
End If
If chkSerialNumber.value = "ON" Then
strHTML = strHTML & "<td>" & objItem.SerialNumber & "</td>" & VbCrLf
End If
Next
'finish the HTML row
strHTML = strHTML & "</tr>"
Else
'error connecting
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
strHTML = strHTML & "<td>?</td>" & VbCrLf
strHTML = strHTML & "</tr>" & VbCrLf
End If
On Error GoTo 0
Next
'close the table
strHTML = strHTML & "</table>" & VbCrLf
'display the table
'DisplayOutputInIE(strHTML)
DataArea.InnerHTML = strHTML
End Sub
Sub DisplayOutputInIE(strHTML)
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "about:blank"
objIE.Document.body.innerhtml = strHTML
objIE.Visible = True
End Sub
Sub btnLoadFromFile_onClick()
Dim objFSO, objTS, strFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFile = InputBox("Path and filename to load?")
If objFSO.FileExists(strFile) Then
Set objTS = objFSO.OpenTextFile(strFile)
txtComputers.innerText = objTS.ReadAll
objTS.Close
Else
MsgBox("File does not exist.")
End If
End Sub
</script>
<hta:application>
</head>
<body>
<p align="center"><b>Computer Inventory Tool</b></p>
<p align="left">Inventory the following computers (one per line):<br>
<textarea id="txtComputers" rows="4" name="txtComputers" cols="40"></textarea><input type="button" value="Load From File" id="btnLoadFromFile" name="btnLoadFromFile"></p>
<p align="left">Inventory this information:<br>
<input type="checkbox" id="chkServicePack" name="chkServicePack" value="ON">Service pack major
version<br>
<input type="checkbox" id="chkBuild" name="chkBuild" value="ON">Windows build<br>
<input type="checkbox" id="chkVersion" name="chkVersion" value="ON">Version<br>
<input type="checkbox" id="chkSerialNumber" name="chkSerialNumber" value="ON">Serial number</p>
<p align="left"><input id="btnOK" type="button" value="OK" name="btnOK"></p>
<span id=DataArea></span>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Computer Inventory Tool</title>
<script language="vbscript">
Sub btnOK_onClick
Dim arrComputers, strComputer, objWMIService, colItems, objItem, strHTML
'get the computer names into a string
'and split it into an array
arrComputers = Split(txtComputers.InnerText,vbcrlf)
'create the starting HTML
strHTML = "<table border=1>" & VbCrLf
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>Computer</td>" & VbCrLf
If chkBuild.Checked Then
strHTML = strHTML & "<td>Build</td>" & VbCrLf
End If
If chkServicePack.Checked Then
strHTML = strHTML & "<td>Service Pack</td>" & VbCrLf
End If
If chkVersion.Checked Then
strHTML = strHTML & "<td>Version</td>" & VbCrLf
End If
If chkSerialNumber.Checked Then
strHTML = strHTML & "<td>Serial Number</td>" & VbCrLf
End If
'read through the array
For Each strComputer In arrComputers
'add a table row to the HTML
strHTML = strHTML & "<tr>" & VbCrLf
'query the computer
On Error Resume Next
Set objWMIService = GetObject("winmgmts:\\" & strComputer & _
"\root\cimv2")
If Err = 0 Then
'no error connecting - query the info
Set colItems = objWMIService.ExecQuery("SELECT * " & _
"FROM Win32_OperatingSystem")
'build the output HTML cells
For Each objItem In colItems
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
If chkBuild.Checked Then
strHTML = strHTML & "<td>" & objItem.BuildNumber & "</td>" & VbCrLf
End If
If chkServicePack.Checked Then
strHTML = strHTML & "<td>" & objItem.ServicePackMajorVersion & "</td>" & VbCrLf
End If
If chkVersion.Checked Then
strHTML = strHTML & "<td>" & objItem.Version & "</td>" & VbCrLf
End If
If chkSerialNumber.Checked Then
strHTML = strHTML & "<td>" & objItem.SerialNumber & "</td>" & VbCrLf
End If
Next
'finish the HTML row
strHTML = strHTML & "</tr>"
Else
'error connecting
strHTML = strHTML & "<tr>" & VbCrLf
strHTML = strHTML & "<td>" & strComputer & "</td>" & VbCrLf
strHTML = strHTML & "<td>?</td>" & VbCrLf
strHTML = strHTML & "</tr>" & VbCrLf
End If
On Error GoTo 0
Next
'close the table
strHTML = strHTML & "</table>" & VbCrLf
'display the table
'DisplayOutputInIE(strHTML)
DataArea.InnerHTML = strHTML
End Sub
Sub DisplayOutputInIE(strHTML)
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "about:blank"
objIE.Document.body.innerhtml = strHTML
objIE.Visible = True
End Sub
Sub btnLoadFromFile_onClick()
Dim objFSO, objTS, strFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFile = InputBox("Path and filename to load?")
If objFSO.FileExists(strFile) Then
Set objTS = objFSO.OpenTextFile(strFile)
txtComputers.innerText = objTS.ReadAll
objTS.Close
Else
MsgBox("File does not exist.")
End If
End Sub
</script>
<hta:application>
</head>
<body>
<p align="center"><b>Computer Inventory Tool</b></p>
<p align="left">Inventory the following computers (one per line):<br>
<textarea id="txtComputers" rows="4" name="txtComputers" cols="40"></textarea><input type="button" value="Load From File" id="btnLoadFromFile" name="btnLoadFromFile"></p>
<p align="left">Inventory this information:<br>
<input type="checkbox" id="chkServicePack" name="chkServicePack" value="ON">Service pack major
version<br>
<input type="checkbox" id="chkBuild" name="chkBuild" value="ON">Windows build<br>
<input type="checkbox" id="chkVersion" name="chkVersion" value="ON">Version<br>
<input type="checkbox" id="chkSerialNumber" name="chkSerialNumber" value="ON">Serial number</p>
<p align="left"><input id="btnOK" type="button" value="OK" name="btnOK"></p>
<span id=DataArea></span>
</body>
</html>
Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.
Have a better answer? Share it in a comment.
Join the community of 500,000 technology professionals and ask your questions.