Как запустить консольное приложение в powershell?

Добрый день.
Необходимо выполнить консольное приложение и получить вывод в переменную с типом массив
Нашел запуск приложения через объект:

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "ping"
$pinfo.Arguments = "8.8.8.8 -n 1"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.CreateNoWindow = $true
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$output = $p.StandardOutput.ReadToEnd()
$output += $p.StandardError.ReadToEnd()
$output


на выходе переменная представлена строкой, которую не смог через split передать в массив.

То что нужно получается через запуск:
& ping 8.8.8.8 -n 1

но для передачи параметров приходится делать так:

$param = '8.8.8.8'
$param2 = '-n'
$param3 = '1'
& "ping" $param $param2 $param3


а хотелось бы получить что-то типа

$param = '8.8.8.8 -n 1'
& "ping" $param


Есть ли какой-то способ сделать так или более правильно?
start-process позволяет сделать такое, но через выгрузку в файл и дальнейшее чтение из него, что не желательно
Версия powershell 4.0
  • Вопрос задан
  • 548 просмотров
Пригласить эксперта
Ответы на вопрос 2
@azarij
В меру опытный никто
а консольное приложение это именно пинг?
какова конечная цель этого скрипта?

если проверять доступность хостов, то есть test-connection и test-netconnection. если их нет в повершеле 4, то обновитесь на 5.1.
Ответ написан
@beerchaser
Я пришел к следующему виду
Start-Process -Wait -WindowStyle Hidden -FilePath $Global:ProgramPathPath -ArgumentList $Arguments -RedirectStandardOutput $ResultFileName

А затем парсинг файла вывода. Получилось предсказуемее... По времени - сопоставимо.
В вашем примере можно попробовать FileName="cmd" Arguments= "ping с параметрами". StdErr и StdOut лучше развести в разные переменные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы