PowerShell Ezine, Logon Scripts

Guy's Scripting Ezine 74 Map 1st Available Drive Letter

Contents for Ezine 74 Map 1st Available Drive Letter

This week’s secret

Can you remember back to when you were a 10 year old?  I bet that not all your classmates could catch a ball.  I bet again, that not all your classmates were good readers.  If we look at today's typical 10 year olds, the story would be much the same.  However, such is the simplicity yet power of computers; I bet that all normal 10 year olds can use a computer.    Now here is where I make my quantum leap.  You may not be brilliant at algebra, calculus or C++ programming, but just as every normal 10 year old can use a computer, every one reading this ezine can be a VBScript programmer.  By a VBScript programmer, I mean that you can write your own simple VBScript programs that will do proper computer network 'stuff'.  How will you learn this 'stuff'?  The answer is by copying and pasting other people's code and then making your own modifications.

Unfortunately, I spend less than 20% of my time with VBScript.  Yet every time I go back to VBScript, I say to myself, I must do this more often.  I confessed a few weeks ago that I too copy and adapt other people's scripts, but this week once again, I have pretty much designed my own script, naturally, I employ tried and tested VBScript objects and methods.  My point is that VBScript has all the building blocks, it just up to you and to me to have the vision, the plan and the time to 'play' with the code.

ˆ

This Week's Mission - To Map to the 1st Available Drive Letter

Have you ever had the problem where you try to map a network drive, but unfortunately the drive letter is already in use?  Well my scripts seeks to test for mapped drives, which are already in use, and if necessary, to pick another letter.  The scenario is that you want to map a network drive, however, you do not really mind which letter the script chooses.  Therefore, you provide a list of alternative letters and the script maps the first free drive letter.

Scripts constantly remind me that they just automate what we humans can do manually.  Where scripts are at their best, is when there is a simple but repetitive sequence of events.  The trick is to introduce a loop.  The trap is not to put essential bits inside the loop, or else leave vital commands outside the loop.  What makes this week's script complex, is that I have two loops one inside the other.

ˇ

Example  - To Map to the 1st Available Drive Letter

The question my script keeps asking is 'Does this particular drive letter exist?'  If the answer is false, then the drive letter does not exist, so the script maps that particular letter.  Job done.  However if that particular letter is already in use, then the loop must provide the next letter in the sequence and repeat my DriveExists test.

Instructions for mapping to the first available drive letter

  1. Copy and paste the script below into notepad.
  2. Create a network share.  Edit Line 14
  3. Save the file with a .vbs extension e.g. IfExists .vbs.
  4. Double click the script, read the message box, check Explorer

 

' IfExists.vbs Windows Logon Script
' VBScript to map 1st available drive letter
' Author Guy Thomas http://computerperformance.co.uk/
' Version 3.6 - May 2005
' ------------------------------------------------------'
Option Explicit
Dim strDriveLetter, strRemotePath
Dim objNetwork, objShell
Dim CheckDrive, DriveExists, intDrive
Dim strAlpha, strExtract, intAlpha, intCount

' The section sets the variables
' N.B. Change strRemotePath
strRemotePath = "\\alan\usersHome"
strDriveLetter = "L:"
strAlpha = "LMNOPQ"
intAlpha = 0
intCount = 0
' This sections creates two objects:
' objShell and objNetwork and then counts the drives
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network")
Set CheckDrive = objNetwork.EnumNetworkDrives()

' This section operates the For ... Next loop
' See how it compares the enumerated drive letters
' With strDriveLetter
On Error Resume Next
DriveExists = False
err.number= vbEmpty
For intCount = 1 To 5
DriveExists = False

' CheckDrive compares each Enumerated network drive
' with the proposed drive letter held by strDriveLetter
For intDrive = 0 To CheckDrive.Count - 1 Step 2
If CheckDrive.Item(intDrive) = strDriveLetter _
Then DriveExists = True
Next
intAlpha = intAlpha + 1

' Logic section if strDriveLetter does not = DriveExist
' Then go ahead and map the drive

Wscript.Echo strDriveLetter & " exists " & DriveExists
If DriveExists = False Then objNetwork.MapNetworkDrive _
strDriveLetter, strRemotePath


If DriveExists = False Then objShell.run ("Explorer" &" "_
& strDriveLetter & "\" )
If DriveExists = False Then WScript.Quit(0)

' If the DriveExists, then it is necessary to
' reset true --> false for next test loop
If DriveExists = True Then DrivExists = False

' Appends a colon to drive letter
strDriveLetter = Mid(strAlpha, intAlpha,1) & ":"

Next

WScript.Echo "Out of drive letters. Last letter " & strDriveLetter

WScript.Quit(1)

' Guy's If Exists VBScript ends here

Learning Points for Mapping to the 1st Available Drive Letter

Note 1:  Examine and trace the outer loop.  The idea is to focus on strDriveLetter.  Ask does this letter = any of the existing mapped network drives?  If yes, then loop and get another letter from strAlpha.  If no then bingo, map this drive because it is free and there is no danger of a conflict.

Note 2:  The inner loop is where the script compares strDriveLetter with each drive discovered by the EnumNetworkDrives function.

Note 3:  You may prefer to choose a different selection of drive letters for strAlpha.  The list does not have to be in alphabet order.

Note 4:  See the importance of EnumNetworkDrives, and note the plural spelling of this method. 

Challenges :  If you take up my theme of developing your own scripts; experiment with different variable names, amend my WScript.Echo messages, add error correcting code, choose different letters to map.


If you are looking for handy network utilities, try some of the free downloads at Tools4Ever


Summary of To Map to the 1st Available Drive Letter

It is annoying if a map network drive fails because the drive has already been mapped.  This script loops through a sequence of letters until it finds a free drive letter.  Note how it uses not only MapNetworkDrive, but also EnumNetworkDrives.

See more on mapping network drives - whole section here

Computer Training Software - Recommended Training VideosGuy Thomas recommends Computer Training Software

Their topics and material are ideal for getting you started with VBScript.  The videos are easy to follow and you can control the pace.  Try their free demo material and then see if you want to buy the full package. See more about VB Script Training CD.


 *


Google

Webcomputerperformance.co.uk

GFi Events Manager

Guy Recommends: GFi EventsManager

Here is a solution to monitor, manage and archive thousands of events that are generated by devices across your entire network.  Get your free evaluation copy of GFI EventsManager.

 

Home Copyright © 1999-2008 Computer Performance LTD All rights reserved

Please report a broken link, or an error.