Код Powershell работает в редакторе, но не в PowerShell. - PullRequest
0 голосов
/ 15 октября 2011

Когда я запускаю этот код в редакторе, он работает отлично: (ни одной ошибки)

$vm = 0
$vpc=new-object –com VirtualPC.Application –Strict
foreach ($vm in $vpc.VirtualMachines){}
$broken = Get-WmiObject Win32_PnPEntity | where {$_.ConfigManagerErrorCode -ne 0}
$usbDevice = $vpc.USBDeviceCollection | ? {$_.DeviceString -eq $usb} | select -first 1
$vm.AttachUSBDevice($usbDevice)

, когда я помещаю этот код в одну строку с;в конце:

$vm = 0; $vpc=new-object –com VirtualPC.Application –Strict; foreach ($vm in $vpc.VirtualMachines){}; $broken = Get-WmiObject Win32_PnPEntity | where {$_.ConfigManagerErrorCode -ne 0}; $usbDevice = $vpc.USBDeviceCollection | ? {$_.DeviceString -eq $usb} | select -first 1; $vm.AttachUSBDevice($usbDevice)

выдает ошибку 0 × 80020005:

Exception calling "AttachUSBDevice" with "1" argument(s): "Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_T
YPEMISMATCH))"
At line:1 char:293
+ $vpc=new-object -com VirtualPC.Application -Strict; $vm = $vpc.findVirtualMachine("Windows XP Mode"); $broken = Get-W
miObject Win32_PnPEntity | where {$_.ConfigManagerErrorCode -ne 0}; $usbDevice = $vpc.USBDeviceCollection | ? {$_.Devic
eString -eq $usb} | select -first 1; $vm.AttachUSBDevice <<<< ($usbDevice)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation

Кто-то знает, как решить эту проблему?

(я знаю коднемного странно но это не главное :))

1 Ответ

1 голос
/ 16 октября 2011

Есть много проблем с вашим кодом, и он может просто работать в вашем редакторе из-за некоторых переменных и т. Д., Установленных в пространстве выполнения вашего редактора, которых нет в коде.И даже когда это предположительно работает в редакторе, это может быть не то, что вы хотели, или то, что вы ожидали.

Например, $usb не определено где-либо в вашем коде.Таким образом, в основном $usbDevice выйдет пустым, и в следующей команде вы обязательно получите несоответствие типов.

Другие исправления / предложения:

$vm = 0 - Вам не нужно«объявить» переменные.Powershell - это динамический язык.

foreach ($vm in $vpc.VirtualMachines){} - в чем смысл этой строки?Наконец, в итоге у $vm будет последняя виртуальная машина из $vpc.VirtualMachines

Почему вы хотите, чтобы они были в одной строке?Вы можете скопировать строки и вставить в консоль, если хотите.Или вы можете поместить их в скрипт и запустить скрипт.

...