• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1427
  • Last Modified:

Microsoft VBScript compilation error: Unexpected 'Next'

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
SeanHenry
Asked:
SeanHenry
  • 6
  • 5
  • 3
2 Solutions
 
Carl TawnSystems and Integration DeveloperCommented:
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
 
sirbountyCommented:
It's actually missing an "End If", presumably on line 35 - if that's where you want the if block to end...
0
 
SeanHenryAuthor Commented:
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
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
sirbountyCommented:
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
 
SeanHenryAuthor Commented:
Sorry line 2 is what PrimalScript is highlighting as a syntax error.
0
 
sirbountyCommented:
code works for me...not sure what it is...
0
 
Carl TawnSystems and Integration DeveloperCommented:
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
 
SeanHenryAuthor Commented:
Here it is. It runs fin up until the Sub errorhandler....
Testv2.txt
0
 
Carl TawnSystems and Integration DeveloperCommented:
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
 
sirbountyCommented:
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
 
sirbountyCommented:
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
 
SeanHenryAuthor Commented:
How do I do that?
0
 
SeanHenryAuthor Commented:
That was what I was missing. thanks.
0
 
SeanHenryAuthor Commented:
Got it thanks.
0
Question has a verified solution.

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 & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 6
  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now