Как с помощью VB Script получить информацию о вставленных USB Flash в компьютер

Скрипт будет содержать только одну функцию, но если USB флешек более чем одна, то он будет формировать массив с именами дисков.

Как с помощью VB Script получить информацию о вставленных USB Flash в компьютер

Вот полный листинг 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 устройств"

Удачи

Комментарии ()

    252