VBScript to Map a Drive letter to a network file share (persistent)
This script is designed to maximise the speed of login, so if a drive already has the correct persistent connection it will be left alone. This is a good approach for machines that are running a recent version of Windows and which are always connected to the domain.
For each drive letter there are several possible states, that may have to be dealt with by the script:
- Remembered (persistent connection) / Not Remembered
- Already Connected / Connected to the wrong network share / Not Connected.
If a drive does have to be re-connected this script will attempt to remove any 'remembered' connections, including those to a file share that no longer exists or which is off-line.
Option Explicit Function MapDrivePersistent(strDrive,strPath) ' strDrive = Drive letter - e.g. "x:" ' strPath = Path to server/share - e.g. "\\server\share" ' Returns a boolean (True or False) Dim objNetwork, objDrives, blnFound, objReg, i Dim strLocalDrive, strRemoteShare, strRemembered, strMessage Const HKCU = &H80000001 ' Check syntax of parameters passed If Right(strDrive, 1) <> ":" OR Left(strPath, 2) <> "\\" Then WScript.echo "Usage: MapDrivePersistent.vbs ""X:"" ""\\server\share"" //NoLogo" WScript.Quit(1) End If Err.clear MapDrivePersistent = False Set objNetwork = WScript.CreateObject("WScript.Network") 'Step 1: Get the current drives Set objDrives = objNetwork.EnumNetworkDrives If Err.Number <> 0 Then 'Code here for error logging Err.Clear MapDrivePersistent = False Exit Function End If WScript.echo " Connecting drive letter: " + strDrive + " to " + strPath 'Step 2: Compare drive letters to the one requested blnFound = False For i = 0 To objDrives.Count - 1 Step 2 If UCase(strDrive) = UCase(objDrives.Item(i)) Then blnFound = True 'Drive letter was found. Now see if the network share on it is the same as requested If UCase(strPath) = UCase(objDrives.Item(i+1)) Then 'Correct mapping on the drive MapDrivePersistent = True Else 'Wrong mapping on drive. Disconnect and remap WScript.Echo "--" objNetwork.RemoveNetworkDrive strDrive, True, True 'Disconnect drive If Err.Number <> 0 Then 'Code here for error logging Err.clear MapDrivePersistent = False Exit Function End If ' To completely remove the previous remembered persistent mapping ' we also delete the associated registry key HKCU\Network\Drive\RemotePath ' In theory this should be covered by bUpdateProfile=True in ' the RemoveNetworkDrive section above but that doesn't always work. Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") objReg.GetStringValue HKCU, "Network\" & Left(strDrive, 1), "RemotePath", strRemembered If strRemembered <> "" Then objReg.DeleteKey HKCU, "Network\" & Left(strDrive, 1) End If ' Connect drive On Error Resume Next WScript.Echo "++" objNetwork.MapNetworkDrive strDrive, strPath, True If Err.Number <> 0 Then 'Code here for error logging Err.clear MapDrivePersistent = False Exit Function End If MapDrivePersistent = True End If End If Next'Drive in the list 'If blnFound is still false, the drive letter isn't being used. So let's map it. If Not blnFound Then On Error Resume Next objNetwork.MapNetworkDrive strDrive, strPath, True If Err.Number <> 0 Then 'Code here for error logging Err.clear MapDrivePersistent = False Exit Function End If MapDrivePersistent = True End If WScript.Echo " ____" End Function ' Example calling the function above to map a drive: if not MapDrivePersistent("Z:","\\Server64\workgroups") Then Wscript.Echo " ERROR: Drive Z: failed to connect!" End If
You are free to use or modify this script: Creative Commons Attribution 2.5 License.
For drive mapping to work, File and Printer sharing must be enabled on the remote (server) computer.
based on a script by Corey Thomas Better Drive Mapping
“You may say I'm a dreamer, but I'm not the only one. I hope someday you'll join us. And the world will live as one” ~ John Lennon
Related:
Q4471218 - Mapped drive may fail to reconnect in Windows 10, version 1809 (Red X)
MapDrive - Map a Drive letter to a network file share (non-persistent)
.MapNetworkDrive - Drive Map.
Using Group Policy Preferences to Map Drives Based on Group Membership.
NoDrives - Hide mapped drives from Windows Explorer.
NET - Manage network resources.
Equivalent PowerShell command: New-PSDrive- Create a mapped network drive.