繁体   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