[Résolu] Suppression des fichiers corrompus ou illisibles

Plus d'informations
il y a 2 semaines 2 jours - il y a 2 semaines 2 jours #29851 par Laurent Dardenne
Salut,
as-tu reçu mon dernier message ? celui-ci a été effacé suite à la migration du forum.

Tutoriels PowerShell
Dernière édition: il y a 2 semaines 2 jours par Laurent Dardenne. Raison: Coquille

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

Plus d'informations
il y a 2 semaines 2 jours #29852 par Arnaud
Bonjour Laurent,

Non, il ne l'a pas eu. Je suis désolé...

Arnaud

Créateur du forum de la communauté PowerShell Francophone

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

Plus d'informations
il y a 2 semaines 2 jours #29853 par Laurent Dardenne
Salut,
Arnaud wrote:

Non, il ne l'a pas eu. Je suis désolé...

Ok.
donc ma réponse :
On peut effectivement utiliser un remove-item.
Mais là on couple 2 traitements, ceci est préférable :
function Test-ValidImageFormat {
    #Add-Type -AssemblyName System.Drawing
   Param([String] $Path)

 Try {
    Write-Debug "Test file '$path'"
    $image=$null
    $Image=[System.Drawing.Image]::FromFile($Path)
    $Image.Dispose()
    Write-Debug "Fichier graphique valide."
    Return $true
 } catch [System.OutOfMemoryException]{
    Write-Debug "Fichier graphique corrompu."
    return $false
 }
 #les autres exceptions sont propagées
}
La fonction renvoi vrai ou faux.
Ensuite c'est un traitement qui détermine que faire de cette valeur :
Add-Type -AssemblyName System.Drawing
Cd c:\temp\test

$Result=Dir *.jpg,*.png -PipelineVariable CurrentFile |
Foreach-Object {
    #ici l'usage du foreach permet d'adresser le scope de la variable CurrentFile
 Add-Member -InputObject $CurrentFile  -MemberType NoteProperty -Name (Test-ValidImageFormat $CurrentFile) -Value $state -PassThru
}

$Result|
 Where-Object {  -not $_.isValidFormat }|
 Select-Object -ExpandProperty Fullname
Ce qui permet, si demain tu veux appeler un outil de récupération de fichier graphique,le principal est fait.

Il reste le pb de la dépendance sur l'assembly, le mieux serait d’utiliser un module et un manifeste qui chargerait l'assembly.

Je laisse à d'autre le soin de faire mieux ;-)

Tutoriels PowerShell

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

Plus d'informations
il y a 1 semaine 6 jours #29855 par Arnaud
Suite à la non-migration des derniers messages et notamment de celui de Laurent, voici sa réponse :

Salut,
arj wrote:

Je n'ai pas réussi à utiliser la dernière version cumulant la function + assembly, le résultat me liste tous les fichiers *;jpg et *.png du dossier indépendamment de leur état.


C'est une erreur de réécriture à la volée, désolé.


$Result=Dir *.jpg,*.png -PipelineVariable CurrentFile |
Foreach-Object {
    #ici l'usage du foreach permet d'adresser le scope de la variable CurrentFile
 Add-Member -InputObject $CurrentFile  -MemberType NoteProperty -Name  isValidFormat -Value (Test-ValidImageFormat $CurrentFile)  -PassThru
}
$Result|
 Where-Object {  -not $_.isValidFormat }|
 Select-Object -ExpandProperty Fullname

arj wrote:

Si possible que le premier script me génère juste un fichier txt contenant tous les fichiers corrompus 1 par ligne ou séparer par un point-virgule

Oui, tu reprends la mécanique et tu changes le traitement, ici la destination :


$Result|
 Where-Object {  -not $_.isValidFormat }|
 Select-Object -ExpandProperty Fullname|
 Out-File c:tempToDelete.txt
 
 Type c:tempToDelete.Txt

On pourrait simplifier le tout, mais je te laisse faire le reste

Créateur du forum de la communauté PowerShell Francophone

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

Plus d'informations
il y a 3 jours 29 minutes #29870 par arj
Bonjour,

Quelqu'un pour m'indiquer comment rendre le script récursif afin de parcourir toute une arborescence ?
Merci

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

Plus d'informations
il y a 2 jours 21 heures #29871 par Laurent Dardenne
Salut,
il est préférable de gérer la récursion sur le cmdet Get-ChildItem:
Dir *.jpg,*.png -PipelineVariable CurrentFile -Recurse|
 FaitQQchose ...

Tutoriels PowerShell

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

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