Question
$error
- steph_d
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 65
- Remerciements reçus 0
il y a 17 ans 4 mois #3289
par steph_d
@+ Steph
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 4 mois #3290
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:$error
steph_d écrit:
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:
[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
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].Comment expliquer la différence de fonctionnement entre l'affichage et mon mail ça ça me laisse perplexe !
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:
Seul le SDK .NET est traduit, les autres framework tel que PowerShell ne sont pas traduit.Je l'avais déjà mais comme je suis gourmand je l'aurai préféré en gaullois. Mais bon ça suffira bien.
[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.
- steph_d
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 65
- Remerciements reçus 0
il y a 17 ans 4 mois #3291
par steph_d
@+ Steph
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 \"2 cases\" 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
[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 \"2 cases\" 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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 4 mois #3292
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:$error
steph_d écrit:
D'après ce comportement on peut supposer la présence de 2 \"couches\", la gestion des exceptions .NET et celle du host, ici PowerShell.exe.
Schématiquement, la 1er couche nous dit \"il y a une erreur\", 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é
steph_d écrit:
Et avec PowerShell il y a beaucoup de petit \"truc\" comme ça à approfondir puisque ce n'est documenté null part. Et à force c'est saoulant
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 \"exit\" } |
Export-CliXml (Join-Path (Split-Path $profile) \"commandHistory.clixml\"«»)
}
## Load our previous history
$historyFile = (Join-Path (Split-Path $profile) \"commandHistory.clixml\"«»)
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
L'index 0 est ici le dernier élément inséré. Il faut juste savoir si cette collection est une LIFO ou une FIFO.A moins que la sortie du trap ne vienne modifier le $error[0] avant d'en créer un autre ?
D'après ce comportement on peut supposer la présence de 2 \"couches\", la gestion des exceptions .NET et celle du host, ici PowerShell.exe.
Schématiquement, la 1er couche nous dit \"il y a une erreur\", 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é
steph_d écrit:
Effectivement cela ne l'est pas il s'agit juste d'approfondir la compréhension de ce fonctionnement.Enfin bon c'est pas grave.
Et avec PowerShell il y a beaucoup de petit \"truc\" comme ça à approfondir puisque ce n'est documenté null part. Et à force c'est saoulant
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 \"exit\" } |
Export-CliXml (Join-Path (Split-Path $profile) \"commandHistory.clixml\"«»)
}
## Load our previous history
$historyFile = (Join-Path (Split-Path $profile) \"commandHistory.clixml\"«»)
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- $error