Question [Résolu] Redirection des messages d'erreurs

Plus d'informations
il y a 10 ans 11 mois #19391 par Fabien
Bonjour,
Dans l'exemple suivant je redirige les messages d'erreurs dans un fichier texte:

[code:1]
if (Test-Path \"$Users\$ProfilName\Documents\"«»){
Copy-Item -Path \"$Users\$ProfilName\Documents\" -Destination \"$Disk`:\$NomPc\SVG\Profils\$ProfilName\Mes Documents\\" -Recurse -Force 2>>\"$Disk`:\$NomPc\Erreurs.txt\"
[/code:1]

Cela fonctionne très bien sauf que j'ai le détail du message d'erreur et j'aimerai avoir que le message de base (la 1ère ligne) sans les détails du script.

j'ai essayé avec \" $error >>\"$Disk`:\$NomPc\Erreurs.txt\" \"
ou: \" $error.Exception.message >>\"$Disk`:\$NomPc\Erreurs.txt\"
mais ça ne marche pas.

Merci de votre aide.<br><br>Message édité par: Arnaud, à: 8/04/15 09:25

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

Plus d'informations
il y a 10 ans 11 mois #19392 par Laurent Dardenne
Salut,
tu peux utiliser $ErrorView : help ErrorView

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #19419 par Fabien
Merci,
Le résultat est plus succin serte, mais pas très clair.

Par exemple, pour une copie du dossier \&quot;Mes documents\&quot; lorqu'il rencontre les \&quot;reparspoint\&quot; il me retourne l'erreur suivante:
avec $ErrorView= \&quot;CategoryView\&quot;
[code:1]PermissionDenied: (Ma musique:«»DirectoryInfo) [Copy-Item], UnauthorizedAccessException[/code:1]

avec $ErrorView= \&quot;Normalview\&quot;
[code:1]Copy-Item : L'accès au chemin d'accès 'C:\Users\Fabien\Documents\Ma musique' est
refusé.
Au caractère F:\SCRIPTS\Powershell\BackUp-Ps\Test1.ps1:423 : 4
+ Copy-Item -Path \&quot;$Users\$ProfilName\Documents\&quot; -Destination \&quot;$Disk`:\$NomPc\S ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (Ma musique:«»DirectoryInfo) [Copy-Item
], UnauthorizedAccessException
+ FullyQualifiedErrorId : CopyDirectoryInfoItemUnauthorizedAccessError,Microsoft.
PowerShell.Commands.CopyItemCommand[/code:1]

Or moi j'aimerai juste:
[code:1]Copy-Item : L'accès au chemin d'accès 'C:\Users\Fabien\Documents\Ma musique' est
refusé.[/code:1]

Est-ce possible?

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

Plus d'informations
il y a 10 ans 11 mois #19421 par Laurent Dardenne
Bylliboy écrit:

Est-ce possible?

Avec ton approche je ne pense pas, c'est le mécanisme de redirection qu'il faudrait intercepter, comme ici .

Tu peux remplacer par des try/catch et reconstruire le message d'erreur ou encore utiliser un autre mécanisme de log. Tu peux également laisser en l'état et retravailler ton fichier de log afin d'en extraire que les lignes qui t'intéressent, une sorte de Convert-ErrorLog.

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #19422 par Fabien
Oui j'avais déjà pensé au \&quot;try/catch\&quot; mais j'essayais de trouver une solution plus simpliste mais je pense que cette solution s'impose.

merci de tes réponses Laurent.

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

Plus d'informations
il y a 10 ans 11 mois #19427 par Arnaud Petitjean
Hello Bylliboy,

Dans tous les cas de figure, si tu veux faire mieux, en termes de rendu des messages d'erreur, qu'avec l'opérateur de redirection &gt;&gt; il va falloir fournir un petit effort supplémentaire... ;)

Je te propose au lieu d'utiliser \&quot;try/catch\&quot;, d'utiliser le paramètre commun -ErrorVariable qui est présent sur toutes les commandelettes afin de stocker l'erreur potentielle dans une variable. Ensuite il n'y a plus qu'à extraire certaines données de la variable et le tour est joué.

Essaie ceci, par exemple :
[code:1]
PS &gt; gci C:\windows\AppCompat\Appraiser\Telemetry\Baseline -ErrorVariable err
Get-ChildItem : L'accès au chemin d'accès 'C:\windows\AppCompat\Appraiser\Telemetry\Baseline' est refusé.
Au niveau de ligne : 1 Caractère : 4
+ gci &lt;&lt;&lt;&lt; C:\windows\AppCompat\Appraiser\Telemetry\Baseline -ErrorVariable err
+ CategoryInfo : PermissionDenied: (C:\windows\AppC...emetry\Baseline:«»String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

PS &gt; $err[0].exception.message
L'accès au chemin d'accès 'C:\windows\AppCompat\Appraiser\Telemetry\Baseline' est refusé.
[/code:1]

Autrement dit, après chaque commande il te faudra tester si la variable $err contient de la donnée, et si c'est le cas, logger ton message d'erreur.

Arnaud<br><br>Message édité par: Arnaud, à: 7/04/15 11:41

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.

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