Я знаю, что Powershell имеет фоновую функциональность работы с Start-Job
, Wait-Job
и т.д., но можно использовать Process
класс от System.Diagnostics
в .Net, чтобы достичь того же? Если да, то каков был бы лучший способ сделать это/какие преимущества у него были бы по сравнению с механизмом Powershell по умолчанию для запуска фоновых заданий?Использования systemdiagnostics.process для выполнения фоновых заданий в Powershell
ответ
Можно, конечно, использовать объект Process для «запуска» исполняемый asychronously и с объектом процесса вы получите обратно вы можете проверить, чтобы увидеть, если EXE делается или убить процесс. Трюк возвращает информацию о выходе и потоке ошибок без вмешательства в консоль, пока программа запускается, поэтому вы можете делать другие вещи. Из документов MSDN, похоже, используя BeginOutputReadLine
может сделать трюк:
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Хотя, если вы хотите, чтобы фоновое поведение, которое вы должны выполнить StandardOutput.ReadToEnd() в фоновом потоке, а затем создать механизм чтобы получить этот вывод из основного потока консоли, который выглядит как большая работа, и на данный момент я могу придумать какие-либо преимущества перед фоновыми заданиями PowerShell.
Другой подход заключается в создании рабочей области для выполнения работы bg, как это указывает blog post by Jim Truher.
Это не элегантный или хорошо документированный. Он создает объект System.Diagnostic.Process и выполняет некоторые общие инициализации. Как только вы получите объект «Процесс», вы можете выполнить дополнительные настройки на нем, а затем вызвать Process.Start, чтобы начать процесс.
function New-Process($cmd, $arguments, [switch]$stdout, [switch]$stdin, [switch]$stderr, [switch]$shellexec, [switch]$showwindow)
{
$process = New-Object "System.Diagnostics.Process"
$startinfo = New-Object "System.Diagnostics.ProcessStartInfo"
$startinfo.FileName = $cmd
$startinfo.Arguments = $arguments
$startinfo.WorkingDirectory = $pwd.Path
$startinfo.UseShellExecute = $shellexec
$startinfo.RedirectStandardInput = $stdin
$startinfo.RedirectStandardOutput = $stdout
$startinfo.RedirectStandardError = $stderr
if (!$showwindow) {
$startinfo.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
}
$process.StartInfo = $startinfo
return $process
}
- 1. Rails пул фоновых заданий
- 2. Исходный вывод фоновых заданий
- 3. Создание приостановленных фоновых заданий
- 4. Отслеживание времени выполнения различных асинхронных фоновых заданий в Sidekiq
- 5. Синхронизация фоновых заданий PowerShell, которые используют Add-Content
- 6. Мониторинг хода выполнения PowerShell
- 7. Использование фоновых заданий для загрузки файлов
- 8. Уменьшить скорость загрузки фоновых заданий?
- 9. Остановка фоновых заданий после выхода из оболочки
- 10. Создание пакетных заданий в PowerShell
- 11. Многопоточность против фоновых заданий в Rails
- 12. Преимущество производительности - несколько PowerShells против фоновых заданий
- 13. Уведомлять о завершении фоновых заданий в bash
- 14. Средство для выполнения фоновых операций в Scala
- 15. Как кэшировать страницы с использованием фоновых заданий?
- 16. JRuby: Обработка фоновых заданий с помощью Sidekiq
- 17. Функция для печати списка фоновых процессов в C (например, заданий)?
- 18. Получение выходных данных из фоновых заданий
- 19. Запуск фоновых заданий с эластичным beanstalk
- 20. Сценарий Bash не дожидается завершения фоновых заданий
- 21. Запуск PowerShell в планировщике заданий
- 22. Дождитесь Баш фоновых заданий в сценарии должны быть завершены
- 23. Эквивалент Powershell для амперсанда bash (&) для фоновых процессов forking/running
- 24. Resque или Gearman - выбор правильного инструмента для фоновых заданий
- 25. Ограничение количества фоновых работников для выполнения
- 26. Проект оболочки для выполнения фоновых процессов
- 27. Планирование заданий PowerShell в Control-M
- 28. Выполнение нескольких фоновых параллельных заданий с помощью Rails
- 29. Powershell: Запуск нескольких рабочих мест в parralel и просматривать потоковые результаты фоновых заданий
- 30. Доступный способ использования нескольких задержек: очередей заданий
Как я могу выполнить powershell.exe, чтобы вызвать файл test1.ps1 и получить вывод в журнал? – Kiquenet