Solved

Using InnnerHTML problem

Posted on 2009-05-03
7
272 Views
Last Modified: 2012-08-30
Guys, im stumped on this.
Im trying to use InnertHTML but im sure there is a problem:

Line 53:
Unknown runtime error.

Any help greatly appreciated.
<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 Harding  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">
 

Sub GetServicePack
 

Set objFSO = CreateObject("Scripting.FileSystemObject")

Const intForReading = 1

strComputersFile = "servers.txt"

Set objComputers = objFSO.OpenTextFile(strComputersFile, intForReading, False)
 

DataArea.InnerHTML = "<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>"
 

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

 

 		DataArea.InnerHTML =  "<tr><td>" & strComputer & "</td><td>" & strSpack & "</td></tr>"

	Else
 

		DataArea.InnerHTML =  "<tr><td>" & strComputer & "</td><td style='background:black;'>" & "<font color='red'>Unreachable</font>" & "</td></tr>"
 

        End If

 

  

Wend
 

objComputers.Close

DataArea.InnerHTML =  "</table></center>"
 

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>

<span id=DataArea>This is a span area named DataArea</span>

<input id=getsp  class="button" type="button" value="Get Service Pack" name="getsp_button"  onClick="GetServicePack">

</body>

</html>

Open in new window

0
Comment
Question by:Simon336697
  • 4
  • 2
7 Comments
 
LVL 16

Assisted Solution

by:Peter Kwan
Peter Kwan earned 110 total points
Comment Utility
I found that in Line 53, the line ends with a character & and the remaining of the line starts at line 55, which is not allowed. In case you have multiple lines, you need to
add an underscore character "_" (without quotes) afterwards like this:
<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 Harding  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">

 

Sub GetServicePack

 

Set objFSO = CreateObject("Scripting.FileSystemObject")

Const intForReading = 1

strComputersFile = "servers.txt"

Set objComputers = objFSO.OpenTextFile(strComputersFile, intForReading, False)

 

DataArea.InnerHTML = "<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>"

 

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

 

                DataArea.InnerHTML =  "<tr><td>" & strComputer & "</td><td>" & strSpack & "</td></tr>"

        Else

 

                DataArea.InnerHTML =  "<tr><td>" & strComputer & "</td><td style='background:black;'>" & "<font color='red'>Unreachable</font>" & "</td></tr>"

 

        End If

 

  

Wend

 

objComputers.Close

DataArea.InnerHTML =  "</table></center>"

 

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>

<span id=DataArea>This is a span area named DataArea</span>

<input id=getsp  class="button" type="button" value="Get Service Pack" name="getsp_button"  onClick="GetServicePack">

</body>

</html>

Open in new window

0
 
LVL 1

Author Comment

by:Simon336697
Comment Utility
Hi pkwan, thanks so much for your help.
pk, im still getting a runtime error on line 53.
It looks like the DataArea.InnerHTML might be the problem? Just cant figure it out <:(
0
 
LVL 10

Accepted Solution

by:
TakedaT earned 390 total points
Comment Utility
I got it to work.  I rearranged it a lot.  It didnt seem to like the <center> tag where it was.  I also had it write everything to a string first, then when its done, it displays the string in the innerhtml part (may take some time depending on how long your list of computers is).  I dont have too much experience with hta's (my html skill is weak), but from what I know, its better to make a string then do the string in one shot.
<!-------------------------------------------------------------------------

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"

>
 
 
 
 

</head>

<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>
 
 
 

<script language="VBScript">
 

Sub GetServicePack
 

	Set objFSO = CreateObject("Scripting.FileSystemObject")

	Const intForReading = 1

	strComputersFile = "servers.txt"

	Set objComputers = objFSO.OpenTextFile(strComputersFile, intForReading, False)

	strHTML = "<table width='40%' border=1 bgcolor='white'><th style='background:c0c0c0'>" & "<b>System</b>" & "</th><th style='background:c0c0c0'>" & _

	"<b>Service Pack</b>"

	DataArea.InnerHTML = strHTML

	

	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

			

			strHTML =  strHTML&"<tr><td><center>" & strComputer & "</td><td><center>" & strSpack

		Else

			

			strHTML =  strHTML&"<tr><td><center>" & strComputer & "</td><td style='background:black;'><center>" & "<font color='red'>Unreachable</font>"

			

		End If

	Wend

	

	objComputers.Close

	DataArea.InnerHTML =  strHTML&"</table>"
 

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>

<body>
 

<p><h2 align=center><font color=red>Service Pack Information</font></h2>

<div align=right>S Harding  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>

<span id=DataArea>This is a span area named DataArea</span><br>

<input id=getsp  class="button" type="button" value="Get Service Pack" name="getsp_button"  onClick="GetServicePack">

</body>

Open in new window

0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 1

Author Comment

by:Simon336697
Comment Utility
TakedaT THAT IS BRILLIANT BRILLIANT that works!
Thank you so much mate.
pkwan youre a champion too.
I am in awe of your guy's knowledege and cannot thank you both enough :>)
0
 
LVL 1

Author Comment

by:Simon336697
Comment Utility
TakedaT i hope you dont mind me asking 1 final question about this.
What you have done is excellent.
Is there a way to slightly modify your code so that:

1) Instead of hardcoding the text file

strComputersFile = "servers.txt"  (line 46)

2) You can create a browse button, and point to a text file of your choice?

So, instead of hardcoding

strComputersFile = "servers.txt"

You would have something like:

Please select a file to process ___________  <Browse>

Then the script would process that chosen file instead?

You are fantastic guys.
0
 
LVL 10

Expert Comment

by:TakedaT
Comment Utility
Here you go.  Now, this will ONLY work in windows XP.  You will get errors on other operating systems if you try to run it.  Even on this pc im on now wont run it (vista).
<!-------------------------------------------------------------------------

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"

>
 

</head>

<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>
 

<script language="VBScript">

 

Sub GetServicePack

	currentDir = right(location.pathname,instrrev(location.pathname,"\"))

	Set objDialog = CreateObject("UserAccounts.CommonDialog")

	objDialog.Filter = "Text Files|*.txt|All Files|*.*"

	objDialog.FilterIndex = 1

	objDialog.InitialDir = currentDir

	intResult = objDialog.ShowOpen

	If intResult = 0 Then

		MsgBox "Failed to open a file"

		window.close

	End If

	strComputersFile = objDialog.FIlename

	Set objFSO = CreateObject("Scripting.FileSystemObject")

	Const intForReading = 1
 

	Set objComputers = objFSO.OpenTextFile(strComputersFile, intForReading, False)

	strHTML = "<table width='40%' border=1 bgcolor='white'><th style='background:c0c0c0'>" & "<b>System</b>" & "</th><th style='background:c0c0c0'>" & _

	"<b>Service Pack</b>"

	DataArea.InnerHTML = strHTML

	

	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

			

			strHTML =  strHTML&"<tr><td><center>" & strComputer & "</td><td><center>" & strSpack

		Else

			

			strHTML =  strHTML&"<tr><td><center>" & strComputer & "</td><td style='background:black;'><center>" & "<font color='red'>Unreachable</font>"

			

		End If

	Wend

	

	objComputers.Close

	DataArea.InnerHTML =  strHTML&"</table>"

 

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>

<body>

 

<p><h2 align=center><font color=red>Service Pack Information</font></h2>

<div align=right>S Harding  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>

<span id=DataArea>This is a span area named DataArea</span><br>

<input id=getsp  class="button" type="button" value="Get Service Pack" name="getsp_button"  onClick="GetServicePack">

</body>

Open in new window

0
 
LVL 1

Author Comment

by:Simon336697
Comment Utility
Hi TakedaT, youre a genius.

Those new lines you added.....if you wanted to create a new button to click so that this new button would prompt you for a text file, could you do that?
So, you would have:


<Click to point to a filename>
<Click to Get Service Pack>
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

This is an addendum to the following article: Acitve Directory based Outlook Signature (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_24950055.html) The script is fine, and works in normal client-server domains…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now