簡體   English   中英

Powershell代碼可以在編輯器中工作,但不能在Powershell cmd中工作嗎?

[英]Powershell code works in editor but not in Powershell cmd it self?

當我在編輯器中運行此代碼時,它可以正常運行:(不是一個錯誤)

$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

有人知道如何解決這個問題嗎?

(我知道代碼有點怪異,但這不是重點:)

您的代碼有很多問題,由於在您的編輯器運行空間中設置了一些變量,這些變量可能只是在您的編輯器中起作用,而這些變量不在代碼中。 而且即使它應該在編輯器中工作,也可能不是您想要發生的事情或您期望它做的事情。

例如, $usb不在代碼中的任何地方定義。 因此,基本上$usbDevice$usbDevice空,並且在下一個命令中,您必然會得到類型不匹配的信息。

其他更正/建議:

$vm = 0您不必“聲明”變量。 Powershell是一種動態語言。

foreach ($vm in $vpc.VirtualMachines){} -這行的目的是什么? 最后,您將獲得$vm擁有$vpc.VirtualMachines最后一個虛擬機的$vpc.VirtualMachines

您為什么要將它們放在一行中? 您可以根據需要復制這些行並粘貼到控制台中。 或者,您可以將它們放在腳本中並運行該腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM