如何使用脚本中的参数启动新的Powershell窗口?

时间:2018-06-28 11:10:43

标签: powershell batch-file cmd virtual-machine virtualbox

我正在使用VirtualBox,并且希望能够使用Powershell脚本(单击gui上的按钮后)获取所有虚拟机的列表。

我知道您可以使用命令

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms
在cmd / batch中用

列出所有VM,但是我似乎无法弄清楚如何使用powershell脚本显示输出。这就是为什么我想创建一个新的Powershell窗口来执行此命令,以便获得虚拟机列表。

我尝试这样做,但是什么也没有发生:

& 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms

谢谢。

最好的问候, 约翰

2 个答案:

答案 0 :(得分:3)

您尝试过吗:

cmd /c 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms

您还应该能够做到这一点:

powershell.exe "& 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms"

修改

如果您想要一个新窗口,请使用此:

Start-Process powerShell.exe "& 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms; pause"

pause将在新窗口退出之前等待您按下Enter键。

答案 1 :(得分:0)

从事件(例如,单击)处理程序运行PowerShell脚本块时,该脚本块的输出将被简单丢弃。您需要做的是将输出捕获到全局变量中,如下所示:

Clear()

这会将输出分配给全局变量$Button4.Add_Click({$global:result = & 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms}) ,然后您可以将其用于其他任务。

  

是的,我正在尝试打开一个新的Powershell窗口

您真的要打开窗口还是只想运行后台(异步)作业?如果您只想进行后台工作,则应查看$global:result。使用Start-Job的问题之一是您将无法获得结果,但是可以使用PowerShell作业。如果您使用Start-Process,则代码如下:

Start-Job

然后在代码中的其他地方,您可以通过这样做来接收工作结果

$Button4.Add_Click({$global:lvmjob =  Start-Job { & 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' list vms}})