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

How to start a new Powershell window with arguments from a script?

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

我知道你可以使用命令

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

在 cmd/batch 中列出所有虚拟机,但我似乎无法弄清楚如何使用我的 powershell 脚本显示输出。这就是为什么我想创建一个新的 powershell window 来执行这个命令,所以我有一个虚拟机列表。

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

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

提前致谢。

此致, 约翰

你试过了吗:

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

您应该也可以这样做:

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

编辑

如果你想要一个新的 window,使用这个:

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

pause 会在新 window 退出前等待您按下回车键。

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

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

这会将输出分配给一个全局变量 $global:result,然后您可以在其他任务中使用它。

Yes I am trying to open a new powershell window

您真的要打开一个 window 还是只想 运行 一个后台(异步)作业?如果你只是想要一份后台工作,那么你应该看看 Start-Job。使用 Start-Process 的问题之一是您无法返回结果,但可以使用 PowerShell 作业。如果您使用 Start-Job,代码将如下所示:

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

然后在您的代码的其他地方,您可以通过执行

来接收工作结果
$data = receive-job -Job $global:lvmjob