Scripting Guide For Windows Administrators: Click Here Join Our Downloads Discussion
Scripting Guide For Windows Administrators: Click Here Join Our Downloads Discussion
Windows administrators
Managing a Windows network can involve a lot of repetitive tasks, especially when that network includes
large numbers of users and desktops. One of the best ways to automate these tasks is through the use of
scripting. Windows includes two built-in methods of scripting: Windows shell scripting and VBS.
This compilation of articles by Allen V. Rouse introduces the role that scripts can play in Windows
networks, shows how to get started with both Windows shell scripting and VBS, walks through a few
advanced scripting techniques, and directs you to additional scripting resources.
Table of contents
Understand the role of scripting in network administration..............................2
Getting started with Windows scripting languages and platforms...................4
Windows shell scripting can expedite network admin tasks............................7
First steps in VBS scripting for administrators...............................................11
Improve administration by using the Shell and Network VBS objects...........12
Improve efficiency of admin scripts with programming constructs.................17
Beef up your admin scripts with these extra tools.........................................21
These resources can help you write admin scripts.......................................24
Listings.........................................................................................................26
What is scripting?
Simply stated, a script is a small, interpreted program that can carry out a series of tasks and make
decisions based on specific conditions it finds. By "interpreted," we mean that when it is run, it is carried
out one line at a time, as opposed to "compiled," which is the process of turning it into machine language
before it is run. A script is created using ASCII text, so Windows Notepad or a similar text editor is the
only tool required.
A number of scripting "languages" are available for you to choose from, each with its own capabilities
and limitations. These languages include Windows native shell scripting, Visual Basic Scripting Edition,
JavaScript, Kixtart, and Perl. Which one you choose will ultimately depend on a combination of the tasks
required and your own experience and inclinations.
Each scripting language has a collection of commands or keywords and a set of rules on how to use
them. The set of rules for writing a script in any given language is called the syntax. Once you learn the
keywords and syntax, you can use a text editor to write the script and then save it with a file extension
that is appropriate to the scripting language you are using. Some of the more common file extensions you
will see are .bat, .cmd, .vbs, .js, and .kix.
You could, for instance, map specific network drives when a user logs in and then automatically copy
that user's Favorites folder to a network share when he or she logs out so that the data is preserved in a
central location.
Shell scripting
A shell is nothing more than an interface that allows a user to communicate with, or issue commands
directly to, the operating system. The concept of a shell has been around in UNIX for many years. In fact,
there are several shells in the UNIX world, each with its own features and commands that make it suitable
for various tasks.
In Windows, there is no such diversity. You have only one shell, the Windows shell, which is built into
the operating system. And you are undoubtedly already familiar with the interface, although you probably
call it the command prompt or, if you're a real old-timer, perhaps the DOS prompt. Technically speaking,
it's called a command shell and is run by executing the file Cmd.exe, found in C:\Winnt\System32.
Probably the easiest way to run it is to simply click Start | Run, type cmd in the text box, and click OK, or
create a shortcut to Cmd.exe.
The Windows shell comes with a set of built-in commands, many of which are well known and
commonly used, such as dir, copy, del, cd, etc. Commands and their associated parameters are usually
issued one at a time at the command line. More important for our purposes is the fact that commands can
also be used in a batch mode. That is, using a text editor, you can write a separate command on each
line, saving the finished product with the extension of either .bat or .cmd. This turns the text file into an
executable that will be run as an interpreted program, carrying out each command one line at a time, in
order. This is what we call shell scripting.
Although the Windows scripting language is far from being a full-scale programming language, it does
come with some useful commands and features that allow it to have some of the flexibility you'd expect to
find in a program. Some of these features are:
Conditional processing
You can have your script test to see whether a certain condition exists, and if it does, do one thing, and if
it doesn't, do something else.
Error trapping
Every time a command is carried out, Windows generates an error level, with error level 0 being "no
error." This allows you to include a provision in your script to gracefully exit from an error it might
encounter.
System variables
Information about a given computer and the user who is logged on to that computer can be found in the
registry, at HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER. Some of that information, which
can be of use in scripting, is available in the form of system variables.
To get an idea of what is available, you can open the command shell and type the command set. This
will display a list of all the system variables and their current values. These can then be referenced in a
script by bracketing them with the percent symbol. For instance, %username% will refer to the username
of whoever is currently logged on to the computer. An example of its use would be to copy the current
user's Favorites folder and all subfolders on the local machine to that user's home folder on the server:
xcopy %userprofile%\favorites \\fileserver\home\%username% /s/y
I will talk more about these features in a future article devoted to shell scripting basics. You'll find a
reference for all of the commands available for shell scripting in Windows Help. If you are using Windows
2000, click on Start | Help. In the Search tab, type command reference and click List Topics. Then, under
Select Topic To Display, double-click on the topic Windows 2000 Command Reference Main Page.
In Windows NT, click on Start | Help. In the Find Tab, type command. Then, in the Pick A Topic pane,
select Commands Index and click the Display button.
JScript
JScript is the Microsoft implementation of JavaScript. JScript and JavaScript are not subsets of the Java
programming language. However, like VBS, JScript is an object-based scripting language that can be
used to automate tasks for network administration.
You create a JScript file in the same way you create a VBS file, except that you must save it with the
file extension .js. The default icon for a JScript file looks just like the icon for a VBS file, except that the
VBS icon is blue and the JScript icon is yellow. You execute a JScript file in the same way you execute a
VBS file.
Logon scripts
Probably the most common use for shell scripting is logon scripts. A logon script is used to configure the
Windows environment for a user at the time of logon and is usually specific to a group of users. For
instance, members of the Finance group may automatically map network drives to the finance network
share folder, while the Marketing group may automatically map their network drives to the marketing
network share.
To make this work, a script is created for each user or group of users and then copied to the
appropriate server location (based on the version of Windows). In Windows NT, the script file is normally
placed in C:\Winnt\System 32\Repl\Export\Scripts (or Import, depending on how you have configured
replication). You then point to that file in the User Account Properties dialog box.
When using Active Directory, you deploy the logon script via a Group Policy. First, copy the script file to
the Sysvol subfolder. Figure A shows where to access this subfolder.
FIGURE A
Note that you also have the choice of scripts for logoff, startup, and shutdown. You can then directly
edit the Group Policy object for a given container to include that script, as shown in Figure B.
FIGURE B
WINDOWS COMMANDS
To see a complete list of the commands and information on how to use them, refer to Windows Help. If
you are using Windows 2000, click on Start | Help. In the Search tab, type command reference. Under
Select Topic To Display, double-click on Command Reference Main Page. In Windows NT, click on Start |
Help and type command in the Find tab. Then, under Pick A Topic, select Commands Index and click the
Display button.
Another useful logon script command is NET TIME, which is used to synchronize time on a network to a
time server. You can use a number of switches with this command. Again, you can check the command
reference in Windows Help. The simplest use of NET TIME might look something like this:
NET TIME \\timesvr8 /SET /YES
This tells the computer to synchronize its time with that on the server named timesvr8. The /YES switch
tells it to force the synchronization even if the named server is not a time source server.
In a future article, I will discuss certain programming constructs you will find useful in scripting, including
conditional processing. Here's a look at one form of conditional processing.
Administrators in Novell NetWare have long appreciated the ability to tell the logon script to do
something if the user is a member of a certain group by using the statement IF MEMBER OF. Although
no such statement is available in Windows scripting, there are two possible workarounds, depending on
whether you are administering a Windows NT domain or a Windows 2000 domain with Active Directory.
The Windows NT Resource Kit includes a utility named IFMEMBER.EXE, which can be used for the
same purpose as the NetWare IF MEMBER OF. Unfortunately, its use is rather convoluted, requiring yet
another construct called ERRORLEVEL. Here's how it works. Lets say that if the user logging on is a
member of the both the Marketing group and the Managers group, you want to map a drive to a share
that only marketing managers have access to. First, you would include the line:
IFMEMBER marketing managers
The IFMEMBER utility, assuming that it is in a search path, will check for membership in all groups
listed and then exit and store the number of groups the user is a member of in a special variable called
ERRORLEVEL. In this case, that number should be 2. So the entire process would look like this:
IFMEMBER marketing managers
IF NOT ERRORLEVEL 2 EXIT
NET USE J: \\SERVER4\MKTGMGR? /PERSIST: NO?
If the user is a member of both groups, the value stored in ERRORLEVEL will be 2. If the value is not 2,
the script will end. But if the value is 2, it will execute the next statement.
The IFMEMBER.EXE utility may also be used in a Windows 2000 domain, but if you are using Active
Directory, you have another option. Rather than reference groups in logon scripts, you can design your
Organizational Units along the same lines as those groups. That way, you can create Group Policy
Objects linked to each OU, with a specific logon script for that OU, without having to use the IFMEMBER
utility.
Using the COPY command or the more versatile XCOPY command, you could create a script that
would accomplish the job, copy it to a removable medium such as a floppy disk, and run the script at each
station by typing a single command. The advantages are twofold:
• It will save you time, since you don't have to type every command at every workstation.
• It will help prevent the inevitable errors caused by mistyping a command or a pathname.
Best practices
When you write Windows shell scripts, you should keep these best practices in mind:
• Always test your scripts before you use them in a production environment.
• Always document your scripts, even if they appear very simple. When a script encounters the
keyword REM (for "remark"), it will ignore that entire line. You can therefore use that keyword to add
remarks to your script for documentation. At the very least, you should include the purpose of the
script, with the date and the name of the person who created it. Remember that what may seem
obvious to you at the time may not be obvious to someone else. For that matter, it may not even be
obvious to you a year from now.
• Remember that each command line in your script will be displayed onscreen when it is run,
unless you turn that feature off with the command @ECHO OFF.
Moving on
To really become proficient at creating Windows shell scripts, you need to understand the available
commands and their syntax. Study the command reference in Windows Help. Take a look at each
command and see which ones might help you accomplish the tasks you need done. Each command has
a Related Topics link. Most of those include two additional useful links: one that provides examples of that
command in use and one that has further notes on the command.
In addition, you should practice and try out various commands and options as much as possible until
you become proficient. Don't be afraid to make mistakes (provided you are practicing in a test
environment). That's the best way to learn about the variables involved in this process.
Introducing FileSystemObject
The easiest way to understand the use of objects and methods is to become familiar with
FileSystemObject, the object used to interact with the Windows file system. However, because it is not
one of the core WSH objects, it can't be used directly. It is actually invoked by WSH from a file called the
Scripting Runtime Library (%windir%\system32\scrrun.dll).
Once invoked, FileSystemObject can be used to create, copy, or delete files or folders. You invoke it
through a process called "instantiating an object," which is basically creating the object and then
assigning it to a variable.
We will use the Windows Script Host root object Wscript to create the FileSystemObject object (yes,
that does sound redundant) and simultaneously assign it to a variable. Here's how.
One of the methods in the Wscript object is called CreateObject. So using our dot notation, we can
write Wscript.CreateObject to accomplish our task. We just need to tell it that we want to create the
FileSystemObject found in the Scripting Runtime Library:
Wscript.CreateObject("Scripting.FileSystemObject")
However, that's only half the job of instantiating FileSystemObject; we also have to simultaneously
assign it to a variable. In programming, a variable is simply a name you give to something so that you
(and the program) can keep track of it more easily. Since we are creating the FileSystemObject, we might
use FSO as the variable name. But there are many kinds of items besides objects that can be given
names. To identify this as the name of an object, we'll adopt Microsoft's recommended naming
convention and use the variable name objFSO.
We are now close to the point where we can actually do something. But in Visual Basic, you can't use a
variable name until you declare it and assign something to it. To declare a variable, we use a separate
statement with the keyword Dim, like this:
Dim objFSO
Then, to assign something to the variable, we use the keyword Set and an equal sign. So the entire
process of instantiating the FileSystemObject will look like this:
Dim objFSO
Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")
Using FileSystemObject
Now that we have instantiated FileSystemObject and assigned it to a variable called objFSO, what can
we do with it? Remember that objects come with a set of capabilities called methods. We can use those
methods to manipulate the file system if we know the exact syntax. Some of the useful methods for
FileSystemObject are listed in Table A.
TABLE A
CopyFile Copies files to another location
DeleteFile Deletes files
FileExists Returns True or False depending on whether the file exists
MoveFile Moves files to another location
CopyFolder Copies folders to another location
DeleteFolder Deletes folders
FolderExists Returns True or False depending on whether the folder exists
MoveFolder Moves folders to another location
Let's say that we want to write a script that will copy a file named MyFile.txt from a local drive to a
network share. Good programming technique dictates that we first test to make sure that the file exists
before we execute the Copy command. Listing A shows how we would do that.
Once we instantiated the FileSystemObject as objFSO, we were able to invoke two of its methods
(FileExists and CopyFile) to accomplish a task. We also invoked a Wscript method (Echo) to display a
message in case of an error. In addition, note that we invoked those methods using the variable name
objFSO rather than the object name FileSystemObject.
Of course, the exact syntax is important, such as the If-Then-Else construct and the use of parentheses
and quotation marks. But the point here is to understand the use of objects and methods to accomplish a
task.
Releasing FileSystemObject
Good programming technique requires you to do one more thing before leaving the VBS script. After
using objects you have instantiated, you should always release them before ending the script. You do that
by assigning nothing to the variable name you created—literally. Here's what it looks like:
Set objFSO = Nothing
So now, if we put the whole thing together and include, as we always should, documenting comments,
it would look something like Listing B.
When you start working with the Windows Scripting Host and VBS scripting, you must understand the
concept of objects and methods. Previously, I discussed how to instantiate, or create, an instance of the
FileSystemObject object and use it to manipulate the Windows file system. Now, I'm going to discuss two
other objects that are important in network admin scripting, WshShell and WshNetwork. We'll use these
two objects to create shortcuts, write to the registry, and map network drives.
Object recap
Objects, which can be thought of as tools, have what we call methods—certain things the tools can do. In
addition, objects have properties. Just as the name implies, properties are characteristics of objects and,
like methods, can be used to good advantage in VBS.
Once the Shell object has been created, it includes the properties and methods shown in Table A.
TABLE A
Properties Methods
CurrentDirector AppActivate
y
Environment CreateShortcut
SpecialFolders Exec
? ExpandEnvironmentStrings
? LogEvent
? Popup
? RegDelete
? RegRead
? RegWrite
? Run
? SendKeys
WshShell object
Using the Shell object and some of these properties and methods, we are going to create a VBS script
that will create a shortcut to Notepad on the user's desktop. First, notice that one of the properties is
called SpecialFolders. This property requires an argument telling it which special folder to use, such as
MyDocuments, Favorites, or StartMenu. For our script, we'll use Desktop.
Second, notice that one of the methods for WshShell is CreateShortcut. If you use that method, you
end up with an object called WshShortcut. Its properties are shown in Table B.
TABLE B
Properties
Arguments
Description
Hotkey
IconLocation
TargetPath
WindowStyle
WorkingDirectory
WshShortcut object
Where do these properties come from? If you right-click on a shortcut and select Properties from the
context menu, you'll see something similar to Figure A.
FIGURE A
Items in the Properties dialog box correspond to WshShortcut properties. For instance, the Target text
box corresponds to the TargetPath property in the WshShortcut object. The Run drop-down list lets you
select either Normal Window, Run Minimized, or Run Maximized. These options are part of the
WindowStyle property in WshShortcut. The only property we are required to specify is TargetPath.
Now let's look at how we can create a shortcut with VBS. First, we have to remember that shortcuts to
files or folders (as opposed to URLs) have the extension .lnk. We will need to specify that we want to link
to C:\WINNT\notepad.exe and store that link (shortcut) in the user's Desktop folder. Here is what we will
do:
1. Instantiate the WshShell object.
2. Use WshShell to create a shortcut.
3. Specify where the link is located (using the TargetPath property of WshShortcut).
We can use these methods to manipulate the registry of a machine with a VBS script—that is, read,
write, and delete registry keys and values. The syntax for this is quite simple. Let's say that in the
HKEY_CURRENT_USER hive (HKCU), we want to create a key with the name "AnewKey" and assign to
it the value of "NewValue." We would first instantiate the Shell object and then use the RegWrite method
as follows:
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
ObShell.RegWrite "HKCU\AnewKey", "NewValue"
The same key and value can be removed using the RegDelete method.
WshNetwork object
Let's say that we want to assign the network share \\Server1\Admin to drive G:. We first instantiate the
network object and then use the MapNetworkDrive method as follows:
Dim objNetwork
Set objNetwork = WScript.CreateObject("WScript.Network")
ObjNetwork.MapNetworkDrive "G:", "\\Server1\Admin"
To learn more about VBS and how you can use the objects, methods, and properties to your
advantage, check out Microsoft's site for specifics such as the VBS User's Guide and Language
Reference and references on the individual objects Shell, Network, and FileSystemObject.
The IF statement is used to test a condition. This statement may include a command to be carried out if
the condition is true, such as:
IF %SYSTEMROOT% == "C:\WINNT" COPY new.dll C:\WINNT\SYSTEM32
You can also include a command to be carried out if the condition is false. To do this, you add an ELSE
clause to the IF statement:
IF %USERNAME% == "Johnny" echo "Hello Johnny" ELSE echo "Who are you?"
In addition, you have the option of branching to another part of the script to carry out a command. This
is especially useful in more complex processing. To branch, you must include a label, which is basically a
named place marker in your script. For example, if your script contains commands that can't be carried
out on a Windows 9x operating system, you might want to test to see that the operating system is
Windows NT or higher first. If it is not, you do not want to the script to run at all. To accomplish this, you
could use a label called EXIT and the GOTO statement:
IF NOT %OS% == "WINDOWS_NT" GOTO EXIT
[Body of script here]
GOTO EOF
:EXIT
ECHO "You must be using Windows NT or higher."
A little explanation is called for here. First, note that a colon must precede the label (EXIT) in the script
and that I used two equal signs (==) instead of one (=). The double equal sign is called a comparison
operator and must be used with IF statements. I used a GOTO statement to tell the script to branch to the
label. Remember that the script will carry out each line in order until it reaches the end, unless it is told
otherwise. This means that if the condition is true, it will still carry out that last ECHO statement in the
script. Of course, I don't want to echo that message if the condition is true, so I used the GOTO EOF (End
of File) statement before the EXIT label. This tells the script to end there and not carry out any more
commands—in this case: ECHO"You must be using Windows NT or higher."
You can always use NOT to invert any test for a condition. Thus, in addition to the basic IF statement,
you can use the following:
IF (NOT) DEFINED [Tests to determine whether a given variable exists]
IF (NOT) EXIST [Tests to determine whether a given file or folder exists]
The Command Reference in Windows Help provides details and notes on using these statements.
The %%variable is any letter of the alphabet, such as %%a or %%z. The FOR command will increment
the value of this variable each time it passes through the loop.
Look at how you might use this construct for a network admin task. Suppose that you need to print a list
of all the subfolders in the C:\WINNT folder. You could do that using a straight shell command such as:
DIR C:\WINNT /AD /S
The output would look similar to Figure A.
FIGURE A
However, this may not be the most useful format. So l create a script with the following commands:
@echo off
FOR /r c:\winnt %%a in (.) do echo %%a > dirlist.txt
The resulting output, redirected to a text file, will appear similar in format to Figure B.
FIGURE B
The WHILE…WEND loop is similar to DO…WHILE, but it is not used much, due to the general
popularity of DO…WHILE. The basic formats for the other three constructs are:
DO WHILE condition
Repeating commands
LOOP
---------------------------------------------------
DO UNTIL condition
Repeating commands
LOOP
---------------------------------------------------
FOR a = 1 TO 10
Repeating commands
NEXT
---------------------------------------------------
It's important to understand that in both the DO…WHILE loop and the DO…UNTIL loop, the condition
must change at some point. Otherwise the loop will never end. The FOR…NEXT loop shown above will
repeat 10 times.
Be constructive
Using the programming constructs I have discussed here, you can greatly improve the efficiency and
functionality of your scripts. You can have your scripts make decisions without your intervention,
recognize errors and take action based on them, and quickly perform repetitive tasks. As with all elements
of scripting, developing the skills to use these constructs will take practice, but it will be well worth the
trouble.
FIGURE A
The Resource Kits conveniently group the tools by functionality, as shown in Figure B. You can use the
Search tab if you need to find a specific tool.
FIGURE B
Table A lists a few of the many Resource Kit tools you might find useful in your scripts for network
administration.
TABLE A
Delprof.exe Deletes user profiles from a Windows 2000 computer
Delsrv.exe Unregisters a service
Regini.exe Edits the registry with a script
Logoff.exe Automatically logs off when used in an unattended installation
Permcopy.exe Copies share and file permissions from one share to another
Now.exe Stamps current date and time
End sum
Now that you know about all of these great tool resources available to you, you can start using them in
your scripts. You will want to take the time to learn them, of course, as well as practice them extensively
on a lab network before you use them on a production network. Fortunately, both the Resource Kits and
KiXtart have good documentation on syntax and usage.
Useful books
If you go to the Amazon.com Web site and search on the keyword scripting under books, you'll probably
find more than 80 titles listed. Some of them are for UNIX shell scripting, some cover mainly Web
scripting, and some deal specifically with scripting for network administration. I'll highlight three of the
most useful books that I'm familiar with, but there are certainly other good ones out there.
• Microsoft Windows Shell Scripting and WSH Administrator's Guide, by Jerry Lee Ford, Jr.,
Premier Press, 2002, ISBN 1-931841-26-8. I really like this one. It covers shell scripting, the Windows
Script Host, JScript, and VBS, all from the point of view of a network administrator. It's actually one of
the few I've seen that covers using the FileSystemObject, Shell object, and Network object. It gives
examples and shows the correct syntax in both JScript and VBS for each one. The section on
Windows shell scripting is quite comprehensive.
• Windows NT Scripting Administrator's Guide, by William R. Stanek, M&T Books, 1999, ISBN 0-
7645-3309-6. This is similar to the first book, in that it covers using both Windows shell scripting and
the Windows Script Host with JScript and VBS. But each book covers various functions in slightly
different ways, with different examples. If you're having trouble understanding some aspect of
scripting, it can be useful to go to another source. Often, looking at the two books together can lead to
a better understanding.
• Windows Admin Scripting Little Black Book, by Jesse M. Torres, The Coriolis Group, 2001, ISBN
1-57610-881-3. This book is quite different from the other two. It is designed to get the network
administrator up and running quickly for any given task. Instead of offering a progressive tutorial on
scripting, it is divided into specific functions, such as scripting installations and updates, file
management, and local and remote system management. Within each functional area, it discusses
specific actions, such as scripting a silent Windows 2000 service pack installation, and provides the
specific information you need to create that script. It serves as a nice complement to one or both of
the first two books.
• Windows & .NET Magazine Scripting 101 Series—This four-part series was written several years
ago, but it remains an excellent guide for learning the ins and outs of the Windows Script Host and
VBS, along with some good code examples.
• WinGuides Scripting Guide for Windows—This site allows you to access it for free or pay for
premium access. It offers reference information for scripting concepts and techniques, including some
excellent code samples.
Listings
First steps in VBS scripting for administrators
Listing A
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
If (objFSO.FileExists("C:\MyFolder\MyFile.txt ")) Then
objFSO.CopyFile "C:\MyFolder\MyFile.txt", "\\Server1\SharedFolder\MyFile.txt"
Else
WScript.Echo("Unable to locate file")
End if
Listing B
'Script to copy MyFile.txt to network share
'===============================================================
' Instantiate FileSystemObject
'===============================================================
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
'===============================================================
' Test for existence of MyFile.txt and copy if exists
'===============================================================
If (objFSO.FileExists("C:\MyFolder\MyFile.txt ")) Then
objFSO.CopyFile "C:\MyFolder\MyFile.txt", "\\Server1\SharedFolder\MyFile.txt"
Else
WScript.Echo("Unable to locate file")
End if
'===============================================================
' Release FileSystemObject
'===============================================================
Set objFSO = Nothing
Wscript.Quit
Downloads:
Example scripts for Windows Script Files
AdminRepublic scripting primer
Windows Script Host ClipText library files
The Network Address Inventory script
Network Monitor Capture Utility script
CIO Republic: Get analysis and insight on e-business, leadership, executive career, business strategy,
and technology.
IT Manager Republic: Access technology insights, project management and personal management tips,
and training resources.
NetAdmin Republic: Get tips on Windows, NetWare and Linux/UNIX administration, infrastructure
design and network security.
Support Republic: Obtain detailed solutions to desktop hardware, software, and end-user support
problems.
IT Consultant Republic: Find information and advice on client and vendor relations, project management
and technology.
Try our premium subscription product, TechProGuild, free for 30 days. Our online IT community
provides proven, real-world solutions and the latest articles resources, and discussions affecting frontline
IT pros. Get access to over 250 full-text IT books, exclusive downloads, in-depth articles on network and
system, PC troubleshooting, networking and Cisco infrastructure information, help desk and support, and
more!