2012-08-15 143 views
12

在PS腳本自動化,我有以下一些功能SVN任務:如何在Powershell中抑制stderr輸出?

function SvnUrlExists($url) 
{ 
    svn info $url | out-null 2>&1 
    return $? 
} 

因爲這明確地測試一些SVN倉庫URL是否存在,我都不感興趣。任何錯誤輸出。然而,儘管一切,我發現了大約在PowerShell中重定向stderr暗示2>&1將其重定向到stdout這還是輸出錯誤信息,

 
svn: warning: W170000: URL 'blahblah' non-existent in revision 26762 

svn: E200009: Could not display info for all targets because some targets don't exist 

不幸的是,這嚴重打亂了我的腳本的輸出。

我在做什麼錯,我該如何抑制這個錯誤輸出?

回答

15

以防萬一,因爲我做了別人網上搜尋類似字詞:

後,我一直在敲打我的額頭撞在這幾個小時,當然我發現分鐘內解決方案張貼在這裏的問題後:

svn info $url 2>&1 | out-null 

這工作就像一個魅力。

+0

另外,如果你有一個較大的命令,你可以在'$把它包裝()| out-null「來獲得相同的效果。例如:'$(svn info $ url 2>&')|出null'。當命令很長時,我會這樣做,或者我需要在腳本中將它分成幾行。 – Nick 2012-08-15 15:53:48

+0

@尼克:啊,謝謝。但是,它不一定是'$(svn info $ url)2>&1 |出null'? (注意'2>&1'的位置。) – sbi 2012-08-16 09:34:11

+0

哦,哇,我完全誤讀了你的文章。是的,它應該是'$(svn info $ url)|出null'。這取決於你想要在'2>&1'上進行錯誤檢查的位置。我不能說沒有測試它,但我認爲它不應該在'''裏面或外面。您可能實際上可以將'2>&1'完全關閉,就像我說的,沒有測試我無法確定。 – Nick 2012-08-16 14:41:02

3

投票答案我產生一個錯誤。解決方案結束了以下內容:

cmd /c "MyProgram MyArguments 2>&1" | Out-Null 
+1

如果您有$ ErrorActionPreference ='Stop',將stderr重定向到stdout仍然會產生錯誤並停止腳本執行。但是如果你不把stderr重定向到標準輸出,錯誤不會發生。奇怪的! – 2017-10-10 12:44:30

+0

@RafałKłys:確實很奇怪,它是_bug_:請參閱https://github.com/PowerShell/PowerShell/issues/4002 – mklement0 2017-10-10 13:17:14

8

如果要抑制標準錯誤使用:

svn info $url 2>$null