Script to connect & disconnect mapped drive


Recommended Posts

  sam_goffe said:

net use [DRIVE]: \\[PATH]\

net use [DRIVE]: \\[PATH]\ /DELETE

just put them in a batch file.

thanks... this is a start. however, since users tend to forget, I want it to remove after they are done with the directory. I figured the best way would be when they log off. can this be done?

Can't see the need to disconnect at log off.

' ########################################################################
'  Written in VBScript.
'  Establishes map drives.
'  Assign to OU Group Policy under USER CONFIG, WINDOWS SETTINGS, SCRIPTS, LOGON SCRIPT.
'
'  This script will: 
'  (1) check if the drive is already connected and, if so, disconnect it.
'  (2) map the drive.
'
'  Arguments are as follows: 
'	 MAPIT  DRIVE-LETTER as string,  PATH as string, USER as string, PASSWORD as string
'	 (1) Do not specify colon in drive letter.
'	 (2) Do not end path with a forward slash.
'	 (3) If user and password are not required to establish map, then specify a zero-length string as follows:  ""
'
' Reference Microsoft info at:
' http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsmthmapnetworkdrive.asp
' ########################################################################

' Create the Shell or environment for the commands:
Set WshShell = WScript.CreateObject("WScript.Shell")
' Define objects:
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oDrives = WshNetwork.EnumNetworkDrives()

' ====================================
' DEFINE WHO TO CONTACT for pop-up messages:
' ====================================
strContactMessage = "If you require assistance, please contact IT Support."

' ==================
' DEFINE DRIVES TO MAP:
' ==================
Mapit "m", "\\server1\share1", "", ""
Mapit "n", "\\server1\share2", "", ""

' ========
' CLEAN UP:
' ========
Set WshShell = Nothing
Set WshNetwork = Nothing
Set oDrives = Nothing

' ##################################
' DO NOT MODIFY ANYTHING BELOW THIS POINT...
'   unless you are familiar with the proper settings.
' ##################################
Sub Mapit(strLetter, strPath, strUser, strPass)

	' Define the DriveLetter:
	DriveLetter = strLetter & ":"

	' Define the remote path:
	RemotePath = strPath

	' Pop-up Notices (set to False to disable notices, otherwise set to True):
	bPopReminder = True

	' Define known errors to trap:
	Dim arrErrCode(1)
	Dim arrErrDesc(1)
	arrErrCode(0) = -2147023694
	arrErrCode(1) = -2147024811
	arrErrDesc(0) = "Unable to map drive " & DriveLetter & " to " & RemotePath _
		& " due to a previously defined remembered map with the same letter." _
		& vbCrLf & vbCrLf & "Please MANUALLY disconnect map drive " & DriveLetter _
		& ", then Log Out and Log back in."
	arrErrDesc(1) = "Unable to map drive " & DriveLetter & " to " & RemotePath _
		& " since " & DriveLetter & ": was previously reserved by your computer." _
		& vbCrLf & vbCrLf & "(Refer to Management, Shared Folders, Shares)"

	' Define whether the map information should be removed from the current user's profile:
	bForceRemoveFromProfile = True
	bRemoveFromProfile = True

	' Define whether the map information should be stored in the current user's profile:
	bStoreInProfile = False

	' Check if already connected:
	AlreadyConnected = False
	For i = 0 To oDrives.Count - 1 Step 2
		If LCase(oDrives.Item(i)) = LCase(DriveLetter) Then AlreadyConnected = True
	Next

	' Attempt to map the drive.  If already mapped, first attempt disconnect:
	If AlreadyConnected = True then
		WshNetwork.RemoveNetworkDrive DriveLetter, bForceRemoveFromProfile, bRemoveFromProfile
		If Not strUser = "" Then
			WshNetwork.MapNetworkDrive DriveLetter, RemotePath, bStoreInProfile, strUser, strPass
		Else
			WshNetwork.MapNetworkDrive DriveLetter, RemotePath, bStoreInProfile
		End If
'		If bPopReminder Then WshShell.PopUp "Drive " & DriveLetter & " disconnected, then connected successfully to " & RemotePath
	Else
		On Error Resume Next
		If Not strUser = "" Then
			WshNetwork.MapNetworkDrive DriveLetter, RemotePath, bStoreInProfile, strUser, strPass 
		Else
			WshNetwork.MapNetworkDrive DriveLetter, RemotePath, bStoreInProfile
		End If
		If Err.Number <> 0 Then
			bKnownError = False
			For I = LBound(arrErrCode) To UBound(arrErrCode)
				If Err.Number = arrErrCode(I) Then
					bKnownError = True
					strPopMessage = arrErrDesc(I)
					' Display the Disconnect Network Drives window:
					If Err.Number = arrErrCode(0) Then
						Set objWSH = Wscript.CreateObject("WScript.Shell")
						objWSH.Run "rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL Disconnect", 1, true
					End If
					Exit For
				End If
			Next
			If Not bKnownError Then
				strPopMessage = "Unable to map drive " & DriveLetter & " to " & RemotePath _
					& " due to reason stated below."
			End If
			' Display warning message:
			strPopMessage = "WARNING!!   WARNING!!   WARNING!!   WARNING!!" _
				& vbCrLf & vbCrLf & strPopMessage _
				& vbCrLf & vbCrLf & Err.Description & " (error " & Err.Number & ")" _
				& vbCrLf & vbCrLf & strContactMessage
			WshShell.PopUp strPopMessage
		Else
'			If bPopReminder Then WshShell.PopUp "Drive " & DriveLetter & " connected successfully to " & RemotePath
		End If
	End If

' ====================================
' Rename those mapped drive.
' Why have "Share1 on server1" when you can have "Share 1"
' ====================================

mDrive = "M:\"
Set oShell = CreateObject("Shell.Application")
oShell.NameSpace(mDrive).Self.Name = "Share 1"

mDrive = "N:\"
Set oShell = CreateObject("Shell.Application")
oShell.NameSpace(mDrive).Self.Name = "Share 2"

	' Release resources:
	Set objWSH = Nothing

	' Slight pause to ensure each pass has time to commit:
	wscript.sleep 200
End Sub

  Quote
' ====================================

' Rename those mapped drive.

' Why have "Share1 on server1" when you can have "Share 1"

' ====================================

mDrive = "M:\"

Set oShell = CreateObject("Shell.Application")

oShell.NameSpace(mDrive).Self.Name = "Share 1"

mDrive = "N:\"

Set oShell = CreateObject("Shell.Application")

oShell.NameSpace(mDrive).Self.Name = "Share 2"

' Release resources:

Set objWSH = Nothing

' Slight pause to ensure each pass has time to commit:

wscript.sleep 200

End Sub

Didn't know that was possible. Nice tip, thanks.

instead of specifying a drive letter you can use the symbol * instead, this means the mapped drive will use the next available drive letter..

usefull if some users have usb pens etc plugged in that are taking up the drive letter specified in the script

(although thats less likely if you specify something like Z: )

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • KB5060829: Microsoft confirms new upcoming Windows 11 24H2 feature is triggering Firewall by Sayan Sen At the end of June, Microsoft released Windows 11 setup and recovery updates (KB5062233/ KB5060843/ KB5062197/ KB5061090) following the month's non-security previews for 24H2 (KB5060829) and 23H2/22H2 (KB5060826). Today, the company has confirmed that KB5060829 is causing some troubles for systems in regards to Firewall. Microsoft says that IT admins and system admins may notice a recurring error entry in the Security event log related to Windows Firewall With Advanced Security wherein the Event Viewer records event ID 2042, labeled “Config Read Failed” with the message “More data is available” each time the device restarts. Although logged as an error, the tech giant notes that this entry does not indicate a malfunction of the Windows Firewall and as such it can be "safely ignored and disregarded," and that Windows Firewall continues to enforce rules and filter network traffic normally as intended. Microsoft assures that "there is no impact to Windows processes associated to this event." IT support teams and even general users often rely on error-level event entries to detect misconfiguration and other issues (Microsoft itself recommends you do so), so unexpected log noise can trigger unnecessary alerts like these. Interestingly, in this case, the logged event stems from an upcoming feature as Microsoft notes that the "event is related to a feature that is currently under development and not fully implemented." No additional information regarding this new feature has been provided at this time. For those who prefer a cleaner log, administrators can filter out event 2042 in Event Viewer or via PowerShell. In Event Viewer, create a custom view filtering out ID 2042 under the Security log and in PowerShell, use the Get-WinEvent -FilterHashtable parameter. Microsoft says that the team is currently working on a fix and an update will be released later. However, no ETA has been shared today. You can find the issue entry here on Microsoft's official Windows Health dashboard website.
    • Concerning the situation at XBOX (title cancellations, studio closures and firing employees): The management at MS gaming division (Booty, Spencer etc.) has to go. Money and time has been wasted in such amounts that those people have to be held accountable and better managers can take the lead. In most other businesses this would have happened ten years or so ago.
    • Why, because different bothers you? You aren’t using the OS per your own admission so why is it a shame? It’s a great way to focus imo.
    • People often hate on what they don’t understand. It’s not stupid, it’s different. That said, ignorance more often than not rules the roost, so it is seen as stupid instead. How much time have you spent learning how to use macOS as intended before making your proclamation?
    • Though, to be fair, maybe I'm biased and maybe my trust would eventually turn out to be misplaced, but I'd be certainly inclined to trust Microsoft's solution a lot more than I trust Opera's, for a multitude of reasons. Hell, I trust Microsoft more than I trust say Google lately.
  • Recent Achievements

    • Reacting Well
      SteveJaye earned a badge
      Reacting Well
    • One Month Later
      MadMung0 earned a badge
      One Month Later
    • One Month Later
      Uranus_enjoyer earned a badge
      One Month Later
    • Week One Done
      Philsl earned a badge
      Week One Done
    • Week One Done
      Jaclidio hoy earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      434
    2. 2
      ATLien_0
      158
    3. 3
      +FloatingFatMan
      146
    4. 4
      Nick H.
      65
    5. 5
      +thexfile
      62
  • Tell a friend

    Love Neowin? Tell a friend!