Рейтинг:0

PowerShell в Windows: Start-Process не работает, если используются аргументы перенаправления вывода

флаг rs

Почему Старт-Процесс не удается найти исполняемый файл (не в пути), если -RedirectStandardOutput или же -RedirectStandardError указаны?

т.е.

[X:\] Start-Process -FilePath "prog.exe" -WorkingDirectory (Get-Location).Path

Программа запускается и работает как надо. Но когда я добавляю перенаправление вывода, все разваливается:

[X:\] Start-Process -FilePath "prog.exe" -WorkingDirectory (Get-Location).Path -RedirectStandardOutput stdout.txt
Start-Process: Эта команда не может быть запущена из-за ошибки: Система не может найти указанный файл.

Перенаправление с помощью 1>stdout.txt оператор работает как положено.

Кажется, это не влияет на программы, которые находятся в каталогах, перечисленных в ДОРОЖКА. Я не могу понять, в чем здесь логика. Перенаправления не должны иметь ничего общего с разрешением двоичного пути в первую очередь.

Работает на Windows 10 Профессиональная.

Обновлять: Полная трассировка и простой репродуктор

PS> кот .\hello.c
#include <stdio.h>

int main(int argc, char** argv)
{
        printf("Мех\п");
        получитьсимвол();
        вернуть 0;
}

PS> cl hello.c
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.29.30138 для x86
Авторское право (C) Microsoft Corporation. Все права защищены.

Привет
Инкрементальный компоновщик Microsoft (R) версии 14.29.30138.0
Авторское право (C) Microsoft Corporation. Все права защищены.

/out:привет.exe
привет.obj

PS> Start-Process -FilePath hello.exe -WorkingDirectory(Get-Location).Path

PS> Start-Process -FilePath hello.exe -WorkingDirectory(Get-Location).Path -RedirectStandardOutput stdout.txt
Start-Process: Эта команда не может быть запущена из-за ошибки: Система не может найти указанный файл.
В строке:1 символ:1
+ Start-Process -FilePath hello.exe -WorkingDirectory(Get-Location).Pa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo: InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId: InvalidOperationException, Microsoft.PowerShell.Commands.StartProcessCommand

Обновление 2:

Кажется, что использование абсолютного пути для исполняемого файла является обходным путем для решения проблемы. (Хотя это не объясняет, почему направление вывода в первую очередь нарушает разрешение имени/пути исполняемого файла)

JosefZ avatar
флаг th
Странно... Что выводит `where.exe "prog.exe"`? До и после примера _running_ (т.е. без какого-либо параметра `-RedirectStandard`)? Может быть, `prog.exe` изменяет `$env:PATH` или сопоставление дисков?
флаг rs
Вывод программы на самом деле не имеет значения / не имеет никакого эффекта, поскольку поломка происходит в PowerShell еще до того, как программа будет выполнена. Программы, которые я пытаюсь выполнить с использованием этой схемы, представляют собой консольные приложения Windows без графического интерфейса. Обновил вопрос с минимальным репродуктором.
флаг rs
Забыл добавить, что программа, которую нужно запустить, является нашим внутренним приложением, поэтому я знаю, что она не возится с `PATH` - если только реализация MSVC CRT не делает что-то подозрительное при передаче вывода :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.