0

当我在编辑器中运行此代码时,它可以完美运行:(不是一个错误)

$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

有人知道如何解决这个问题吗?

(我知道代码有点奇怪,但这不是重点:))

4

1 回答 1

1

您的代码有很多问题,它可能只是在您的编辑器中工作,因为在您的编辑器运行空间中设置了一些变量等,这些变量在代码中不存在。即使它在编辑器中工作,它也可能不是你想要发生的或者你期望它做的。

例如$usb,未在您的代码中的任何地方定义。所以基本上$usbDevice会出来空,在下一个命令中你一定会得到类型不匹配。

其他更正/建议:

$vm = 0- 您不必“声明”变量。Powershell 是一种动态语言。

foreach ($vm in $vpc.VirtualMachines){}- 这条线的意义何在?最后,您将$vm拥有最后一个虚拟机$vpc.VirtualMachines

为什么要将它们放在一行中?如果需要,您可以复制这些行并粘贴到控制台中。或者,您可以将这些放在脚本中并运行该脚本。

于 2011-10-15T23:47:48.013 回答