我需要使用 VBScript 将网络驱动器映射到网络路径。网络路径直接从输入中读取。我应该如何映射网络驱动器以及如何检查输入的网络路径是否已经存在?
问问题
27625 次
3 回答
6
我创建了一个子程序来映射驱动器......
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
我把它留给你处理错误检查等。或者,如果你更喜欢网络使用路线,你可以做类似的事情。
dim wshShell
Set wshShell = CreateObject("WScript.Shell")
wshshell.run "cmd /c net use H: ""\\server\share""",1,True
您可以更进一步,使用The Scripting Guys创建的示例自动使用下一个可用驱动器号来映射驱动器。
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.”
我希望这是有帮助的。
于 2012-03-27T13:49:36.377 回答
3
在您的 vbscript 文件中运行以下命令:
net use [NetDrive:] [Network Path]
例如:
net use Z: \\Hadi\temp
示例命令会将 \Hadi\temp 映射到 Z:
另请查看此用于映射网络驱动器的VBScript文件。
于 2011-09-07T16:00:32.333 回答
1
我自己不是 WMI 的忠实拥护者(它有点臃肿且缓慢),所以我使用以下代码将网络共享映射到第一个可用的驱动器号并检查它是否已成功安装:
Dim strScriptPath, strMapNetworkDriveLetter
strScriptPath = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) - Len(WScript.ScriptName)-1)
strMapNetworkDriveLetter = GetFirstFreeDriveLetter & "\"
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
strScriptPath = RemoveTrailingBackslash(strScriptPath)
If Left(strScriptPath, 2) = "\\" Then
' Create Drive Mapping
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive RemoveTrailingBackslash(strMapNetworkDriveLetter), strScriptPath
If objFSO.DriveExists(strMapNetworkDriveLetter) Then
Dim objDrives, boolMapNetworkDrive, i
Set objDrives = WshNetwork.EnumNetworkDrives
boolMapNetworkDrive = False
For i = 0 to objDrives.Count - 1 Step 2
WScript.Echo "[debug] " & objDrives.Item(i) & " = " & objDrives.Item(i+1)
If objDrives.Item(i) = RemoveTrailingBackslash(strMapNetworkDriveLetter) Then
If objDrives.Item(i+1) = strScriptPath Then
WScript.Echo "[debug] Drive " & objDrives.Item(i) & " is now connected to " & objDrives.Item(i+1) & vbCrLf
boolMapNetworkDrive = True
Exit For
End If
End If
Next
End If
If Not boolMapNetworkDrive Then
ShowMessage("The network connection (" & strScriptPath & ") could not be found.")
WScript.Quit(2)
End If
End If
' Do your stuff here...
' Unmount UNC Drive Mapping after script execution.
If boolMapNetworkDrive Then
WScript.Echo("WshNetwork.RemoveNetworkDrive " & RemoveTrailingBackslash(strMapNetworkDriveLetter))
WshNetwork.RemoveNetworkDrive RemoveTrailingBackslash(strMapNetworkDriveLetter), True
If objFSO.DriveExists(strMapNetworkDriveLetter) Then
WScript.Echo("Error on WshNetwork.RemoveNetworkDrive.")
WScript.Quit(3)
End If
End If
Function GetFirstFreeDriveLetter
Dim objFSO, strLetters, i, blnError
Set objFSO = CreateObject("Scripting.FileSystemObject")
'* list of possible drive letters
'* A and B are reserved for floppy disc
'* you may limit the search using any subset of the alphabet
strLetters = "CDEFGHIJKLMNOPQRSTUVWXYZ"
GetFirstFreeDriveLetter = ""
blnError = True
'* walk through all possible drive letters
For i=1 to len(strLetters)
'* if the drive letter isn't in use the it's ours
If not objFSO.DriveExists(mid(strLetters, i, 1) & ":") Then
'* we have found a free drive letter, therefore blnError = False
blnError = False
'* assigning the return value
GetFirstFreeDriveLetter = mid(strLetters, i, 1) & ":"
'* we want to find the FIRST free drive letter
Exit For
End If
Next
'* error handling
If blnError then
WScript.Echo "Error - no free drive letter found!"
WScript.Quit(1)
End If
'* releasing file system object
Set objFSO = Nothing
End Function
Function RemoveTrailingBackslash(strString)
If Right(strString, 1) = "\" Then
RemoveTrailingBackslash = Left(strString, Len(strString)-1)
Else
RemoveTrailingBackslash = strString
End If
End Function
于 2021-02-03T15:56:27.847 回答