Это чрезвычайно сложно сделать. Наиболее полезная информация о диске берется из класса Win32_LogicalDrive. К сожалению, съемные диски часто не заполняют этот класс большим количеством информации о диске. Полезные свойства, такие как DeviceID и PNPDeviceID, чаще всего оставляются пустыми. Следующее, что лучше всего сделать, это выполнить итерацию класса Win32_LogicalDisk для экземпляров, которые являются съемными дисками. В соответствии с вашим подходом, основанным на событиях, это будет выглядеть примерно так:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set wmiEvent = objWMIService.ExecNotificationQuery( _
"Select * From __InstanceCreationEvent Within 1" & _
" Where TargetInstance ISA 'Win32_PnPEntity' and" & _
" TargetInstance.Description='USB Mass Storage Device'")
While True
Set objEvent = wmiEvent.NextEvent()
Set objUSB = objEvent.TargetInstance
strName = objUSB.Name
strDeviceID = objUSB.DeviceID
Set objUSB = Nothing
Set colDrives = objWMIService.ExecQuery( _
"Select * From Win32_LogicalDisk Where DriveType = 2")
For Each objDrive in colDrives
strDriveLetter = objDrive.DeviceID
Next
Set colDrives = Nothing
WScript.Echo strName & " was mounted as " & strDriveLetter
Wend
Set wmiEvent = Nothing
Set objWMIService = Nothing
Конечно, это будет работать, только если вставленный диск является единственным съемным диском в системе. Вы можете обойти это ограничение, захватив все буквы диска при запуске скрипта и сравнив их при вставке диска, однако этот подход также не пуленепробиваемый. Изменение назначения букв дисков любых других дисков приведет к тому, что ваш скрипт вернет неверную информацию.