2012-07-12 104 views
11

找了這個,但找不到解決辦法。通過「額外」輸出,我指的是寫入輸出在錯誤消息文本後發出的額外文本。即:有沒有辦法抑制Write-Error cmdlet的「額外」輸出?

write-error -Message "test" 

生產:

write-error -Message "test" : test 
+ CategoryInfo   : NotSpecified: (:) [Write-Error], WriteErrorException 
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException 

我想只看到文本「測試」,並通過運行該腳本PS一個Process對象從標準錯誤檢索。

我知道一個複雜的正則表達式(捕捉所有可能出現在類別中的潛在字符等)可以開發,但我想避免這種情況。不要忘記,由於控制檯的原因,Write-Error還會在每第80個字符位置注入一個換行符,因此也必須考慮到這一點。

有沒有一種方法可以告訴Powershell(2.0)在寫入stderr並僅寫入消息部分時不要那麼羅嗦?

回答

7

,我認爲是不可能的限制的錯誤的輸出,但你可以解決辦法是這樣的:

$Host.UI.WriteErrorLine("My custom error") 
+0

非常感謝!這將會訣竅! – joebalt 2012-07-12 20:41:01

+1

好主意,但不幸的是然後錯誤輸出重定向到標準輸出'2>&1'不再工作。 – 2015-04-14 12:08:29

4

$ Host.UI.WriteErrorLine不更新$錯誤變量:

PS> $error.Clear() 
PS> $Host.UI.WriteErrorLine("My custom error") 
My custom error 

PS> $Error.Count 
0 

您應該使用Write-Error小命令,但輸出仍是冗長:

PS> Write-Error "My custom error" 
Write-Error "My custom error" : My custom error 
    + CategoryInfo   : NotSpecified: (:) [Write-Error], WriteErrorException 
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException 

釷使用內置的$ ErrorView變量輸出較少的詳細消息的選項,其默認值爲「正常」(詳細)。您可以將其設置爲「CategoryView」以獲取簡短消息。

PS> $ErrorView="CategoryView" 
PS> Write-Error "My custom error" 
NotSpecified: (:) [Write-Error], WriteErrorException 
+1

'$ error'的另一個解決方法是使用$ error.add(「我的自定義錯誤」)。定製錯誤的最佳方法是創建一個寫入自定義錯誤消息的函數,並在需要時將其添加到$ error。 – 2012-07-13 09:22:35

+1

爲了修改函數中的'$?'自動變量,可以添加一個'Write-Error「我的自定義錯誤」-ErrorAction靜靜地繼續。 – 2012-07-13 09:31:37

相關問題