powershell - Powershell脚本可以保存VirtualBox VM的状态,但每次都会出错

标签 powershell virtualbox powershell-4.0 powershell-ise

我编写了一个PowerShell脚本来启动/停止VM,如下所示:
$vma是VM的名称。

$vmstate = (vboxmanage showvminfo $vma --machinereadable | % { if ($_ -like 'VMState="*"') { $_ } })

Write-Host $vmstate

if ($vmstate -like '*run*') {
    Write-Host "Wait while "$vma" is powered off (saving state)"
    vboxmanage controlvm $vma savestate
}
else {
    Write-Host "Wait while "$vma" is started"
    vboxmanage startvm $vma
}

每次启动VM都可以正常工作。保存状态也可以,但是会在PS ISE输出窗口中显示此错误:

Wait while  W2008_21_06_A is powered off (saving state)
vboxmanage : 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
At C:\Users\craig\My Documents\vbox.ps1:18 char:5
+     vboxmanage controlvm $vma savestate
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (0%...10%...20%....0%...90%...100%:String) [],      RemoteException
    + FullyQualifiedErrorId : NativeCommandError


我得到的印象是,它在VBoxManage算出结果之前已经保存了状态。有任何想法吗?

我的系统规格:
  • VBox v5.1.24
  • PowerShell v4.0
  • Windows 8.1
  • 最佳答案

    您的“问题”是,您在ISE中使用PowerShell。尝试直接使用PowerShell。区别?首先有两个奇怪的事情:

  • 使用savestatevboxmanage参数时,成功时的输出(0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%)被写入stderr(而不是stdout,这是更合适的imo)。
  • 如果外部程序向stderr写入,则ISE会引发异常。 PowerShell不会这样做。

  • 总之,ISE已在实际成功消息上引发错误,因为它已被写入stderr。您可以通过使用Start-Process cmdlet运行外部程序来防止此行为。您可以通过以下方式替换对VBoxManage.exe的调用
    Start-Process "C:\Program Files\Oracle\VirtualBox\vboxmanage.exe" -ArgumentList "controlvm `"$vma`" savestate"
    


    Start-Process "C:\Program Files\Oracle\VirtualBox\vboxmanage.exe" -ArgumentList "startvm `"$vma`""
    

    关于powershell - Powershell脚本可以保存VirtualBox VM的状态,但每次都会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47239275/

    相关文章:

    PowerShell PipelineVariable 参数仅包含 PSCustomObject 集合中的第一个值

    powershell 在输出中放置了不适当的换行位置

    Azure 自动化 - 如何公共(public) webhook 来运行脚本?

    powershell - 有没有办法模拟美元?返回使用佩斯特?

    ruby - Veewee 安装错误

    mysql - 通过 ssh 连接时 SQl 工作台崩溃

    virtual-machine - 是否可以在 VirtualBox 上安装 openvms 镜像 (iso)?

    powershell - 无法从独立服务器运行 PowerShell 群集 cmdlet

    html - 变量的空参数

    node.js - 在 Octopus 中部署 powershell 后步骤中运行 npm 命令