2012-07-12 10 views
11

Cercato questo ma non riesce a trovare una risoluzione. Con l'output "extra", intendo il testo extra che il Write-Output emette dopo il testo del messaggio di errore. cioè .:C'è un modo per sopprimere l'output "extra" dal cmdlet Write-Error?

write-error -Message "test" 

produce:

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

mi piacerebbe vedere solo il testo "test", e recuperare da stderr tramite un oggetto di processo che esegue lo script PS.

Conosco una regex complessa (per catturare TUTTI i potenziali caratteri che potrebbero apparire nella categoria, ecc.), Ma vorrei evitarlo. Non dimenticare che Write-Error inietta anche un carattere di nuova riga ogni 80 ° posizione del char a causa della console, quindi dovrebbe essere preso in considerazione.

C'è un modo per dire a Powershell (2.0) di non essere così prolisso quando si scrive su stderr e si scrive solo la parte del messaggio?

risposta

7

Credo che non è possibile limitare l'uscita di un errore, ma si può aggirare in questo modo:

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

Grazie mille! Questo farà il trucco! – joebalt

+1

Buona idea, ma sfortunatamente poi il reindirizzamento dell'output dell'errore allo standard output '2> & 1' non funziona più. –

4

$ Host.UI.WriteErrorLine non aggiorna la variabile $ error:

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

PS> $Error.Count 
0 

è necessario utilizzare il cmdlet Write-Error ma l'uscita è ancora verbose:

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

Th ere è un'opzione per emettere un messaggio meno dettagliato con la variabile $ ErrorView incorporata, il suo valore predefinito è 'Normale' (dettagliato). È possibile impostarlo su "CategoryView" per brevi messaggi.

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

Un'altra soluzione per '$ error' è usare $ error.add (" My custom error ")'. Il modo migliore per personalizzare gli errori è creare una funzione che scrive messaggi di errore personalizzati e, se necessario, aggiungerla a $ error. –

+1

Per modificare la variabile automatica '$?' Nella funzione è possibile aggiungere un errore di scrittura "Errore personalizzato" -ErrorAction silentlycontinue. –

Problemi correlati