2012-03-01 14 views
7

Soy bastante nuevo en Powershell y he escrito algunos scripts bastante grandes, es decir, un script que llama a otros scripts que tienen funciones anidadas en otras funciones. Cuando abro este script, a veces recibo errores que no sé de dónde vinieron. ¿Hay alguna manera fácil de ver dónde terminó este script para poder solucionar el error?Cómo rastrear el flujo de scripts

Respuesta

12

Se puede utilizar para obtener Set-PsDebug PowerShell para dar salida a casi todas las líneas que se ejecuta:

Set-PSDebug -Trace 1; 

El único inconveniente es que probablemente va a terminar con un montón de salida para vadear ...

+0

Esto es exactamente lo que estaba buscando. Sin embargo, sí veo la gran ventaja de averiguar cómo depurar adecuadamente, así que lo investigaré más adelante. –

0

Normalmente, el error incluye el script de llamada.

De lo contrario, podría intentar ejecutar el script de Window PowerShell ISE en modo de depuración. Esto le permite usar puntos de interrupción y paso por el código.

Artile sobre el uso del ISE para la depuración:

ISE debugging

respecto Arcass

4

Para la depuración para ver donde están viniendo de su error de depuración Sugiero con el ISE o con PowerGUI.

También puede obtener una transcripción de su secuencia de comandos mediante el cmdlet Start-Transcript que escribirá toda la actividad de la consola en el archivo. Entonces puede poner declaraciones como Write-Host "Doing XYZ" y esas aparecerán en el registro de transcripciones.

si se captura excepciones con un intento de captura o utilizar una trampa que puede escribir el número de línea y columna de la excepción así:

$ErrorActionPreference = 'Stop' 

trap { 
    Write-Host "Error on line $($_.InvocationInfo.ScriptLineNumber)" 
    exit 1 
} 

try { 
    Get-Item DoesntExist 
} catch { 
    Write-Host ("Error occurred on line: " + $_.InvocationInfo.ScriptLineNumber) 
} 

$_.InvocationInfo tiene otros detalles acerca eran el error está viniendo.

Al establecer $ErrorActionPreference = "Stop", se asegura de que cualquier error desencadena el bloque trap{}, que en este caso escribe la línea a la que llegó y sale el script.

+0

Agregado más sobre el manejo de errores 'trap {}', ya que esto permite la solución de problemas generales de cualquier error sin necesidad de poner 'try {} catch {}' alrededor de demasiadas declaraciones. –

Cuestiones relacionadas