2010-08-04 16 views
10

Quiero tener acceso al mismo mensaje que las impresiones de Powershell Cuando se envía un registro de error para el flujo de salida¿Cómo puedo obtener las descripciones de excepción de powershell en una cadena?

Ejemplo:

Este es el mensaje de excepción En C: \ Documents and Ajustes \ BillBillington \ Desktop \ psTest \ exThrower.ps1: 1 Char: 6 + tirar < < < (ArgumentException New-Object ("Este es el excepción")) <; + CategoryInfo: OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId: Esta es la excepción

que cuando un consiguen el último ErrorRecord haciendo $ error me parece que no puede averiguar [0] cómo obtener esta información de una manera simple

Encontré esta función 'Resolver-Error' de las extensiones de la comunidad here que hace más o menos lo que quiero, pero imprime una gran lista de cosas semi-formateadas que no necesito Tengo que tirar

¿Hay forma de acceder? ¿El mensaje que utiliza Powershell o, en su defecto, una forma más simple de obtener hash de los valores que me preocupan para que pueda ponerlos en una cadena en el formato que elija?

Respuesta

13

Si quieres un poco de mensaje más corto (más fácil de usar a veces?) Que @tomasr sugiere que esto hará:

$error[0].ToString() + $error[0].InvocationInfo.PositionMessage 

Obtendrá algo como:

Cannot find path 'C:\TEMP\_100804_135716\missing' because it does not exist. 
At C:\TEMP\_100804_135716\test.ps1:5 char:15 
+ Get-ChildItem <<<< missing 

Esta información técnica se excluirse:

+ CategoryInfo   : ObjectNotFound: (C:\TEMP\_100804_135716\missing:String) [Get-ChildItem], ItemNotFoundException 
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand 
13

¿Qué tal:

$x = ($error[0] | out-string) 

es eso lo que querías?

+0

1 + Gracias, gracias – Willbill

4

lo tomé un poco más porque no me gusta la multilines f rom $ error [0] .InvocationInfo.PositionMessage.

Function FriendlyErrorString ($thisError) { 
    [string] $Return = $thisError.Exception 
    $Return += "`r`n" 
    $Return += "At line:" + $thisError.InvocationInfo.ScriptLineNumber 
    $Return += " char:" + $thisError.InvocationInfo.OffsetInLine 
    $Return += " For: " + $thisError.InvocationInfo.Line 
    Return $Return 
} 

[string] $ErrorString = FriendlyErrorString $Error[0] 
$ErrorString 

Puede mirar lo demás es dotados para construir su propia cadena a través de:

$Error | Get-Member 
$Error[0].InvocationInfo | Get-Member 
0
Foreach ($Errors in $Error){ 
    #Log Eintrag wird zusammengesetzt und in errorlog.txt geschrieben 
    "[$Date] $($Errors.CategoryInfo.Category) $($Errors.CategoryInfo.Activity) $($Errors.CategoryInfo.Reason) $($Errors.CategoryInfo.TargetName) $($Errors.CategoryInfo.TargetType) $($Errors.Exception.Message)" |Add-Content $Path\errorlog.txt -Encoding UTF8 
} 

También puede hacer esto y obtendrá toda la información sobre el error

Cuestiones relacionadas