1

Тема: VBS: VirtualPC подключение USB устройств

Здравствуйте.
Необходимо к вертуальной машине при старте подключить USB устройство.
Нашел скриптик на забугорных сайтах, адаптировал немного:

vmname="Windows XP Mode" 'ваша VM
Device_String="WorkCentre 4118 Series" ' Ваше USB устройство

'Получить Virtual PC объектов
Set objVPC = CreateObject("VirtualPC.Application")

'Найти виртуальной машины
Set objVM = objVPC.FindVirtualMachine(vmname)
If objVM is Nothing Then
  Wscript.Echo "Не удалось найти виртуальную машину: " & vmname
  WScript.Quit 2
End If

'Получить коллекцию USB устройств
set usbDevicesColl = objVPC.USBDeviceCollection
If usbDevicesColl.Count = 0 Then
  Wscript.Echo "Нет USB устройств, подключенных к машине."
  WScript.Quit 2
End If

'Переменная если устройство найдено
isFound = 0

For Each usbDevice in usbDevicesColl
  if LCase(usbDevice.DeviceString) = LCase(Device_String) Then
 'Attach the USB device to VM
   set objAssign = objVM.AttachUSBDevice(usbDevice)
 isFound = 1
   break
  End If
Next

If isFound = 0 Then
  Wscript.Echo "Не удается найти устройство USB. Пожалуйста, проверьте строку устройство "
Else
  Wscript.Echo "Устройство присвоино виртуальной машине"
End If

Но выдает ошибку:

Сценарий:    C:\Users\Master\Desktop\NEWVirtualPC -
копия, vbs
Строка: 29
Символ: 4
Ошибка: Требуется объект: 'objVM.AttachUSBDevice(...)'
Код: 800А01А8
Источник:    Ошибка выполнения Microsoft VBScript

Локальная машина Windows 7 SP1,  VirtualPC официальная Windows XP Mode.
Но самое интересное, что USB устройство подключается. Но скрипт прекращает работать. Вопрос, как решить, чтобы было без ошибок. Можно конечно добавить обработчик и сверять по коду, но все равно хотелось бы уйти от ошибки.

2

Re: VBS: VirtualPC подключение USB устройств

Здравствуйте.

А что это за версия VirtualPC, которая предоставляет COM-интерфейс?
Заинтересовало..

3

Re: VBS: VirtualPC подключение USB устройств

Похоже на Microsoft VirtualPC

4 (изменено: Dmitrii, 2011-05-30 08:23:53)

Re: VBS: VirtualPC подключение USB устройств

Ottiwell_Wood пишет:

Похоже на Microsoft VirtualPC

Под XP, например, ни VPC2004, ни VPC2007 стандартно такого интерфейса не предоставляют. Видимо, нужно регистрировать дополнительную библиотеку (компонент).

5

Re: VBS: VirtualPC подключение USB устройств

Microsoft VirtualPC версию не нашел, ну наверно последняя, это под win 7 обновление скачивается и она как бы становиться встроенной в ОС.

Вот тут описания COM объекта вроде:http://msdn.microsoft.com/en-us/library … S.85).aspx

есть еще скрипт на Windows PowerShell он работает без ошибок, все выполнятся и все подключает.

# Подключение к Virtual PC
$vpc = new-object -com VirtualPC.Application

# Получить имя VM "Windows XP Mode"
$vmName ="Windows XP Mode" #Read-host "Укажите имя виртуальной машины, что вы хотите использовать"

# Список доступных устройств USB
write-host "Cследующих устройств USB доступны:"
$vpc.USBDeviceCollection | select -ExpandProperty DeviceString

# Получить имя USB устройства "WorkCentre 4118 Series"
$usb ="WorkCentre 4118 Series" # Read-host "Введите имя устройства USB, что вы хотите подключить к виртуальной машине"

# Получить объект VM 
$vm = $vpc.findVirtualMachine($vmName)

# Получить объект USB
$usbDevice = $vpc.USBDeviceCollection | ? {$_.DeviceString -eq $usb} | select -first 1

write-host $usbDevice

# Прикрепите устройство - это будет ошибкой, если виртуальная машина не работает
$vm.AttachUSBDevice($usbDevice)

Но для меня это совсем далеко.  VBS ближе, к телу, потом хочу на VB написать монитор, что бы постоянно следить за подключением USB устройства к VM, если не смогу скрипом сделать.

Dmitrii пишет:
Ottiwell_Wood пишет:

Похоже на Microsoft VirtualPC

Под XP, например, ни VPC2004, ни VPC2007 стандартно такого интерфейса не предоставляют. Видимо, нужно регистрировать дополнительную библиотеку (компонент).

А как зарегистрировать COM и какой?

6

Re: VBS: VirtualPC подключение USB устройств

Ottivel_Wood: ну вообще-то кроме Microsoft её никто и не выпускает.

Alexs37
Нет, вам не надо ничего регистрировать, всё уже зарегистрировано при инсталляции.

COM-интерфейс предоставляет само приложение ("VirtualPC.application").
Я так понимаю это новшество появилось в новой версии под Win 7, названной "Windows virtualPC".
Жаль конечно, но XP обошли стороной.

7

Re: VBS: VirtualPC подключение USB устройств

Так чего делать, как избежать ошибки?
На сегодня пока решил так:

vmname = "Windows XP Mode" 'ваша VM
Device_String = "Photosmart Pro B8300 series"  '"WorkCentre 4118 Series" '  Ваше USB устройство

'Получить Virtual PC объектов
Set objVPC = CreateObject("VirtualPC.Application")

'Найти виртуальной машины
Set objVM = objVPC.FindVirtualMachine(vmname)
If objVM Is Nothing Then
  WScript.Echo "Не удалось найти виртуальную машину: " & vmname
  WScript.Quit 2
End If

On Error Resume Next

' Запускаем бесконечный цикл ожидания
While 1
    WScript.Sleep 2000

    'Получить коллекцию USB устройств
    Set usbDevicesColl = objVPC.USBDeviceCollection
    For Each usbDevice In usbDevicesColl
      If LCase(usbDevice.DeviceString) = LCase(Device_String) Then
      'Присоединить устройство USB к VM
            Set objAssign = objVM.AttachUSBDevice(usbDevice)
             Exit For
      End If
    Next
Wend

В результате принтер всегда подключен к виртуалке, не зависимо от отключения, сбоев и того подобного. Единственно при автозагрузке не работает, т.к. VM еще не запустилась, а скрипт уже пытается подцепить принтер, в результате после запуска VM принтер не подключается вообще, при попытки подключить в ручную. Сообщает, что принтер уже подключен. Хотя реально нет! Надо добавить проверку статуса VM.

8

Re: VBS: VirtualPC подключение USB устройств

Добавил перед телом скрипта таймер в 5 минут, и все VM подгружается за 3-4 минуты и включается основной скрипт с подключением USB устройства. Хоть и криво сделано, но работает как часы