Bonjour,

Je me suis penché sur l'utilisation des blocs try...catch pour gérer mes erreurs d'exécution et créer du log un peu parlant mais il y a quelque chose qui doit m'échapper dans son fonctionnement.

Pour mes tests, j'ai volontairement crée 2 erreurs lors de la copie d'un fichier d'un répertoire à un autre : une erreur de droit d'accès au répertoire de destination et une erreur de fichier à copié non existant.

A l'exécution de ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$source = "E:\Scripts\old\test.txt"
$dest = "C:\test\test.txt"
Copy-Item $source $dest
J'ai donc soit cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Copy-Item : Impossible de trouver le chemin d'accès «*E:\Scripts\old\test.txt*», car il n'existe pas.
Au caractère E:\Scripts\dev\Sans titre1.ps1:22 : 1
+ Copy-Item $source $dest
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (E:\Scripts\old\test.txt:String) [Copy-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
Soit celle-là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Copy-Item : L'accès au chemin d'accès 'C:\test\test.txt' est refusé.
Au caractère E:\Scripts\dev\Sans titre1.ps1:22 : 1
+ Copy-Item $source $dest
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (E:\Scripts\old\test2.txt:FileInfo) [Copy-Item], UnauthorizedAccessException
    + FullyQualifiedErrorId : CopyFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand
Voilà donc ce que j'essaye pour attraper et personnaliser le retour de ces erreurs mais qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
$source = "E:\Scripts\old\test.txt"
$dest = "C:\test\test.txt"
try{
    Copy-Item $source $dest -ErrorAction Stop
}catch [CopyFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand]{
    Write-Host "pas les droits"
}catch [PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand]{
    Write-Host "existe pas"
}
OU

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
$source = "E:\Scripts\old\test.txt"
$dest = "C:\test\test.txt"
try{
    Copy-Item $source $dest -ErrorAction Stop
}catch [Microsoft.PowerShell.Commands.CopyItemCommand.CopyFileInfoItemUnauthorizedAccessError]{
    Write-Host "pas les droits"
}catch [Microsoft.PowerShell.Commands.CopyItemCommand.PathNotFound]{
    Write-Host "existe pas"
}
Quelqu'un pourrait-il m'expliquer pourquoi cela n'est pas bon svp, car là je sèche...
Merci d'avance