Question Gestion erreur avec trap throw - resolu

Plus d'informations
il y a 9 ans 4 mois #22875 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

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

Plus d'informations
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 \&quot; -ErrorAction Stop\&quot; à rename-item
[code:1]
try {
get-item -Path $pathdest$item_source | Rename-Item -NewName {$_.name -replace \&quot;.txt$\&quot;,\&quot;.tid\&quot;} -ErrorAction Stop
}
catch {
write \&quot;erreur de renomage\&quot;
}
[/code:1]

une autre astuce consiste a verifier avant si le dossier ou fichier existe !

[code:1]if (test-Path $(\&quot;$pathdest$item_source\&quot; -replace \&quot;.txt$\&quot;,\&quot;.tid\&quot;)) {
write-host \&quot;impossible de renomé le fichier existe deja\&quot;
}
else {
get-item -Path $pathdest$item_source | Rename-Item -NewName {$_.name -replace \&quot;.txt$\&quot;,\&quot;.tid\&quot;}
}[/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.

Plus d'informations
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 \&quot; -ErrorAction Stop\&quot; 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.

Plus d'informations
il y a 9 ans 4 mois #22885 par xyz
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é.

\&quot;l'idée est de faire un message à l’écran que je pourrais à terme mettre dans un logs.txt (proprement).\&quot;
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.

Plus d'informations
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
Propulsé par Kunena