Powershell постоянно получает выходные данные из командлета - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в Powershell.Мне нужно непрерывно перехватывать вывод из вызова командной строки в Powershell и предпочтительно отправлять его в другую функцию.В настоящее время мой код ожидает завершения внешней программы.Вот что у меня есть:

$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = "DataSet.exe"
$startInfo.CreateNoWindow = $true
$startInfo.UseShellExecute = $false
$startInfo.RedirectStandardError = $true
$startInfo.RedirectStandartOutput = $true
$startInfo.Arguments = "1 off"

$process = New-Object System.Diagnostics.Process
$process.StartInfo = $startInfo
$process.Start() | Out-Null
$stdOut = $process.StandardOutput.ReadToEnd()
$stdErr = $process.StandardError.ReadToEnd()
$process.WaitForExit()

process($stdOut)
process($stdErr)

# Do stuff with $process.ExitCode

Вот что мне нужно

...

while (readOutput)
{
  process($stdOut)
  process($stdErr)
}

...

1 Ответ

0 голосов
/ 11 мая 2018

Я бы рекомендовал использовать фоновое задание для такого рода вещей, например, вот так:

$job = Start-Job -ScriptBlock { & "some.exe" }

while ($job.State -eq 'Running') {
    Receive-Job $job -OutVariable $outValue -ErrorVariable $errValue

    if ($outValue) { Do-SomethingWith $outValue }
    ir ($errValue) { Do-OtherWith $errValue }

    Start-Sleep -Milliseconds 200
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...