Подавить выходные сообщения powershell

У меня есть сервер сборки TFS 2013 Update 2. Когда я создаю проект, я извлекаю некоторые файлы, изменяю некоторые вещи и снова возвращаю их. Это прекрасно работает. Единственная проблема заключается в том, что когда кто-то извлечет один из этих файлов, сервер сборки увидит это как ошибку, и сборка будет частично успешной. На самом деле это просто информационное сообщение, но сборка воспринимает его как ошибку. Как я могу подавить эти сообщения?

У меня есть следующая команда Powershell:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse

Команда из TFS 2013 Power Tools.

Я пробовал следующее, но это не работает:

  • Добавьте -ErrorAction с Igonore и SilentlyContinue
  • Добавить -Out-Null
  • Попробуйте и очистите Catch

Сообщение, которое выдается для каждого файла: Путь к файлу: открыт для редактирования в Рабочей области; Ральф Янсен

Спасибо


person LockTar    schedule 01.10.2014    source источник


Ответы (4)


Я считаю, что он должен быть в стандартном потоке вывода для отправки в ноль. Попробуй это:

$Null = Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse *>&1 

*>&1 перенаправляет весь вывод на стандартный вывод, а $null является зарезервированной для этой цели переменной. Это более эффективно, чем передача по конвейеру в out-null.

Другой альтернативой может быть установка предпочтения действия для ошибок. Я уже видел, как командлеты не признают общий параметр -ErrorAction.

$ErrorActionPreference = 'SilentlyContinue'
Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse
$ErrorActionPreference = 'Continue'
person Noah Sparks    schedule 01.10.2014
comment
Можете ли вы опубликовать скриншот того, о чем вы говорите? Это было бы полезно. - person Noah Sparks; 02.10.2014

После некоторых усилий я успешно получил его для наших сборок Tfs! \о/

Вы должны закончить командную строку с *>&1 | out-null

Например:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse *>&1 | out-null

Побочным эффектом является то, что все сообщения, вызывающие ошибки, теряются.

person Philippe    schedule 16.09.2015

Попробуйте один из них:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse -ErrorAction SilentlyContinue -wa 0 | Out-null

or

[void](Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse -ErrorAction SilentlyContinue -wa 0)

Вы также можете присвоить результат своего командлета переменной (и ничего с ней не делать):

$throwaway = Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse -ErrorAction SilentlyContinue -wa 0
person Raf    schedule 01.10.2014
comment
Как выглядит ложный вывод? Если это предупреждение, вы можете добавить переключатель -wa 0 к одной из вышеуказанных команд и повторить попытку. - person Raf; 01.10.2014
comment
Вывод - это только сообщение, которое я сказал в вопросе выше... Я думаю, это то же сообщение, которое появляется в окне вывода Visual Studio, если вы извлекаете файл, который уже извлечен кем-то другим... Просто информация/ предупреждающее сообщение... - person LockTar; 01.10.2014
comment
Попробуйте исправленный ответ с переключателем -wa. - person Raf; 01.10.2014

Попробуй это:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse 2>&1 >$null

Аргумент 2>&1 перенаправляет stderr в stdout, а аргумент >$null перенаправляет stdout в null, поэтому ничего не будет отображаться.

Или, если вы хотите только скрыть данные, отправляемые на stderr, просто перенаправьте это:

Add-TfsPendingChange -Edit -Item $PathToFolderToCheckout -Recurse 2>$null
person aphoria    schedule 01.10.2014
comment
Я не использую TFS, поэтому не могу проверить вашу команду напрямую. Можете ли вы показать нам скриншот того, что происходит? - person aphoria; 02.10.2014