Powershell - 在脚本中调用VBoxManage.exe

时间:2015-02-18 17:04:42

标签: powershell

[string]$VBoxManage="`"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe`""
[string]$VMtoClone="`"C:\Users\someuser\VirtualBox VMs\CloneMe\CloneMe.vdi`""
[string]$VMCloned="`"C:\Users\someuser\VirtualBox VMs\CloneMe\CloneMe_2.vdi`""
[string]$cloneVDI="clonevdi"

Write-Output ($VBoxManage + " " + $cloneVDI + " " + $VMtoClone + " " + $VMCloned)

$commandtoinvoke=($VBoxManage + " " + $cloneVDI + " " + $VMtoClone + " " + $VMCloned)

Invoke-Expression  $commandtoinvoke

我正在使用powershell脚本来克隆虚拟机。问题我有以下错误:

Invoke-Expression : At line:1 char:53
+ "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonevdi "C:\Users\someuser\Virt ...
+                                                     ~~~~~~~~
Unexpected token 'clonevdi' in expression or statement.
At line:10 char:1
+ Invoke-Expression  $commandtoinvoke
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : UnexpectedToken,Microsoft.PowerShell.Commands.InvokeExpressionCommand

这个错误是什么意思?我是如何防止它发生的?

1 个答案:

答案 0 :(得分:0)

在这种情况下不要使用Invoke-Expression,它会尝试在表达式解析模式下解析字符串,这就是为什么它被称为Invoke-Expression。在这种情况下,最好使用call运算符:

& $VBoxManage $cloneVDI $VMtoClone $VMCloned

请注意,无需引用自动完成的参数。

参见https://rkeithhill.wordpress.com/2007/11/24/effective-powershell-item-10-understanding-powershell-parsing-modes/ 和about_Parsing。