Question
Gestion erreur avec trap throw - resolu
- hays
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 41
- Remerciements reçus 0
il y a 9 ans 4 mois #22875
par hays
Gestion erreur avec trap throw - resolu a été créé par hays
Bonjour,
je cherche à comprendre la syntaxe exacte pour gérer les erreurs avec trap
je me fais un script pour suivre le premier livre que les concepteurs de ce site on ecrit, je retourne la syntaxe de mon script dans tous
les sens sans avoir l'affichage de mon message d'erreur.
je colle mon script plus bas, celui-ci fonctionne mais lorsque les fichiers exite deja dans la destination cela génére plusieurs
erreur non bloquante.
la premiere erreur correspond au rename-item
get-item -Path $pathdest\$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"}; #
$Error[1] | Format-list -Force
writeErrorStream : True
Exception : System.IO.IOException: Impossible de créer un fichier déjà existant.
à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
à System.IO.FileInfo.MoveTo(String destFileName)
à Microsoft.PowerShell.Commands.FileSystemProvider.RenameItem(String path, String newName)
TargetObject : C:\mytest2\Nouveau document texte.txt
CategoryInfo : WriteError: (C:\mytest2\Nouveau document texte.txt:String) [Rename-Item], IOException
FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : à <ScriptBlock>, C:\Users\fhays\Desktop\1port.ps1 : ligne 47
PipelineIterationInfo : {0, 1, 1}
PSMessageDetails :
j'ai la meme exeption pour New-Item plus bas dans le script
mon idée n'est pas que cela soit parfait pour l'instant mais ça me permet de travailler sur le chapitre des erreurs.
j'écris le trap avec la bonne syntaxe mais powershell se le met sur l'oreille.
j'ai testé try{}catch{}finaly mais à priori cela fonctionne pas avec les exeptions non bloquantes.
voici le script:
# Nom du script
# V1
#Requires -version 3
##Requires -Modules PSWorkflow, @{moduleName=\"DataOnTap\";ModuleVersion=3.2.0}
##Requires -PSSnapin DiskSnapin -Version 1.2
##Requires -RunAsAdministrator
# Déclaration de variables
#$Host.PrivateData.set_ErrorforegroundColor('red')
$ErrorActionPreference= 'continue'
$pathsource=\"c:\mytest\\"
$pathdest=\"c:\mytest2\\"
$datecrea=get-date -format yyyyMMddHHmmssmms
$rep_source=Get-ChildItem $pathsource -filter *.txt -Recurse #| ForEach-Object{$_.BaseName}
$search_pdf=Get-ChildItem $pathsource -filter *.pdf -Recurse
$rep_dest=Get-ChildItem $pathdest -filter *.tid -Recurse -Force
#DECLARATION DE FONCTION
# debut du cript
# Création des tid avec import des info liés
foreach ($item_source in $rep_source)
{
#$logs= $errortid >>c:\log.txt
#-errorvariable errortid [System.IO.IOException]
$titre_element= $item_source.BaseName
New-Item \"$pathdest\$item_source\" -Force -Type file
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"created: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"creator: admin\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"modified: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"title: $titre_element\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"type: text/plain `n `n `n\"
# Add-Content -Path \"$pathdest\$item_source\" -Value \"`n `n `n `n `n `n\"
Add-Content -Encoding UTF8 -Path $pathdest\$item_source -Value (get-content $item_source.Fullname)
get-item -Path $pathdest\$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"}; #
trap [System.IO.IOException]{ 'test' ; continue }
}
Write-Host \"suite...\"
foreach ($item_pdf in $search_pdf)
{
$titre_element_pdf= $item_pdf.BaseName
$strFile = $pathdest+ $item_pdf +\".meta\"
trap { 'test2' ; continue }
New-Item $strFile -Type file
Copy-Item $item_pdf.FullName -Destination $pathdest
$col_meta=Get-ChildItem $pathdest -filter *.meta -Recurse
}
Write-Host \"suite...\"
foreach ($item_meta in $col_meta)
{
$titre_element_meta= $item_meta.BaseName
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"created: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"modified: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"title: $titre_element_meta\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"type: application/pdf `n `n `n\"
}
Write-Host \"suite...\"
ma version de powershell
Name Value
----
PSVersion 3.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.2.9200.16481
PSCompatibleVersions {1.0, 2.0, 3.0}
PSRemotingProtocolVersion 2.2
je vous remercie pour vos commentaire je suis curieux de savoir ce que je fais mal et pour la commande throw par la même occasion ça bloque.
Message édité par: farid, à: 27/12/16 15:12<br><br>Message édité par: farid, à: 9/01/17 17:52
je cherche à comprendre la syntaxe exacte pour gérer les erreurs avec trap
je me fais un script pour suivre le premier livre que les concepteurs de ce site on ecrit, je retourne la syntaxe de mon script dans tous
les sens sans avoir l'affichage de mon message d'erreur.
je colle mon script plus bas, celui-ci fonctionne mais lorsque les fichiers exite deja dans la destination cela génére plusieurs
erreur non bloquante.
la premiere erreur correspond au rename-item
get-item -Path $pathdest\$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"}; #
$Error[1] | Format-list -Force
writeErrorStream : True
Exception : System.IO.IOException: Impossible de créer un fichier déjà existant.
à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
à System.IO.FileInfo.MoveTo(String destFileName)
à Microsoft.PowerShell.Commands.FileSystemProvider.RenameItem(String path, String newName)
TargetObject : C:\mytest2\Nouveau document texte.txt
CategoryInfo : WriteError: (C:\mytest2\Nouveau document texte.txt:String) [Rename-Item], IOException
FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : à <ScriptBlock>, C:\Users\fhays\Desktop\1port.ps1 : ligne 47
PipelineIterationInfo : {0, 1, 1}
PSMessageDetails :
j'ai la meme exeption pour New-Item plus bas dans le script
mon idée n'est pas que cela soit parfait pour l'instant mais ça me permet de travailler sur le chapitre des erreurs.
j'écris le trap avec la bonne syntaxe mais powershell se le met sur l'oreille.
j'ai testé try{}catch{}finaly mais à priori cela fonctionne pas avec les exeptions non bloquantes.
voici le script:
# Nom du script
# V1
#Requires -version 3
##Requires -Modules PSWorkflow, @{moduleName=\"DataOnTap\";ModuleVersion=3.2.0}
##Requires -PSSnapin DiskSnapin -Version 1.2
##Requires -RunAsAdministrator
# Déclaration de variables
#$Host.PrivateData.set_ErrorforegroundColor('red')
$ErrorActionPreference= 'continue'
$pathsource=\"c:\mytest\\"
$pathdest=\"c:\mytest2\\"
$datecrea=get-date -format yyyyMMddHHmmssmms
$rep_source=Get-ChildItem $pathsource -filter *.txt -Recurse #| ForEach-Object{$_.BaseName}
$search_pdf=Get-ChildItem $pathsource -filter *.pdf -Recurse
$rep_dest=Get-ChildItem $pathdest -filter *.tid -Recurse -Force
#DECLARATION DE FONCTION
# debut du cript
# Création des tid avec import des info liés
foreach ($item_source in $rep_source)
{
#$logs= $errortid >>c:\log.txt
#-errorvariable errortid [System.IO.IOException]
$titre_element= $item_source.BaseName
New-Item \"$pathdest\$item_source\" -Force -Type file
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"created: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"creator: admin\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"modified: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"title: $titre_element\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_source\" -Value \"type: text/plain `n `n `n\"
# Add-Content -Path \"$pathdest\$item_source\" -Value \"`n `n `n `n `n `n\"
Add-Content -Encoding UTF8 -Path $pathdest\$item_source -Value (get-content $item_source.Fullname)
get-item -Path $pathdest\$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"}; #
trap [System.IO.IOException]{ 'test' ; continue }
}
Write-Host \"suite...\"
foreach ($item_pdf in $search_pdf)
{
$titre_element_pdf= $item_pdf.BaseName
$strFile = $pathdest+ $item_pdf +\".meta\"
trap { 'test2' ; continue }
New-Item $strFile -Type file
Copy-Item $item_pdf.FullName -Destination $pathdest
$col_meta=Get-ChildItem $pathdest -filter *.meta -Recurse
}
Write-Host \"suite...\"
foreach ($item_meta in $col_meta)
{
$titre_element_meta= $item_meta.BaseName
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"created: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"modified: $datecrea\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"title: $titre_element_meta\"
Add-Content -Encoding UTF8 -Path \"$pathdest\$item_meta\" -Value \"type: application/pdf `n `n `n\"
}
Write-Host \"suite...\"
ma version de powershell
Name Value
----
PSVersion 3.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.2.9200.16481
PSCompatibleVersions {1.0, 2.0, 3.0}
PSRemotingProtocolVersion 2.2
je vous remercie pour vos commentaire je suis curieux de savoir ce que je fais mal et pour la commande throw par la même occasion ça bloque.
Message édité par: farid, à: 27/12/16 15:12<br><br>Message édité par: farid, à: 9/01/17 17:52
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 4 mois #22878
par Philippe
Réponse de Philippe sur le sujet Re:Gestion erreur avec trap throw
salut farid
déjà regarde ce tuto de Laurent si tu trouve la solution pour trap. idem pour le try/catch
dans ton cas le try peut fonctionné si tu rajoute \" -ErrorAction Stop\" à rename-item
[code:1]
try {
get-item -Path $pathdest$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"} -ErrorAction Stop
}
catch {
write \"erreur de renomage\"
}
[/code:1]
une autre astuce consiste a verifier avant si le dossier ou fichier existe !
[code:1]if (test-Path $(\"$pathdest$item_source\" -replace \".txt$\",\".tid\")) {
write-host \"impossible de renomé le fichier existe deja\"
}
else {
get-item -Path $pathdest$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"}
}[/code:1]
pour le new-item tu les même solutions
.<br><br>Message édité par: 6ratgus, à: 27/12/16 16:30
déjà regarde ce tuto de Laurent si tu trouve la solution pour trap. idem pour le try/catch
dans ton cas le try peut fonctionné si tu rajoute \" -ErrorAction Stop\" à rename-item
[code:1]
try {
get-item -Path $pathdest$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"} -ErrorAction Stop
}
catch {
write \"erreur de renomage\"
}
[/code:1]
une autre astuce consiste a verifier avant si le dossier ou fichier existe !
[code:1]if (test-Path $(\"$pathdest$item_source\" -replace \".txt$\",\".tid\")) {
write-host \"impossible de renomé le fichier existe deja\"
}
else {
get-item -Path $pathdest$item_source | Rename-Item -NewName {$_.name -replace \".txt$\",\".tid\"}
}[/code:1]
pour le new-item tu les même solutions
.<br><br>Message édité par: 6ratgus, à: 27/12/16 16:30
Connexion ou Créer un compte pour participer à la conversation.
- hays
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 41
- Remerciements reçus 0
il y a 9 ans 4 mois #22879
par hays
Réponse de hays sur le sujet Re:Gestion erreur avec trap throw
Bonjour,
merci pour votre réponse.
je n'avais pas penser à mettre \" -ErrorAction Stop\" avec le try {} je ne sais pas si c'est la solution car je cherche à afficher un message à l’écran et laisser le script s’exécuter.
l'idée est de faire un message à l’écran que je pourrais à terme mettre dans un logs.txt (proprement).
par contre pour le if{]else{} j'y ai déjà pensais mais je n'arrivais pas à mettre en forme.
je vais testé ça rendra mon script plus intelligent.
Quoi qu'il en soit résoudre le problème du script n'est pas une fin en soit, je cherche à maitriser le chapitre erreur et debug, chaque façon d'afficher les erreurs finalement
merci pour votre réponse.
je n'avais pas penser à mettre \" -ErrorAction Stop\" avec le try {} je ne sais pas si c'est la solution car je cherche à afficher un message à l’écran et laisser le script s’exécuter.
l'idée est de faire un message à l’écran que je pourrais à terme mettre dans un logs.txt (proprement).
par contre pour le if{]else{} j'y ai déjà pensais mais je n'arrivais pas à mettre en forme.
je vais testé ça rendra mon script plus intelligent.
Quoi qu'il en soit résoudre le problème du script n'est pas une fin en soit, je cherche à maitriser le chapitre erreur et debug, chaque façon d'afficher les erreurs finalement
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 9 ans 4 mois #22885
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Gestion erreur avec trap throw
Salut,
l'instruction trap était dédié à la v1.
L'équipe PS incite à utiliser try/catch.
Si je me souviens bien pour Trap utilise Continue dans le corps du scriptblock associé.
\"l'idée est de faire un message à l’écran que je pourrais à terme mettre dans un logs.txt (proprement).\"
Tu peux utiliser Log4Posh , cela demande un peu de temps d'apprentissage par contre
l'instruction trap était dédié à la v1.
L'équipe PS incite à utiliser try/catch.
Si je me souviens bien pour Trap utilise Continue dans le corps du scriptblock associé.
\"l'idée est de faire un message à l’écran que je pourrais à terme mettre dans un logs.txt (proprement).\"
Tu peux utiliser Log4Posh , cela demande un peu de temps d'apprentissage par contre
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- hays
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 41
- Remerciements reçus 0
il y a 9 ans 4 mois #22887
par hays
Réponse de hays sur le sujet Re:Gestion erreur avec trap throw
merci je vais regarder c'est sympa pour l'info
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Gestion erreur avec trap throw - resolu