Contents of Guy’s Scripting Ezine No 14 – Do…Loop Until
Many VBScripts need an instruction that repeats the same sequence for multiple objects. For example, creating hundreds of computer accounts. The Do…Loop is my secret for telling the script to keep cycling through the same lines, until it reaches the end of the list. Perhaps you have already used ‘For…Next’ loops in other programming languages? In which case you will already have a good idea of what Do…Loop can achieve.
Guy Recommends: The Free IP Address Tracker (IPAT)
Calculating IP Address ranges is a black art, which many network managers solve by creating custom Excel spreadsheets. IPAT cracks this problem of allocating IP addresses in networks in two ways:
For Mr Organized there is a nifty subnet calculator, you enter the network address and the subnet mask, then IPAT works out the usable addresses and their ranges.
For Mr Lazy IPAT discovers and then displays the IP addresses of existing computers. Download the Free IP Address Tracker
I would like to introduce you to the family of Do …Loop commands
Do….Loop Until and its ‘brother’, Do….Until Loop
Do….Loop While and its ‘sister’, Do….While Loop
The job of this family is to cycle through repetitive tasks like adding users from rows in spreadsheets or reading through hundreds of objects in Active Directory.
This Do…Loop family operates by going through line after line of commands, then circling back to the beginning and repeating commands for the next item.
The secret of avoiding endless loops is having an effective command to stop. To halt the loop, you have a choice of two prepositions: Until or While. Both ‘Loop Until’ and ‘Loop While’ achieve the same goal – breaking the cycle. It is just that their attitude is different; ‘Do…Loop Until’, is adventurous, it keeps on going until stopped. On the other hand, ‘Do…Loop While’ is cautious, it only goes through the loop if the condition is met.
Another trade secret. I do not have the perfect Do…Loop example for Windows 2003. Instead I have two VBScripts, the first is ridiculously easy, but doesn’t do anything useful. The second example is powerful and interesting, but it is technically demanding.
Copy the VBScript below, then paste into notepad and save as a .vbs. Double click your .vbs file and see a message with the answer to the question: What is the sum of 1 to 7?
Note 1: inti is the counter; while intx is keeping the score.
Note 2: With each loop, the script adds another number to the sequence 1+2+3+4+5+6+7
Note 3: Beware, as with all Loop scripts, they must have a break statement. Loop until inti = 7 is our command to break the loop.
Note 4: In the WScript.Echo statement I have added the two variables inti and intx. My reasoning is this, if you do change Line 13: Loop Until inti = 7 to Loop Until inti = 10, then you still get a meaningful message.
Set objConnection = CreateObject("ADODB.Connection")
objCommand.CommandText = _
Set objRecordSet = objCommand.Execute
Loop Until objRecordset.EOF
Wscript.Echo objRecordSet.RecordCount & _
Note 1: Sorry for repeating the warning, but this script will alter your users properties. However, I have chosen a relatively harmless property = description.
Note 2: By introducing the variable strChange it makes it a little easier for you to edit the actual comment; it also makes it a lot easier to display what the script did in the message box.
Note 3: Here is my challenge to you; carefully select another User Property, then change the strProperty. Example strProperty = "Office"
Method use: changetype: modify
Even if you cannot get the ‘unicodePwd’ to work, you can at least master the changetype: modify. Another bonus of doing this exercise is that you will learn the strange syntax of the – (dash).
Note if there is no – (Dash) on the last line, this is the error you get.
There is a syntax error in the input file
The disadvantage of LDIFDE is that it does not ‘feed off’ spreadsheets, and I find the format a bit clunky. See more about LDIFDE here.
All good scripter need a ‘Looping’ command in their repertoire. Here we investigate a simple loop to cut our teeth, then a more useful example to change attributes in Active Directory.
See more about VBScript