Solved

Microsoft VBScript compilation error: Unexpected 'Next'

Posted on 2009-04-01
15
1,184 Views
Last Modified: 2012-05-06
Created a script that is to poll a text file and make registry changes to each server on the list. I have tried a few variations on it and all of them error out.
On error resume next

Dim WshShell

Set WshShell = CreateObject("WScript.Shell")

Set objFSO=CreateObject("Scripting.FileSystemObject")

objInput=Split(objFSO.OpenTextFile("server.txt").ReadAll, vbCrLf)
 

strBITSKey = "\HKLM\System\CurrentControlSet\Services\BITS /v Start "

strWUKey = "\HKLM\System\CurrentControlSet\Services\wuauserv /v Start "

strWUConfig = "\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v WUServer "

strPolicies = "\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v "
 

For each strComputer in objInput

  With Wscript

    .Echo "reg add \\" & strComputer & strBITSKey & "/d 2 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strWUKey & "/d 2 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strWUConfig & "/d http://par1fpwsus.ad.adp.com"

    .Echo "reg add \\" & strComputer & Replace(strWUConfig, "WUServer", "WUStatusServer") & " /d http://par1fpwsus"

    .Echo "reg add \\" & strComputer & strPolicies & "NoAutoUpdate /d 0 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "UseWUServer /d 1 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "RescheduleWaitTime /d 1 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "NoAutoRebootWithLoggedOnUsers /d /f 0 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "AUOptions /d 4 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "ScheduledInstallDay /d 0 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "ScheduledInstallTime /d 5 /t REG_DWORD"

  End With

  If Trim(strComputer) <> "" Then

  Set objWMIService = GetObject("winmgmts:\\{impersonationLevel=impersonate}!" & strComputer & "\root\cimv2")

  ErrorHandler

  Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='BITS' or Name='wuauserv'")

  ErrorHandler

  For Each objService In colServiceList

  Wscript.Echo "Server: " & strComputer & "          Service Name: " & objService.Name

  Next

Next
 

Set objInput=Nothing

Set objFSO=Nothing

Set WshShell=Nothing
 

'Error Handler

Sub ErrorHandler

If Err.Number <> 0 Then

  Select Case Hex(Err.Number)

     Case "1CE"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". The remote server machine does not exist or is unavailable."

     Case "46"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Access denied."

     Case "1A8"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Unable to access registry value."

     Case "80041003"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Unable to find registry key or value."

     Case Else

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". An unkown error occurred."

  End Select

  Err.Clear

End If

End Sub

Open in new window

WSUS.txt
0
Comment
Question by:SeanHenry
  • 6
  • 5
  • 3
15 Comments
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 24040514
You appear to be missing an End If somewhere in this block:
  If Trim(strComputer) <> "" Then     '<-- there is not matching End If

  Set objWMIService = GetObject("winmgmts:\\{impersonationLevel=impersonate}!" & strComputer & "\root\cimv2")

  ErrorHandler

  Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='BITS' or Name='wuauserv'")

  ErrorHandler

  For Each objService In colServiceList

  Wscript.Echo "Server: " & strComputer & "          Service Name: " & objService.Name

  Next

Open in new window

0
 
LVL 67

Expert Comment

by:sirbounty
ID: 24040534
It's actually missing an "End If", presumably on line 35 - if that's where you want the if block to end...
0
 

Author Comment

by:SeanHenry
ID: 24040644
I made that change but now I get a syntax error for Sub ErrorHandler.
'Error Handler

Sub ErrorHandler

If Err.Number <> 0 Then

  Select Case Hex(Err.Number)

     Case "1CE"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". The remote server machine does not exist or is unavailable."

     Case "46"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Access denied."

     Case "1A8"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Unable to access registry value."

     Case "80041003"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Unable to find registry key or value."

     Case Else

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". An unkown error occurred."

  End Select

  Err.Clear

End If

End Sub

Open in new window

0
 
LVL 67

Expert Comment

by:sirbounty
ID: 24040692
Helps  if you can state which line the error is on...nothing is standing out, but perhaps change Err.Clear to
On Error Goto 0
0
 

Author Comment

by:SeanHenry
ID: 24041123
Sorry line 2 is what PrimalScript is highlighting as a syntax error.
0
 
LVL 67

Expert Comment

by:sirbounty
ID: 24041165
code works for me...not sure what it is...
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 24041206
Works for me to in isolation. Perhaps it is a syntax error somewhere else that is causing the runtime to think the error is in the sub.

Can you post the code as you have it now?
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:SeanHenry
ID: 24041241
Here it is. It runs fin up until the Sub errorhandler....
Testv2.txt
0
 
LVL 52

Accepted Solution

by:
Carl Tawn earned 63 total points
ID: 24041298
Ok, you now appear to be missing a Next. You had two in the original version you posted, so i guess you removed one when you added the End If.

You need to put the Next back in for the outer loop.
0
 
LVL 67

Assisted Solution

by:sirbounty
sirbounty earned 62 total points
ID: 24041316
Ah - you're still missing a Next...try this:
On error resume next

Dim WshShell

Set WshShell = CreateObject("WScript.Shell")

Set objFSO=CreateObject("Scripting.FileSystemObject")

objInput=Split(objFSO.OpenTextFile("server.txt").ReadAll, vbCrLf)
 

strBITSKey = "\HKLM\System\CurrentControlSet\Services\BITS /v Start "

strWUKey = "\HKLM\System\CurrentControlSet\Services\wuauserv /v Start "

strWUConfig = "\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v WUServer "

strPolicies = "\HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v "
 

For each strComputer in objInput

  With Wscript

    .Echo "reg add \\" & strComputer & strBITSKey & "/d 2 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strWUKey & "/d 2 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strWUConfig & "/d http://par1fpwsus.ad.adp.com"

    .Echo "reg add \\" & strComputer & Replace(strWUConfig, "WUServer", "WUStatusServer") & " /d http://par1fpwsus"

    .Echo "reg add \\" & strComputer & strPolicies & "NoAutoUpdate /d 0 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "UseWUServer /d 1 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "RescheduleWaitTime /d 1 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "NoAutoRebootWithLoggedOnUsers /d /f 0 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "AUOptions /d 4 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "ScheduledInstallDay /d 0 /t REG_DWORD"

    .Echo "reg add \\" & strComputer & strPolicies & "ScheduledInstallTime /d 5 /t REG_DWORD"

  End With

  If Trim(strComputer) <> "" Then 

  Set objWMIService = GetObject("winmgmts:\\{impersonationLevel=impersonate}!" & strComputer & "\root\cimv2")

  ErrorHandler

  Set colServiceList = objWMIService.ExecQuery("Select * from Win32_Service where Name='BITS' or Name='wuauserv'")

  ErrorHandler

  For Each objService In colServiceList

  Wscript.Echo "Server: " & strComputer & "          Service Name: " & objService.Name

  Next

End If

Next
 

Set objInput=Nothing

Set objFSO=Nothing

Set WshShell=Nothing
 

'Error Handler

Sub ErrorHandler

If Err.Number <> 0 Then

  Select Case Hex(Err.Number)

     Case "1CE"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". The remote server machine does not exist or is unavailable."

     Case "46"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Access denied."

     Case "1A8"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Unable to access registry value."

     Case "80041003"

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". Unable to find registry key or value."

     Case Else

        Wscript.Echo "ERROR: Server " & strComputer & " encountered error " & Hex(Err.Number) & ". An unkown error occurred."

  End Select

  Err.Clear

End If

End Sub

Open in new window

0
 
LVL 67

Expert Comment

by:sirbounty
ID: 24043550
SeanHenry, with all due respect, carl_tawn was a few seconds ahead of me on nearly every post here.
I think he deserves most, if not all the points.  
I'd like to have this reopened for a fair allotment of points if you don't mind....
0
 

Author Comment

by:SeanHenry
ID: 24043665
How do I do that?
0
 

Author Closing Comment

by:SeanHenry
ID: 31565362
That was what I was missing. thanks.
0
 

Author Comment

by:SeanHenry
ID: 24043712
Got it thanks.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Welcome, welcome!  If you are new to the series and haven't been following along, please take a brief moment to review the first three installments: Part 1 (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/A_266-VBScri…
Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, just open a new email message. In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

867 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

22 Experts available now in Live!

Get 1:1 Help Now