VBScript – Do…Loop Until

Introduction to Do…Loop Until

‘Best Practice’ dictates that we should take steps to control errors.  Another reason for error handling is that it saves time troubleshooting when you can narrow down the problem to one section of the script.  In practice you have three, choices, write a statement that says ignore errors and carry on processing, allow errors to surface naturally, or add error handling statements (best), which will give you valuable information on where in the script the error is arising.

Do…Loop – Introducing the Family

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.  However it is their attitude is that 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.

Do…Loop Examples

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.

 

Example 1 – Simple Do…Loop Until

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?

‘ VBScript   Very simple Do… Loop Until
‘ Guy Thomas January 2004

Option Explicit
DIM inti, intx

inti = 0
DO

inti = inti + 1
intx = intx + inti

Loop Until inti = 7

WScript.Echo " Sum of 1 to " & inti & " = " & intx
Wscript.Quit
 

Learning Points

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.

See PowerShell loop script

Guy Recommends: Permissions Analyzer – Free Active Directory ToolFree Permissions Analyzer for Active Directory

I like thePermissions Monitor because it enables me to see quickly WHO has permissions to do WHAT.  When you launch this tool it analyzes a users effective NTFS permissions for a specific file or folder, takes into account network share access, then displays the results in a nifty desktop dashboard!

Think of all the frustration that this free utility saves when you are troubleshooting authorization problems for users access to a resource.  Give this permissions monitor a try – it’s free!

Download Permissions Analyser – Free Active Directory Tool

Example 2 – To add a ‘Description’ to a users property

Instructions. 

  1. Warning this script will alter the users description.
  2. As usual, copy and paste into notepad and save as a .vbs.  You will need a domain to get this script to work. 
  3. You must change line 21 for the VBScript to work in your domain.  Find then alter:  ou=Worcester, dc=cp,dc=com.  I also suggest that you create an OU and test user as necessary.
  4. Go to Active Directory Users and Computers, User, Property, then you will see what changes your script has made.

‘ VBScript
‘ Guy Thomas January 2004
‘ WARNING – I am not a great one for disclaimers, but
‘ watch out! This script WILL CHANGE your Users Properties
‘ Modifying the DESCRIPTION property of Multiple Users
‘ Note best to choose a test OU with a test user (To begin with)
‘ Check the User’s Property Tab : Description

Option Explicit
DIM objConnection, objCommand, objRecordSet, objUser
DIM strChange, strADsPath, strProperty
strProperty = "Description"
strChange ="Hot Shot Professional"

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection

objCommand.CommandText = _
"<LDAP://ou=Worcester, dc=cp,dc=com>;" & _
"(&(objectCategory=person)(objectClass=user));" & _
"ADsPath;subtree"

Set objRecordSet = objCommand.Execute

DO
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
objUser.Put strProperty, strChange
objUser.SetInfo
objRecordset.MoveNext

Loop Until objRecordset.EOF

Wscript.Echo objRecordSet.RecordCount & _
" User accounts " & strProperty & " changed to " & strChange

objConnection.Close
Wscript.quit

 

Learning Points

Note 1:  Sorry for repeating the warning, but this script will alter your users properties.  However, I have chosen an 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"

Download your eBook: Creating Exchange mailboxes with VBScript- only $6.25

Creating Exchange mailboxes with VBScriptCreate mailbox-enabled users.  Add mailboxes to existing users in Active Directory.   Step-by-step instructions on how to use VBScript to generate users with mailboxes.  Combine VBScripts with CSVDE to import users from spreadsheets.

You get a printer friendly version with copy enabled, and no expiry date.  It runs to 55 A4 pages.

 

 


See Also