gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:54:46 27 4
gpt4 key购买 nike

我编写了一个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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com