I'm always amazed to observe how a
passion for technology often morphs
into a religion. An example of this phenomenon
is the various Perl and
VBScript scripting zealots. Each language
has its place, as do programming
languages such as C# and Visual
Basic .NET. However, drawing lines
between these languages is pointless
and nonproductive.
Rather than point out differences, I
want to show you how similar the
code can be among Perl, VBScript, C#,
and Visual Basic .NET. To do so, I'll
show you how to complete a simple
but important task—creating an
Active Directory (AD) user account—
in all four of those languages. (I've
opted not to show you how to display
Hello World on the console in all four
languages—a simple procedure but
one of the most overscrutinized programming
tasks.)
Defining Terms
Regardless of the language you
choose, creating an AD object—such
as a user account—involves the following
four steps:
- Connect to the AD container in
which you want to create the object.
- Create the object.
- Set any mandatory attributes that
AD doesn't set automatically.
- Save the object to AD.
You might be asking, "If that's all there
is to it, why have I seen code examples
for creating a user account that contain
300 or more lines of code?" You
need to be precise about the type of
code examples. Generally, you'll
encounter two types: those that are
instructive and those that show complete
solutions.
There's a big difference between
an instructive code example and a
complete code solution. A complete
code solution for creating user
accounts will contain error handling
(e.g., to check for an existing user
account before creating a new one),
console output, and perhaps other
procedures. For example, a complete
code solution might read from a
spreadsheet containing user account
information, then use that information
to generate user accounts. In contrast,
an instructive code example will show
only the essential steps necessary for
completing a task. An instructive code
example for creating an AD user
account will therefore contain only
four or five lines of code. Of course, this
distinction between a code solution
and a code example isn't limited to AD
user account creation. You can reduce
almost any systems administration
task to a few lines of code, regardless of
the language in which you write it.
Choosing Languages
To demonstrate the task of AD user
account creation, I chose two scripting
languages (VBScript and Perl) and
two programming languages (Visual
Basic .NET and C#). VBScript is
arguably the easiest language to
understand, and it's a language that
Microsoft fully supports for Windows
systems administration. Perl is a natural
choice because it's a pervasive
cross-platform scripting language that
many Windows administrators and
UNIX and Linux administrators use. I
chose Visual Basic .NET and C#
because they're both included with
the Windows .NET Framework and are
the most popular languages in the
Framework. In addition, if you're
familiar with Visual Basic (VB) or
VBScript, Visual Basic .NET is easy to
understand. If you're familiar with
JScript or Java, C# is easy to follow.
Putting It Simply
If you've never coded in any language
before, don't despair. You'll be surprised
by how easily you can program
in any of these languages when you isolate
a specific task from all the other
stuff that surrounds the code. Some
people might argue that this is an oversimplification
of scripting and development
in general. However, the key to
working with any technology discipline,
programming or otherwise, is
starting with simple examples that
demonstrate the completion of a basic
task. After you see how to apply a technology,
you're better prepared to dig
into the intricacies of a robust and
powerful discipline such as programming.
The code in Listing 1, Listing 2,
Listing 3, and Listing 4 performs the following
steps to create a user account:
- Connects to the TechWriters
organizational unit (OU) in the fabrikam.
com domain.
- Creates a user account named
Ken Myer.
- Sets the sAMAccountName mandatory
attribute to MyerKen.
- Saves the user account to the
TechWriters OU.
But don't try to run the code yet! You
must complete some preliminary
tasks. First, you need to configure
your client and server environment in
a specific way to run these examples.
Second, you must verify that the
underlying client infrastructure can
run the code. Third, except for VBScript,
you must add a line or two of
code to supplement the actual task
code. Let's walk through each step.
Configuring the Client and Server
To get started, you need to ensure that
your computer (the client) is a member
of an AD domain named fabrikam
.com with an OU named TechWriters.
Also, a user account with a sAMAccountName
of MyerKen must not
exist in the domain, and the Tech-
Writers OU must not contain a user
account with a CN value equal to Ken
Myer.
I could have made the examples
more dynamic, but doing so would
have added complexity to the code
examples, thus defeating the primary
purpose of this article—to create
instructional code examples. That
being said, you can modify the task
code that appears in the listings to
point to a different domain or to create
a user account with a different
name. Here are some examples of
changes you can make:
In line 1, change ou=TechWriters,
dc=fabrikam,dc=com to ou=HR,dc=
adatum,dc=com to connect to the
HR OU in the adatum.com
domain.
In line 2, change CN=Ken Myer to
CN=John Doe to use the name John
Doe instead of Ken Myer.
In line 3, change MyerKen to Doe-
John to specify a sAMAccountName
of DoeJohn instead of MyerKen.
Preparing the Scripting Environment
The scripting languages require a
scripting engine, language interpreters,
and COM objects to complete
tasks. Windows Script Host (WSH) is
the Windows scripting engine that lets
you run scripts. Even though Windows
2000 and later include WSH by default,
you should upgrade to WSH 5.6 for all
Windows platforms except Windows
Server 2003. Windows 2003 comes
with the most recent build of WSH 5.6.
You can find WSH 5.6 at http://
msdn.microsoft.com/scripting.