Код Powershell работает в редакторе, но не в PowerShell.
Когда я запускаю этот код в редакторе, он работает отлично: (ни одной ошибки)
$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 ответ
Есть много проблем с вашим кодом, и он может просто работать в вашем редакторе из-за некоторых переменных и т. Д., Установленных в пространстве выполнения вашего редактора, которых нет в коде. И даже когда он предположительно работал в редакторе, это может быть не тем, что вы хотели, или тем, что вы ожидали.
Например $usb
не определено нигде в вашем коде. Так в основном $usbDevice
выйдет пустым, и в следующей команде вы обязательно получите несоответствие типов.
Другие исправления / предложения:
$vm = 0
- Вам не нужно "объявлять" переменные. Powershell - это динамический язык.
foreach ($vm in $vpc.VirtualMachines){}
- какой смысл этой линии? В конце концов вы получите $vm
имея последнюю виртуальную машину из $vpc.VirtualMachines
Почему вы хотите, чтобы они были в одной строке? Вы можете скопировать строки и вставить в консоль, если хотите. Или вы можете поместить их в скрипт и запустить скрипт.