Обнаружение писем с USB и дисковода гибких дисков с помощью VBScript - PullRequest
1 голос
/ 11 августа 2011

У меня есть 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 ]

2 голосов
/ 14 августа 2013

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

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

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

2 голосов
/ 11 августа 2011

Проверьте 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 на первой позиции.

...