Вопрос об использовании PowerShell Select-String, exiftool (-k) - PullRequest
2 голосов
/ 19 февраля 2020

В скрипте PowerShell я пытаюсь отфильтровать вывод команды exiftool(-k).exe, приведенной ниже, используя Select-String.

Я пробовал множество перестановок, но ни одна из них не работает, и я всегда вижу нефильтрованный результат. Что мне нужно сделать, чтобы отфильтровать вывод этой команды?

Start-Process -FilePath "C:\PowerShell\exiftool(-k).exe" -ArgumentList test.jpg |
  Select-String -pattern 'GPS' -SimpleMatch

Ответы [ 2 ]

1 голос
/ 19 февраля 2020
  • Вы не можете напрямую получать выходные данные от 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.

0 голосов
/ 19 февраля 2020

Называть неудобно. Переименуйте его в exiftool.exe и запустите без запуска.

rename-item 'exiftool(-k).exe' exiftool.exe    

C:\Users\bfbarton\PowerShell\exiftool.exe test-jpg | Select-String GPS 

Или

$env:path += ';C:\Users\bfbarton\PowerShell'
exiftool test.jpg | Select-String GPS

Веб-сайт рекомендует «переименовать в« exiftool.exe »для использования в командной строке. ». https://exiftool.org. Даже в unix он не будет работать без скобок.

Существует также возможность использования оператора вызова. Использование завершения табуляции фактически делает это:

& '.\exiftool(-k).exe' test.jpg | select-string gps
...