Question catch Error[0] et EZLog module
- Arnaud Petitjean
- Hors Ligne
- Modérateur
il y a 5 mois 1 semaine #34181
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet catch Error[0] et EZLog module
Hello Gabriel,
Ok faisons comme ça. Nous attendons de tes nouvelles .
Arnaud
Ok faisons comme ça. Nous attendons de tes nouvelles .
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.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 5 mois 1 semaine - il y a 5 mois 1 semaine #34183
par Gabriel
Réponse de Gabriel sur le sujet catch Error[0] et EZLog module
et voici des nouvelles
j'ai reproduis sur les 2 ordi (et je penses que vous pouvez le faire aussi)
le message d'erreur apparait en fonction d'une erreur particuliere : quand il manque une accolade "{" ou "}"
voici le script qui met en place le journal et qui charge les fonctions (il y aura 2 fonctions avec 2 erreurs de typo differentes "(" et "{")
Script test.ps1
Test-FonctionAvecErreur1.ps1 (erreur lié a une parenthese manquante)
Test-FonctionAvecErreur2.ps1 (erreur lié a une accolade manquante)
les logs resultantes on voit que la premiere passe et est loggé, la 2eme est ignoré (c'est carrement le block Catch qui est ignoré)
coté console:
le message d'erreur apparait en fonction d'une erreur particuliere : quand il manque une accolade "{" ou "}"
voici le script qui met en place le journal et qui charge les fonctions (il y aura 2 fonctions avec 2 erreurs de typo differentes "(" et "{")
Script test.ps1
[CmdletBinding()]
param(
)
BEGIN{
Import-Module ("{0}\_Modules\EZLog" -f $PSScriptRoot)
$Tempus = (get-date -f yyyyMMdd_HHmmss)
$Journal = "{0}\{1}_{2}.log" -f $PSScriptRoot,$Tempus,((split-path -leaf $PSCommandPath) -replace ".ps1","" )
$PSDefaultParameterValues = @{ 'Write-EZLog:LogFile' = $Journal ; 'Write-EZLog:Delimiter' = '|' }
Write-EZLog -Header
Write-EZLog -Category INF -Message ( "[^o^] > Greetings Programs!" ) -ToScreen
Write-EZLog -Category INF -Message ( "Version EZlog: {0}" -f ((get-module ezlog) | select -ExpandProperty version) ) -ToScreen
}
PROCESS{
try { . ("{0}\Test-FonctionAvecErreur1.ps1" -f $PSScriptRoot) }
catch {
# throw $Error[0]
Write-EZLog -Category INF -Message ( "{0}" -f $Error[0] )
Write-EZLog -Category INF -Message ( "Test-FonctionAvecErreur1.ps1 Error" )
}
try { . ("{0}\Test-FonctionAvecErreur2.ps1" -f $PSScriptRoot) }
catch {
# throw $Error[0]
Write-EZLog -Category INF -Message ( "{0}" -f $Error[0] )
Write-EZLog -Category INF -Message ( "Test-FonctionAvecErreur2.ps1 Error" )
}
}
END{
Write-EZLog -Category INF -Message ( "[^_^] > End of the Line.... ... .. ." ) -ToScreen
Write-EZLog -Footer
}
Test-FonctionAvecErreur1.ps1 (erreur lié a une parenthese manquante)
function Test-FonctionAvecErreur1 {
[CmdletBinding()]
param(
$prout = "toto"
)
if ($prout -match "toto"){
write-host "Je le savais!"
(
}
else {
write-host "Zut!"
}
}
Test-FonctionAvecErreur2.ps1 (erreur lié a une accolade manquante)
function Test-FonctionAvecErreur2 {
[CmdletBinding()]
param(
$prout = "toto"
)
if ($prout -match "toto"){
write-host "Je le savais!"
}
}
else {
write-host "Zut!"
}
}
les logs resultantes on voit que la premiere passe et est loggé, la 2eme est ignoré (c'est carrement le block Catch qui est ignoré)
+----------------------------------------------------------------------------------------+
Script fullname : D:\Workspace\Dev\ps_test-EZLogError\Test.ps1
When generated : 2024-04-08 18:45:27
Current user : ordi\gab
Current computer : ordi
Operating System : Microsoft Windows 10 Professionnel
OS Architecture : 64 bits
+----------------------------------------------------------------------------------------+
2024-04-08 18:45:27| INF| [^o^] > Greetings Programs!
2024-04-08 18:45:27| INF| Version EZlog: 2.2.7
2024-04-08 18:45:27| INF| At D:\Workspace\Dev\ps_test-EZLogError\Test-FonctionAvecErreur1.ps1:9 char:4
+ (
+ ~
An expression was expected after '('.
At D:\Workspace\Dev\ps_test-EZLogError\Test-FonctionAvecErreur1.ps1:9 char:4
+ (
+ ~
Missing closing ')' in expression.
2024-04-08 18:45:27| INF| Test-FonctionAvecErreur1.ps1 Error
2024-04-08 18:45:27| INF| [^_^] > End of the Line.... ... .. .
+----------------------------------------------------------------------------------------+
End time : 2024-04-08 18:45:27
Total duration (seconds) : 1
Total duration (minutes) : 0.01
+----------------------------------------------------------------------------------------+
coté console:
PS D:\Workspace\Dev\ps_test-EZLogError> .\Test.ps1
2024-04-08 18:45:27| INF| [^o^] > Greetings Programs!
2024-04-08 18:45:27| INF| Version EZlog: 2.2.7
Write-EZLog: D:\Workspace\Dev\ps_test-EZLogError\Test.ps1:31
Line |
31 | Write-EZLog -Category INF -Message ( "{0}" -f $Error[0] )
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Error formatting a string: Input string was not in a correct format. Failure to parse near offset 112.
| Unexpected closing brace without a corresponding opening brace..
2024-04-08 18:45:27| INF| [^_^] > End of the Line.... ... .. .
Dernière édition: il y a 5 mois 1 semaine par Gabriel.
Connexion ou Créer un compte pour participer à la conversation.
- Alastor
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 35
- Remerciements reçus 1
il y a 5 mois 4 jours #34194
par Alastor
Réponse de Alastor sur le sujet catch Error[0] et EZLog module
Bonjour,
Quel résultat attendus tu ?
Car là; c'est powershell qui est à la ramasse ce qui est normal, et EzLog est hors de cause... mais powershell également...
J'ai fait le test avec le programme suivant, les deux autres fichiers ps1 étant inchangés.
Voila le résultat dans la console :
C'est l'analyse syntaxique de powershell qui réagit, du coup, même les try/catch échouent, ce qui est normal.
Quel résultat attendus tu ?
Car là; c'est powershell qui est à la ramasse ce qui est normal, et EzLog est hors de cause... mais powershell également...
J'ai fait le test avec le programme suivant, les deux autres fichiers ps1 étant inchangés.
[CmdletBinding()]
param(
)
BEGIN{
write-host "begin"
}
PROCESS{
write-host "process"
try {
write-host "try 1"
. ("{0}\Test-FonctionAvecErreur1.ps1" -f $PSScriptRoot)
}
catch {
write-host "catch 1"
throw $Error
}
try {
write-host "try 2"
. ("{0}\Test-FonctionAvecErreur2.ps1" -f $PSScriptRoot)
}
catch {
write-host "catch 2"
throw $Error
}
}
END{
write-host "end"
}
Voila le résultat dans la console :
> .\test.ps1
begin
process
try 1
catch 1
Au caractère C:\Users\xxx\Downloads\test\Test-FonctionAvecErreur1.ps1:8 : 10
+ (
+ ~
Une expression est attendue après « ( ».
Au caractère C:\Users\xxx\Downloads\test\Test-FonctionAvecErreur1.ps1:8 : 10
+ (
+ ~
Parenthèse fermante « ) » manquante dans l’expression.
Au caractère C:\Users\xxx\Downloads\test\test.ps1:19 : 9
+ throw $Error
+ ~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (System.Collections.ArrayList:ArrayList) [], RuntimeException
+ FullyQualifiedErrorId : Au caractère C:\Users\xxx\Downloads\test\Test-FonctionAvecErreur1.ps1:8 : 10
+ (
+ ~
Une expression est attendue après « ( ».
Au caractère C:\Users\xxx\Downloads\test\Test-FonctionAvecErreur1.ps1:8 : 10
+ (
+ ~
Parenthèse fermante « ) » manquante dans l’expression.
C'est l'analyse syntaxique de powershell qui réagit, du coup, même les try/catch échouent, ce qui est normal.
Connexion ou Créer un compte pour participer à la conversation.
- Alastor
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 35
- Remerciements reçus 1
il y a 5 mois 4 jours - il y a 5 mois 4 jours #34195
par Alastor
Réponse de Alastor sur le sujet catch Error[0] et EZLog module
Le seul moyen de faire ce que tu souhaites est de séparer les analyses syntaxiques, ce que tu dois pouvoir faire avec un "import-module" de tes ps1 contenant les fonctions.
Ce faisant et sauf erreur de ma part, l'analyse syntaxique aura lieu dans l'import, et tu auras une exception propre dans le ps1 principal dans lequel les try/catch feront alors leurs boulot.
Mais à ma connaissance, aucun programme, dans aucun langage, ne peut gérer lui même les erreurs syntaxiques, c'est à dire ne peut fonctionner malgré des erreurs syntaxiques, avec des erreurs grammaticales éventuellement, mais pas syntaxique.
Ce faisant et sauf erreur de ma part, l'analyse syntaxique aura lieu dans l'import, et tu auras une exception propre dans le ps1 principal dans lequel les try/catch feront alors leurs boulot.
Mais à ma connaissance, aucun programme, dans aucun langage, ne peut gérer lui même les erreurs syntaxiques, c'est à dire ne peut fonctionner malgré des erreurs syntaxiques, avec des erreurs grammaticales éventuellement, mais pas syntaxique.
Dernière édition: il y a 5 mois 4 jours par Alastor.
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
- Auteur du sujet
- Hors Ligne
- Membre elite
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 4 mois 4 semaines #34210
par Gabriel
Réponse de Gabriel sur le sujet catch Error[0] et EZLog module
Bonjour Alastor
le pb de la parenthese lui passe, visiblement effectivement il y aun soucis de formatage.
par contre au bureau certains de mes collegues utilise un autre module (github.com/mithrandyr/SimplyLog/) qui lui log les erreur meme avec le { ou }
comme la dit Laurent c'est un bug et je vais donc creer un issue sur github. si c'est reparable Laurent le dira, sinon on le fermera.
merci de tes lumieres comme toujours.
simplement la possibilité de logger l'erreur, une partie de mes scripts sont lancés soit en job soit via le task scheduler, et donc un retour visuel n'est pas disponible.Quel résultat attendus tu ?
le pb de la parenthese lui passe, visiblement effectivement il y aun soucis de formatage.
par contre au bureau certains de mes collegues utilise un autre module (github.com/mithrandyr/SimplyLog/) qui lui log les erreur meme avec le { ou }
comme la dit Laurent c'est un bug et je vais donc creer un issue sur github. si c'est reparable Laurent le dira, sinon on le fermera.
merci de tes lumieres comme toujours.
Connexion ou Créer un compte pour participer à la conversation.
- Alastor
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 35
- Remerciements reçus 1
il y a 4 mois 4 semaines #34211
par Alastor
Réponse de Alastor sur le sujet catch Error[0] et EZLog module
Bonjour,
De mon point de vue, qui est peut-être faux car mon analyse provient de vieilles expériences avec d'autres langages, ce n'est pas un bug.
En fait, tu es tellement loin des bonnes pratiques de powershell, que tu parviens à masquer une erreur de syntaxe qui n'est pas vu au chargement du script, lors de l'analyse syntaxique, mais seulement lors de l'exécution.
Si tu faisais un import-module de tes fichiers de fonction, ou si tu exécutais tes scripts ps1 comme un vrai script appelé depuis ton ps1 "principal", powershell et Ezlog n'auraient aucun problème à gérer. Mais là, tu masques une erreur syntaxique.
Si ta fonction erronée était directement saisie dans le script, celui -ci ne démarrerait pas du tout à cause de l'erreur syntaxique.
Du coup question, tes collègues importent-ils leurs fonctions de la même manière que toi ?
De mon point de vue, qui est peut-être faux car mon analyse provient de vieilles expériences avec d'autres langages, ce n'est pas un bug.
En fait, tu es tellement loin des bonnes pratiques de powershell, que tu parviens à masquer une erreur de syntaxe qui n'est pas vu au chargement du script, lors de l'analyse syntaxique, mais seulement lors de l'exécution.
Si tu faisais un import-module de tes fichiers de fonction, ou si tu exécutais tes scripts ps1 comme un vrai script appelé depuis ton ps1 "principal", powershell et Ezlog n'auraient aucun problème à gérer. Mais là, tu masques une erreur syntaxique.
Si ta fonction erronée était directement saisie dans le script, celui -ci ne démarrerait pas du tout à cause de l'erreur syntaxique.
Du coup question, tes collègues importent-ils leurs fonctions de la même manière que toi ?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.131 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- catch Error[0] et EZLog module