Как запустить новое окно Powershell с аргументами из скрипта? - PullRequest
0 голосов
/ 28 июня 2018

Я использую VirtualBox и хочу получить список всех виртуальных машин, используя скрипт powershell (после нажатия кнопки в графическом интерфейсе).

Я знаю, что вы можете использовать команду

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

в cmd / batch для вывода списка всех виртуальных машин, но я не могу понять, как отобразить вывод с помощью моего сценария powershell. Вот почему я хотел создать новое окно powershell, которое выполняет эту команду, поэтому у меня есть список виртуальных машин.

Я пытался сделать это, но ничего не происходит вообще:

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

Заранее спасибо.

С наилучшими пожеланиями, John

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

При запуске блока сценариев PowerShell из обработчика события (например, щелчка) вывод блока сценария просто отбрасывается. Что вам нужно сделать, это захватить вывод в глобальной переменной следующим образом:

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

Это присваивает вывод глобальной переменной $global:result, которую затем можно использовать в других задачах.

Да, я пытаюсь открыть новое окно powershell

Вы действительно хотите открыть окно или просто хотите запустить фоновую (асинхронную) работу? Если вам просто нужна фоновая работа, тогда вам стоит взглянуть на 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
0 голосов
/ 28 июня 2018

Вы пробовали:

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 будет ждать, пока вы нажмете ввод, до выхода из нового окна.

...