Обнаружение писем с USB и дисковода гибких дисков с помощью VBScript

У меня есть Vb-скрипт, который хранит буквы всех съемных дисков в переменной. Поскольку вы знаете, что он содержит как дисководы гибких дисков, так и USB-накопители, я хочу разделить их, я имею в виду, что я хочу хранить буквы USB-накопителей в переменной и дискеты в другую переменную,

Вот сценарий:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk")

Removable = ""
For Each objDisk in colDisks
  if objDisk.DriveType = 2 then
    if Removable > "" then
      Removable = Removable & ";"
    end if
    Removable = Removable & objDisk.DeviceID & "\"
  end if
Next

Я использую программное обеспечение, которое может вызывать VBScript. Но это только поддерживает какие-то из них, как я написал. Так как я могу сделать то, что я сказал?

Заранее спасибо.

2 ответа

Решение

Проверьте objDisk.MediaType. Здесь вы найдете список MediaTypes; на первый взгляд MediaType 1 ... 10 указывает на "нормальную" дискету; При быстрой проверке моей (виртуальной) машины на USB-накопителе был указан MediaType of Null (даже ноль для неизвестного), так что вам придется быть осторожным. На второй взгляд (речь идет об осторожности): большинство определенных типов носителей идентифицируют дискеты (некоторые из них экзотические). Кстати, как насчет USB-дисководов?


Поскольку я не могу проверить на "реальном" компьютере, вам придется дважды проверить следующий код:

Const cnRemovableDisk =  2
Const cnMTypeUnknown  =  0
Const cnMTypeNoFloppy = 11
Const cnMTypeFixedHD  = 12
Dim strComputer   : strComputer       = "."
Dim objWMIService : Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Dim colDisks      :  Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk")
Dim Removable     : Removable = ""
Dim Floppy        : Floppy    = ""
Dim USBDrive      : USBDrive  = ""
Dim objDisk
For Each objDisk in colDisks
  If objDisk.DriveType = cnRemovableDisk Then
     Removable = Removable & ";" & objDisk.DeviceID & "\"
     Select Case True
       Case IsNull( objDisk.MediaType )
          WScript.Echo objDisk.DeviceID, "has MediaType null - assuming USB Drive."
          USBDrive = USBDrive & ";" & objDisk.DeviceID & "\"
       Case objDisk.MediaType = cnMTypeNoFloppy
          WScript.Echo objDisk.DeviceID, "has MediaType 11 - assuming USB Drive."
          USBDrive = USBDrive & ";" & objDisk.DeviceID & "\"
       Case objDisk.MediaType = cnMTypeUnknown
          WScript.Echo objDisk.DeviceID, "has MediaType 0 - assuming USB Drive."
          USBDrive = USBDrive & ";" & objDisk.DeviceID & "\"
       Case objDisk.MediaType = cnMTypeFixedHD
          WScript.Echo objDisk.DeviceID, "has MediaType 12 - how can this happen?"
       Case Else
          WScript.Echo objDisk.DeviceID, "has MediaType", objDisk.MediaType, " - surely some kind of floppy."
          Floppy   = Floppy   & ";" & objDisk.DeviceID & "\"
     End Select
  End If
Next
Removable = Mid( Removable, 2 )
Floppy    = Mid( Floppy   , 2 )
USBDrive  = Mid( USBDrive , 2 )
WScript.Echo "Removable:", Removable
WScript.Echo "Floppy:   ", Floppy
WScript.Echo "USBDrive: ", USBDrive

мой вывод:

A: has MediaType 5  - surely some kind of floppy.
F: has MediaType null - assuming USB Drive.
Removable: A:\;F:\
Floppy:    A:\
USBDrive:  F:\

Нулевой MediaType моего USBDrive может быть странным несчастным случаем. Я попытался упростить работу с MediaType, используя структуру элемента управления "Select Case True". VBScript будет проверять условия дел до первого истинного условия, выполнять соответствующие операторы и "разбивать" до выбора конца. Таким образом, добавление особых случаев и / или переупорядочивание случаев просты - просто сохраните проверку IsNull на первой позиции.

Вы также можете попробовать этот запрос

set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType=2")

Для более подробной информации проверьте эту ссылку. Удачи

Другие вопросы по тегам