Вы не можете напрямую получать выходные данные от Start-Process
вызова [1] , поэтому используя его в pipe бессмысленно .
- Фактически, на Windows ваша программа, запущенная с
Start-Process
, запускается в другом новом окне, где вы увидели нефильтрованный вывод (учитывая, что Select-String
не было применено там ); в вашем вызове окна Start-Process
выдало вообще не выводило , и поэтому ничего не было отправлено на Select-String
, а конвейер в целом не выдал.
Никогда не используйте Start-Process
до синхронно вызовите консольное приложение , чей вывод вы хотите захватить или перенаправить - просто вызовите приложение напрямую :
& "C:\PowerShell\exiftool(-k).exe" test.jpg | Select-String GPS -SimpleMatch
Обратите внимание, что &
, оператор вызова , необходим для этого вызова, потому что ваш путь к исполняемому файлу (double -) заключен в кавычки (здесь необходимо, потому что имя файла содержит (
и )
); &
требуется только для исполняемых путей, которые заключены в кавычки и / или содержат ссылки на переменные; вам не нужно было бы вызывать, например, git ...
.
[1] Хотя вы бы увидели вывод программы в окне вызывающего, если вы добавили -NoNewWindow -Wait
на Start-Process
вызов, вы все равно не сможете захватить , передать или перенаправить it.