2011-10-15 2 views
0

그것을 완벽하게 작동합니다 : (안 하나의 오류) 내가 한 줄에이 코드를 넣어Powershell 코드는 편집기에서 작동하지만 Powershell cmd에서는 작동하지 않습니다. 내가 편집기에서이 코드를 실행하면

$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 

누군가가이 문제를 해결하는 방법을 알고 있습니까?

(I 코드가 조금 이상하지만 포인트를 :)하지 먹으 렴 알고)

+1

코드에서 $ usb를 정의 할 수 있습니까? –

+0

나는 USB가 아무것도 필요 없기 때문에 나는 usb를 정의하지 않았다. 내가 0 = 또는 "="라고 말하면 분명히 아무것도 아닌 것처럼 보입니다. – Freddy

답변

1

이 코드에 많은 문제가 있고 그냥 때문에 설정 일부 변수 등의 편집기에서 작업 할 수있다 당신의 편집기에있는 runspace는 코드에 없습니다. 그리고 아마 편집자로 일할 때조차도, 당신이 원했던 것이거나 기대했던 것과 다를 수 있습니다.

예를 들어 $usb은 코드의 아무 곳에서나 정의되지 않습니다. 그래서 기본적으로 $usbDevice은 비어있게 될 것이고 다음 명령에서 타입 불일치를 가져올 수 있습니다.

기타 수정/제안 :

$vm = 0 - 당신은 변수를 "선언"할 필요가 없습니다. Powershell은 역동적 인 언어입니다.

foreach ($vm in $vpc.VirtualMachines){} -이 줄의 요점은 무엇입니까? 마지막으로 $vm의 마지막 가상 컴퓨터가 $vpc.VirtualMachines

인데, 그 이유는 무엇입니까? 원하는 경우 회선을 복사하여 콘솔에 붙여 넣을 수 있습니다. 또는 이들을 스크립트에 넣고 스크립트를 실행할 수 있습니다.

+0

그냥 텍스트를 복사하여 powershell에 붙여 넣으면 모든 줄을 분리하여 실행하므로 이전 변수를 사용할 수 없다고 생각합니다. 이 줄이 필요합니다. 그 쉬운 방법 vb.net에서 코드를 사용하는 (나는 비어있는 = 이름이없는 USB가 필요하다) \t 나는 usb가 아무것도 필요가 없기 때문에 나는 정의하지 않았다. 내가 0 = 또는 "="라고 말하면 분명히 아무것도 아닌 것처럼 보입니다. – Freddy

+0

@ user995364'이전 변수를 사용할 수 없습니다. '- 그렇지 않은 경우는 없습니다. – manojlds

+0

@ user995364 - usb가 아무것도 아닌 경우, 왜 당신이'하고 있습니까? {$ _. DeviceString -eq $ usb}' – manojlds

관련 문제