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)

このコードを;で1行に配置すると 最後に:

$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

なぜそれらを1行にしたいのですか?必要に応じて、行をコピーしてコンソールに貼り付けることができます。または、これらをスクリプトに入れてスクリプトを実行することもできます。

于 2011-10-15T23:47:48.013 に答える