Как с помощью VB Script получить информацию о вставленных USB Flash в компьютер
Скрипт будет содержать только одну функцию, но если USB флешек более чем одна, то он будет формировать массив с именами дисков.
Вот полный листинг VBS скрипта.
Function GetDeviceType() on error resume next Dim FSO, tmpDeviceName(), i Set FSO = CreateObject("Scripting.FileSystemObject") i = 0 For Each Drive In FSO.Drives Set DriveUSB = FSO.GetDrive(Drive.DriveLetter) StrTMP = Drive.DriveLetter & vbCrLf & _ "AvailableSpace: " & DriveUSB.AvailableSpace & vbCrLf & _ "DriveLetter: " & DriveUSB.DriveLetter & vbCrLf & _ "DriveType: " & DriveUSB.DriveType & vbCrLf & _ "FileSystem: " & DriveUSB.FileSystem & vbCrLf & _ "FreeSpace: " & DriveUSB.FreeSpace & vbCrLf & _ "IsReady: " & DriveUSB.IsReady & vbCrLf & _ "Path: " & DriveUSB.Path & vbCrLf & _ "RootFolder (Path): " & DriveUSB.RootFolder.Path & vbCrLf & _ "SerialNumber: " & DriveUSB.SerialNumber & vbCrLf & _ "ShareName: " & DriveUSB.ShareName & vbCrLf & _ "TotalSize: " & DriveUSB.TotalSize & vbCrLf & _ "VolumeName: " & DriveUSB.VolumeName If DriveUSB.DriveType = 1 Then ReDim Preserve tmpDeviceName(i) tmpDeviceName(i) = DriveUSB.DriveLetter i = i + 1 'MsgBox StrTMP, vbInformation + vbOkOnly,"StrTMP" End If Next GetDeviceType = tmpDeviceName End Function Dim MSG MSG = "Всего USB устройств: " & UBound(GetDeviceType) + 1 & vbCrLf For Each pp In GetDeviceType MSG = MSG + pp & ":\" & vbCrLf Next MsgBox MSG,vbInformation + vbOkOnly,"Всего USB устройств"
Итак разберём скрипт.
Первым делом мы вызываем функцию GetDeviceType().
Мы используем функцию (Function) а не процедуру (Sub) потому, нам по итогу нужно получить данные прямо в GetDeviceType()
В верхней части кода
Function GetDeviceType() On Error Resume Next Dim FSO, tmpDeviceName(), i Set FSO = CreateObject("Scripting.FileSystemObject")
мы используем On Error Resume Next. Это нужно для того, что бы скрипт не вываливался в ошибку а далее продолжал перебирать диски.
Далее мы формируем листинг доступных устройств.
For Each Drive In FSO.Drives Set DriveUSB = FSO.GetDrive(Drive.DriveLetter) StrTMP = Drive.DriveLetter & vbCrLf & _ "AvailableSpace: " & DriveUSB.AvailableSpace & vbCrLf & _ "DriveLetter: " & DriveUSB.DriveLetter & vbCrLf & _ "DriveType: " & DriveUSB.DriveType & vbCrLf & _ "FileSystem: " & DriveUSB.FileSystem & vbCrLf & _ "FreeSpace: " & DriveUSB.FreeSpace & vbCrLf & _ "IsReady: " & DriveUSB.IsReady & vbCrLf & _ "Path: " & DriveUSB.Path & vbCrLf & _ "RootFolder (Path): " & DriveUSB.RootFolder.Path & vbCrLf & _ "SerialNumber: " & DriveUSB.SerialNumber & vbCrLf & _ "ShareName: " & DriveUSB.ShareName & vbCrLf & _ "TotalSize: " & DriveUSB.TotalSize & vbCrLf & _ "VolumeName: " & DriveUSB.VolumeName If DriveUSB.DriveType = 1 Then ReDim Preserve tmpDeviceName(i) tmpDeviceName(i) = DriveUSB.DriveLetter i = i + 1 'MsgBox StrTMP, vbInformation + vbOkOnly,"StrTMP" End If Next
В части кода
If DriveUSB.DriveType = 1 Then ReDim Preserve tmpDeviceName(i) tmpDeviceName(i) = DriveUSB.DriveLetter i = i + 1 'MsgBox StrTMP, vbInformation + vbOkOnly,"StrTMP" End If
мы проверяем, If DriveUSB.DriveType = 1 Then — является ли устройство USB флешкой? Если ДА, то мы расширяем массив с итоговыми данными.
ReDim Preserve tmpDeviceName(i) tmpDeviceName(i) = DriveUSB.DriveLetter i = i + 1
Далее итоговые значения передаём из временной переменной (массив) в функцию GetDeviceType()
GetDeviceType = tmpDeviceName
Вызов функции GetDeviceType() с выводом итоговых значений
Dim MSG MSG = "Всего USB устройств: " & UBound(GetDeviceType) + 1 & vbCrLf For Each pp In GetDeviceType MSG = MSG + pp & ":\" & vbCrLf Next MsgBox MSG,vbInformation + vbOkOnly,"Всего USB устройств"
Удачи
Комментарии ()