Mapping a network drive and checking for its existence in VBScript

后端 未结 2 639
广开言路
广开言路 2021-01-07 06:51

I need to map a network drive into a network path using VBScript. The network path is read directly from input. How should I map the network drive and how to check whether t

相关标签:
2条回答
  • 2021-01-07 07:33

    run the following command in you vbscript file:

    net use [NetDrive:] [Network Path]
    

    for example:

    net use Z: \\Hadi\temp
    

    The sample command will map \Hadi\temp to Z:

    Also take a look at this VBScript file for mapping network drives.

    0 讨论(0)
  • 2021-01-07 07:34

    I created a subroutine to map drives...

        MapDrive "H:","\\server\share"
    
        Sub MapDrive(letter, uncpath)
             on error Resume Next
             dim drivetype, currentmapping
    
            dim objWMIService 
            dim colDisks, objDisk
    
            'Set wshnetwork = CreateObject("Wscript.Network")
            Set objWMIService = GetObject("winmgmts:" & _
                 "{impersonationLevel=impersonate}!\\.\root\cimv2")
            Set colDisks = objWMIService.ExecQuery _
                ("Select * from Win32_LogicalDisk Where Name = """ & letter & """")
            For Each objDisk In colDisks        
                 drivetype = objDisk.DriveType      
                currentmapping = objDisk.ProviderName
            Next    
    
    
            if (drivetype <> 4 and drivetype <> 0) then
                NotifyUser ucase(letter) & " cannot be mapped due to a physical device already reserving that drive letter" & vbcrlf & _
                            "This is most frequently caused by a thumbdrive or external disk.",5
                exit Function
            end if
    
            if (ucase(currentmapping) = ucase(uncpath)) then
                exit function
            end If
    
            if (drivemappings.Exists(uncpath)) then
                drivemappings.Add uncpath & "(" & letter & ")", letter
            else 
                drivemappings.Add uncpath, letter
            end if
    
            if (currentmapping <> "") then
                    wshnetwork.RemoveNetworkDrive letter,,True
            end if
    
            wshnetwork.MapNetworkDrive letter, uncpath, true
    
            on Error goto 0
         End Sub
    

    I leave it up to you do handle error checking etc. Alternatively if you prefer the net use route you could do something like..

    dim wshShell
    Set wshShell = CreateObject("WScript.Shell")
    wshshell.run "cmd /c net use H: ""\\server\share""",1,True
    

    You can take it a step further to automagically use the next available drive letter to map drives using an example The Scripting Guys created.

    Set objDictionary = CreateObject("Scripting.Dictionary")
    
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
    
    For Each objDisk in colDisks
        objDictionary.Add objDisk.DeviceID, objDisk.DeviceID
    Next
    
    For i = 67 to 90
        strDrive = Chr(i) & ":"
        If objDictionary.Exists(strDrive) Then
        Else
            Wscript.Echo strDrive & " is the next available drive letter."
            Wscript.Quit
        End If
    Next
    Wscript.Echo "There are no available drive letters on this computer.”
    

    I hope this is helpful.

    0 讨论(0)
提交回复
热议问题