Вот мое решение. Я обнаружил, что объект Wscript.Network имеет свойство EnumNetworkDrives, которое представляет собой список всех используемых в настоящее время букв дисков. Затем я просто перебираю алфавит, чтобы узнать, какая буква в данный момент не используется, и сопоставить UNC с ней вручную. Даже если к ним уже подключен диск, я просто сопоставляю и удаляю в конце.
Это предполагает, что у пользователей не всякая возможная буква диска, что в моем случае безопасно. Альтернативой может быть сопоставление буквы диска с идентификатором UNC, если у используемого в данный момент диска есть нужный путь.
Я надеюсь, что есть лучший способ проверить, есть ли элемент в списке, чем мой неуклюжий цикли я открыт для предложений, но это работает для меня и не заняло много времени, чтобы написать.
'Establish all letters of the English Alphabet (assuming these can all become drive mappings)
Set driveLetters = CreateObject("System.Collections.ArrayList")
driveletters.add "A:"
driveletters.add "B:"
driveletters.add "C:"
driveletters.add "D:"
driveletters.add "E:"
driveletters.add "F:"
driveletters.add "G:"
driveletters.add "H:"
driveletters.add "I:"
driveletters.add "J:"
driveletters.add "K:"
driveletters.add "L:"
driveletters.add "M:"
driveletters.add "N:"
driveletters.add "O:"
driveletters.add "P:"
driveletters.add "Q:"
driveletters.add "R:"
driveletters.add "S:"
driveletters.add "T:"
driveletters.add "U:"
driveletters.add "V:"
driveletters.add "W:"
driveletters.add "X:"
driveletters.add "Y:"
driveletters.add "Z:"
'Find the first available open drive mapping
Set oWSN = CreateObject("WScript.Network")
Set oDrives = oWSN.EnumNetworkDrives
For i = 0 to driveletters.Count - 1 step 1
in_list = False
For j = 0 to oDrives.Count - 1 Step 2
If oDrives.Item(j) = driveletters.Item(i) Then
in_list = True
End If
Next
If in_list = False Then
strDrive = driveletters.Item(i)
Exit For
End If
Next
oWSN.MapNetworkDrive strDrive, "\\unc\path"
'Monitoring code
oWSN.RemoveNetworkDrive strDrive, True