Подавить вывод консоли в PowerShell

У меня есть вызов GPG в сценарии PowerShell следующим образом:

$key = & 'gpg' --decrypt "secret.gpg" --quiet --no-verbose > $null

Я не хочу, чтобы вывод GPG отображался на главной консоли, когда я запускаю скрипт.

Я не знаю, как это сделать, из-за того, что не знаю PowerShell. Я искал Stack Overflow и искал в Google способ сделать это, нашел много способов сделать это, но ничего из этого не сработало.

Например, "> $ null" не действует. Я нашел --quiet --no-verbose параметры для GPG, чтобы выводить меньше данных в консоль, но это не совсем тихо, и я уверен, что в PowerShell есть способ.


person Dominik Antal    schedule 13.09.2013    source источник
comment
См. Также ... http://stackoverflow.com/questions/16744451/powershell-suppress-output-from-non-powershell-commands   -  person SteveC    schedule 29.05.2014
comment
возможный дубликат Как подавить вывод stderr в Powershell?   -  person nobody    schedule 20.06.2014
comment
Возможный дубликат Что лучше (чище) способ игнорировать вывод в PowerShell?.   -  person Peter Mortensen    schedule 21.10.2017


Ответы (3)


Попробуйте перенаправить вывод следующим образом:

$key = & 'gpg' --decrypt "secret.gpg" --quiet --no-verbose >$null 2>&1
person Dave Sexton    schedule 13.09.2013
comment
В PowerShell v3 он мог перенаправлять все выходные потоки следующим образом: *>$null. - person Ansgar Wiechers; 13.09.2013
comment
@AnsgarWiechers. Возможно, добавьте это в качестве ответа, чтобы он мог получать положительные голоса. - person Dan Solovay; 28.06.2017
comment
@DanSolovay Нет. Это всего лишь небольшая вариация ответа Дэйва. - person Ansgar Wiechers; 29.06.2017
comment
Это определенно правильный ответ. | out-null было просто недостаточно. - person JustAGuy; 02.07.2018

Попробуйте перенаправить вывод на Out-Null. Вот так,

$key = & 'gpg' --decrypt "secret.gpg" --quiet --no-verbose | out-null

person vonPryz    schedule 13.09.2013
comment
>$null делает то же самое, что и | Out-Null. - person Ansgar Wiechers; 13.09.2013
comment
Может быть, и так ... но было бы разумнее использовать этот командлет, вместо того, чтобы помнить о произвольном взломе для отмены вывода. - person Erutan409; 17.09.2015
comment
@ Erutan409 почему >$null взлом? Серьезный вопрос. - person theyetiman; 02.02.2016
comment
@theyetiman Полагаю, на основе мнения. Я думаю, что использование встроенного Out-Null в PowerShell будет лучше при отладке чужого кода или даже вашего собственного, если это было давно. Это преднамеренная функция, которая предусмотрена и для вышеупомянутой проблемы. - person Erutan409; 02.02.2016
comment
Определенно вопрос моего мнения, >$null легко догадываюсь для меня как пользователя linux - person codaamok; 03.11.2016
comment
См. Это сообщение: stackoverflow.com/questions/5260125/ - person Kody; 14.11.2016
comment
Я не особо об этом думал, но предположил, что ›$ null было псевдонимом | Out-Null, чтобы пользователи CMD и Bash могли быстро его использовать. Однако, подумав об этом | Out-Null действительно использует канал, поэтому потребуется как минимум один дополнительный шаг выполнения, превышающий ›..... Возможно, что | Out-Null предназначен для стандартизованного использования в PowerShell и, в конечном итоге, отменяет ›$ null, что делает› $ null предпочтительным использованием. Похоже, мне, возможно, придется изменить мои скрипты, которые в настоящее время используют | Out-Null, чтобы вместо этого использовать ›$ null. - person Ben Personick; 16.11.2016
comment
Хм, просто погуглил, и этот элемент обмена стека, кажется, показывает, что ›$ null намного быстрее разрешает выполнение команд. stackoverflow.com/questions/5260125/ - person Ben Personick; 16.11.2016

Это дубликат этого вопроса, с ответом, который содержит измерение времени различными методами.

Вывод: используйте [void] или > $null.

person Dirk    schedule 06.12.2016
comment
Почему бы вам тогда не пометить как дубликат? - person Mason Schmidgall; 15.08.2018
comment
Потому что я никогда этого не делал и сомневался в этом. Сейчас это помечено. - person Dirk; 16.08.2018