Иногда возникает необходимость в рамках сессии PoSh запустить CMD утилиты. Структура вызова этих команд, из-за вложенности или например из-за удаленного выполнения, может усложниться, а результат их работы станет менее предсказуемым.
В этом случае нам может помочь перенаправление стандартного вывода
Выполнение команды с помощью «символа вызова»
Вызов утилиты CMD через & «ping» ya.ru выводится в самом окне PoSh, а не во внешнем окне CMD
Перенаправление из командлета Start-Process
Можно перенаправить вывод с помощью специального параметра RedirectStandardOutput
Start-Process ping "8.8.8.8" -WindowStyle Hidden -RedirectStandardOutput "C:\SO.txt"
Функция позволяющая задать набор значений для запуска процесса
В том числе задать перенаправление стандартного вывода и вывода ошибок
При этом используется .NET класс System.Diagnostics.ProcessStartInfo
# Задаем параметры запуска процесса $pinfo = New-Object System.Diagnostics.ProcessStartInfo $pinfo.FileName = "nslookup" $pinfo.Arguments = "google.com", "8.8.8" $pinfo.UseShellExecute = $false $pinfo.CreateNoWindow = $true $pinfo.RedirectStandardOutput = $true $pinfo.RedirectStandardError = $true # Создаем объект процесса, используя заданные параметры $process = New-Object System.Diagnostics.Process $process.StartInfo = $pinfo # Запускаем процесс и ждем его завершения $process.Start() | Out-Null $process.WaitForExit() # Получаем в отдельные переменные стандартный вывод и ошибки $exitCode = $process.ExitCode $stderr = $process.StandardError.ReadToEnd() $stdout = $process.StandardOutput.ReadToEnd() # Собираем результаты в один объект, для удобства $result = [pscustomobject]@{ ExitCode = $exitCode stderr = $stderr.Trim() stdout = $stdout.Trim() } $result | ft -Wrap
Из-за того что IP адрес в Arguments указан заведомо неверно, мы получим об этом ошибку в переменную $stderr
Плюс использования этого скрипта заключается в том, что вывод будет записан в отдельные переменные, а так же в нем определяется «код выхода», по которому можно назначить обработку событий.
С кодами ошибок можете ознакомиться например здесь.
А прочитать про варианты выполнения команд оболочки CMD из сеанса PoSh можно тут