Résolu [Résolu] Suppression des fichiers corrompus ou illisibles

Plus d'informations
il y a 3 ans 10 mois - il y a 3 ans 10 mois #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 3 ans 10 mois par Laurent Dardenne. Raison: Coquille

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

Plus d'informations
il y a 3 ans 10 mois #29852 par Arnaud Petitjean
Bonjour Laurent,

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

Arnaud

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.

Plus d'informations
il y a 3 ans 10 mois #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 3 ans 10 mois #29855 par Arnaud Petitjean
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

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.

Plus d'informations
il y a 3 ans 10 mois #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 3 ans 10 mois #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.138 secondes
Propulsé par Kunena