Question catch Error[0] et EZLog module

Plus d'informations
il y a 6 mois 4 jours - il y a 5 mois 3 semaines #34163 par Gabriel
Hello

dans un de mes scripts je fait un try/catch sur le chargmeent de fonction (stocké dans des fichiers séparés)
dir c:\script\fonction\*.ps1 | foreach {
    try { . $_.fullname}
catch{
    write-ezlog -Category ERR -Message ($Error[0])
}


ca renvoit une erreur sur un fichier (le pb n'est pas la fonction dans le fichier je sais comment corriger, mais je veux capturer l'erreur dans les log)
At c:\script\function_test.ps1:70 char:2
+   }
+  ~
Unexpected token '}'} in expression or statement.


si je fais 
$Error[0].toString() | out-file .\error.log -Append


le texte est ajouté dans le fichier error.log, c'est une string multiligne

j'ai essayé 
$Error[0].toString() | foreach { write-ezlog -Category ERR -Message ($_)

ou 

$Error[0].toString() -split "\r\n" | foreach { write-ezlog -Category ERR -Message ($_)


l'erreur EZLog:
write-ezlog : Error formatting a string: Input string was not in a correct format...


techniquement je ne pense pas que c'est un bug dans EZLog, il attend une string simple ligne

une idée? 
p.s.: je sais qu'EZLog est un projet connu de certains 
Dernière édition: il y a 5 mois 3 semaines par Gabriel.

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

Plus d'informations
il y a 6 mois 3 jours - il y a 6 mois 3 jours #34164 par Alastor
Réponse de Alastor sur le sujet catch Error[0] et EZLog module
Comme un string n'est pas un iterable, la commande suivante :
$Error[0].toString() | foreach { write-ezlog -Category ERR -Message ($_)

te retourne un seul objet, la string dans sans totalité, non ?

Et comme, il me semble qu'en powershell le retour à la ligne dans un string est `n, la commande suivante :
$Error[0].toString() -split "\r\n" | foreach { write-ezlog -Category ERR -Message ($_)

ne trouve rien sur quoi faire le split, et retourne donc toute la chaine, non ?

Personnellement, je tenterais un
write-ezlog -Category ERR -Message (Error[0].toString() -replace "`n"," ")

Mais je ne suis sur de rien.
Dernière édition: il y a 6 mois 3 jours par Alastor.

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

Plus d'informations
il y a 6 mois 3 jours #34165 par Gabriel
Réponse de Gabriel sur le sujet catch Error[0] et EZLog module
bonjour Alastor

je viens d'essayer et meme erreur
write-ezlog -Category ERR -Message ($Error[0].toString() -replace "`n"," ")
write-ezlog -Category ERR -Message ($Error[0].toString() -replace "`r`n"," ")

merci pour la propisition.

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

Plus d'informations
il y a 6 mois 11 heures #34168 par Arnaud Petitjean
Bonjour Messieurs,

Tout d'abord je tenais à vous remercier de la remontée de ce bug.
N'hésitez pas à le faire sur GitHub en ouvrant une issue.

Cela étant dit, je viens d'essayer de reproduire le problème et je n'y parviens pas... Quelle version utilisez-vous ?

Une solution de contournement, pourrait être je pense, de convertir la donnée en JSON avant de l'envoyer dans le log.

Arnaud


 

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 5 mois 4 semaines - il y a 5 mois 3 semaines #34175 par Gabriel
Réponse de Gabriel sur le sujet catch Error[0] et EZLog module
bonsoir Arnaud

je n'ai pas créer de bug sur github, car je n'en étais pas sur. 
j'utilise EZLog 2.2.7

le script démarre par charger des fonctions stocker dans des fichiers ps1 et l'une des fonctions contient des erreurs (genre parenthèse manquante)
l'erreur qui est alors renvoyer contient tout ça
C:\temp> .\test2.ps1 
2024-04-04 22:34:21| INF | [^o^] > Greetings programs! 
2024-04-04 22:34:21| INF | EZLog version : 2.2.7 

C:\temp\_modules\function_get-Test.ps1:56 char:20 
+                 "NotReferenced"
+                                ~
Missing statement block in switch statement clause.

At C:\temp\_modules\function_get-Test.ps1:61 char:1
+ } ## end function_get-Test 
+ ~
Unexpected token '}' in expression or statement.
    + CategoryInfo          : ParserError: (:) , parseException 
    + FullyQua1ifiedErrorId : MissingSwitchStatementClause 

Write-EZLog : Error formatting a string : Input string was not in a correct format.. 
At C:\temp\test2.ps1:29 char:4 
              Write-EZLog -Category ERR -Message ($mess)
   + CategoryInfo          : InvalidOperation: (2024-04-04 22:3...r statement.{1}:string) [Write-EZLog], RuntimeException
   + FullyQualifiedErrorId : FormatError,Write-EZLog 


en convertissant en json on aune autre erreur
$mess = $Errror[0] | convertto-json
write-ezlog -category INF -Message $mess


ce qui génère un autre message d'erreur
ConvertTo-Json : The type 'System.Collections.ListDictionaryInternal' is not supported for serialization or deserialization of a dictionary. Keys must be strings.     + CategoryInfo          : InvalidOperation: (System.Collecti...tionaryInternal:ListDictionaryInternal) [ConvertTo-Json], InvalidOperationException    + FullyQualifiedErrorId : NonStringKeyInDictionary,Microsoft.PowerShell.Commands.ConvertToJsonCommand


j'ai 2 machines la perso est en powershell 7.4. et je n'ai pas d'erreur, la pro je suis en 5.1 et j'ai l'erreur

par contre il y a une diff dans les codes de tests. je vais essayer de créer un script commun et retester

 
Dernière édition: il y a 5 mois 3 semaines par Gabriel.

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

Plus d'informations
il y a 5 mois 3 semaines #34176 par Gabriel
Réponse de Gabriel sur le sujet catch Error[0] et EZLog module
bon avec le meme code (pure code de test), je n'arive pas a reproduire mon pb.

je dois etudier mon script ou l'erreur apparait voir la difference.

comme je pourrais pas le faire avant plusieurs joursn on va mettre le topic en pause.

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

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