Question $error

Plus d'informations
il y a 17 ans 4 mois #3289 par steph_d
Réponse de steph_d sur le sujet Re:$error
Impeccable !

Donc dans le premier cas (c'est celui-là qui me concerne) on a directement un ErrorRecord alors que dans le second on a une exception qui elle a un ErrorRecord. Moi je travaillai avec le second cas alors que c'était le premier.

Bon maintenant je vais retravailler tout ça pour bien piger le fonctionnement. Comment expliquer la différence de fonctionnement entre l'affichage et mon mail ça ça me laisse perplexe !

msdn.microsoft.com/en-us/library/aa717491(VS.85).aspx
Je l'avais déjà mais comme je suis gourmand je l'aurai préféré en gaullois. Mais bon ça suffira bien.

Merci

Stephane

@+ Steph

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 4 mois #3290 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:$error
steph_d écrit:

Comment expliquer la différence de fonctionnement entre l'affichage et mon mail ça ça me laisse perplexe !

Je pense que c'est un objet composé que la console affiche dans son intégralité alors que l'affectation ne prend que le premier objet, le champ message de l'exception et pas le détail contenu dans le champs ErrorRecord qui est égal à error[1].
Je pense que la liste des erreurs contient toutes les erreurs envoyées sur le pipeline d'erreur et que le champs ErrorRecord contient le détail, vu de PS, lié à une exception :
[code:1]
function test()
{
trap
{
\"Exception détectée dans le programme !\"
$contenu=$error[0]
$contenu
$contenu.GetType()
$error[0].GetType()
write-Warning \"---\"
$e=$error[0]
if ($e -is [System.Management.Automation.ErrorRecord])
{
$contenu =$e.InvocationInfo.ScriptLineNumber
$contenu +=$e.InvocationInfo.ScriptName
}
else
{
$contenu =$e.ErrorRecord.InvocationInfo.ScriptLineNumber
$contenu +=$e.ErrorRecord.InvocationInfo.ScriptName
}
Write-host \"Contenu= $contenu\"
break
}

1/$null
}
$error.Clear()
Test

$error.count
$error[0]
$error[0].gettype()
$error[0].ErrorRecord
$error[0].ErrorRecord.gettype()
$error[1]
$error[1].gettype()[/code:1]
Que donne [code:1]$mail.Body = $Error[0][/code:1]steph_d écrit:

Je l'avais déjà mais comme je suis gourmand je l'aurai préféré en gaullois. Mais bon ça suffira bien.

Seul le SDK .NET est traduit, les autres framework tel que PowerShell ne sont pas traduit.
[edit]
Ce que l'on peut constater est que la liste $error est différente entre son contenu à l'intérieur d'un bloc trap et une fois celui-ci terminé.<br><br>Message édité par: Laurent Dardenne, à: 21/11/08 12:39

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 4 mois #3291 par steph_d
Réponse de steph_d sur le sujet Re:$error
Laurent Dardenne écrit:
[Je pense que c'est un objet composé que la console affiche dans son intégralité alors que l'affectation ne prend que le premier objet, le champ message de l'exception et pas le détail contenu dans le champs ErrorRecord qui est égal à error[1].

Je suis arrivé à la même conclusion sauf que ca me paraissait pas normal. En fait dans mon cas je me suis rendu compte que une exception remplissait \&quot;2 cases\&quot; de $error, mais une fois sorti du trap.
C'est un comportement bizarre quand même ou plutôt pas facile à comprendre. Parce que si on regarde bien ca respecte pas l'ordre de $error.

$error.clear
trap
$error[0] : message erreur
$error[1] : vide

je sors du trap
$error[0] : message erreur
$error[1] : message erreur + nom fichier et inidcations !

A moins que la sortie du trap ne vienne modifier le $error[0] avant d'en créer un autre ?

Enfin bon c'est pas grave. Mon problème est résolu un grand merci à toi Laurent.

Stephane<br><br>Message édité par: steph_d, à: 21/11/08 13:55

@+ Steph

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 4 mois #3292 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:$error
steph_d écrit:

A moins que la sortie du trap ne vienne modifier le $error[0] avant d'en créer un autre ?

L'index 0 est ici le dernier élément inséré. Il faut juste savoir si cette collection est une LIFO ou une FIFO.
D'après ce comportement on peut supposer la présence de 2 \&quot;couches\&quot;, la gestion des exceptions .NET et celle du host, ici PowerShell.exe.
Schématiquement, la 1er couche nous dit \&quot;il y a une erreur\&quot;, on se dit merci c'est déjà pas mal, la seconde et c'est exactement là que ça ce passe, et là on dit bravo pour le temps gagné :P
steph_d écrit:

Enfin bon c'est pas grave.

Effectivement cela ne l'est pas il s'agit juste d'approfondir la compréhension de ce fonctionnement.
Et avec PowerShell il y a beaucoup de petit \&quot;truc\&quot; comme ça à approfondir puisque ce n'est documenté null part. Et à force c'est saoulant :angry:

En ce moment je travaille sur les événement de PS v2, bah... c'est du même tonneau !
ici on trouve ceci :
[code:1]
## Now in your profile
$maximumHistoryCount = 1kb

## Register for the engine shutdown event
Register-PsEvent ([System.Management.Automation.PsEngineEvent]::Exiting) -Action {
Get-History -Count $maximumHistoryCount | ? { $_.CommandLine -ne \&quot;exit\&quot; } |
Export-CliXml (Join-Path (Split-Path $profile) \&quot;commandHistory.clixml\&quot;«»)
}

## Load our previous history
$historyFile = (Join-Path (Split-Path $profile) \&quot;commandHistory.clixml\&quot;«»)
if(Test-Path $historyFile)
{
Import-CliXml $historyFile | Add-History
}
[/code:1]
Si ça vous dit, creusez juste ceci :
[code:1]Register-PsEvent ([System.Management.Automation.PsEngineEvent]::Exiting) [/code:1]<br><br>Message édité par: Laurent Dardenne, à: 21/11/08 14:39

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.097 secondes
Propulsé par Kunena