Expert Powershell ici ?

Bonjour,

Est-ce quelqu'un serait dispo pour me donner un coup de main sur powershell ?

J'ai l'arborescence en pièce jointe.

J'aimerais via une commande Powershell, supprimer l'ensemble des fichiers wav se trouvant dans mon arborescence en prenant comme paramètre la date de créations des fichiers.

Suppression des fichiers donc la date de création ayant une date inférieure à 90 jours.

Note : Si le répertoire est vide (plus aucun fichier ou sous répertoire), il doit disparaitre aussi.

Merci

7arbo.docx (12.59 Ko)

Bonjour,

J'utilise ce genre d'outil pour établir l'arborescence d'un répertoire avec FileSystemObject :

capture

- Le chemin complet est sur la colonne B.

- Sélection indique que le fichier est antérieur à la date 24/08/2023.

- Nb fichiers correspond au nombre de fichiers dans le répertoire.

Code :

Public IndexListe As Integer, IndexLien As Long
Public Fso As Object
Public Liste_Fichiers  As Variant

Sub ListerLesFichiers(ByVal Repertoire As String, Optional ByVal ChainesARechercher As String)

Dim I As Long
Dim Debut As String
Dim ShFichiers As Worksheet
Dim TabFichiers As ListObject
Dim LigneFichier As ListRow

    If VerifierLeChemin(Repertoire) = False Or Repertoire = "" Then
        MsgBox "Saisissez le nom d'un répertoire valide !", vbCritical
       Exit Sub
    End If

    Application.ScreenUpdating = False

    Debut = Repertoire
    Set Fso = CreateObject("Scripting.FileSystemObject")
    IndexListe = 0
    ReDim Liste_Fichiers(5, IndexListe)

    Set ShFichiers = Sheets("Menu")
    With ShFichiers

         Set TabFichiers = .ListObjects("TableDesFichiers")
         Debug.Print "Nombre de lignes : " & TabFichiers.ListRows.Count
         If Range("SuppressionListe") = "Oui" And TabFichiers.ListRows.Count > 0 Then TabFichiers.DataBodyRange.Delete
    End With

    ListeRecursive Fso.GetFolder(Debut), ChainesARechercher, Range("DateMax") ' A adapter

    If IndexListe Then
       For IndexListe = LBound(Liste_Fichiers, 2) To UBound(Liste_Fichiers, 2)
              Set LigneFichier = TabFichiers.ListRows.Add
              With LigneFichier
                   .Range(1, 1) = Liste_Fichiers(0, IndexListe)
                   .Range(1, 2) = Liste_Fichiers(1, IndexListe)
                   .Range(1, 4) = Format(Liste_Fichiers(2, IndexListe), "dd/mm/yyyy")
                   .Range(1, 5) = Format(Liste_Fichiers(3, IndexListe), "dd/mm/yyyy")
                   .Range(1, 6) = Liste_Fichiers(4, IndexListe)
                   .Range(1, 7) = Liste_Fichiers(5, IndexListe)
              End With
              Set LigneFichier = Nothing
      Next IndexListe
    End If

    For I = TabFichiers.ListRows.Count To 1 Step -1
        With TabFichiers.ListRows(I)
             If .Range(1, 1) = "" Then .Delete
        End With
    Next I

    If TabFichiers.ListRows.Count > 1 Then
       ReconstituerLesLiensHypertextes ShFichiers, TabFichiers.ListColumns(1).DataBodyRange
    End If

    With ShFichiers
        .Activate
        .Columns("A:A").EntireColumn.AutoFit
    End With

    Set Fso = Nothing
    Set ShFichiers = Nothing

    Application.ScreenUpdating = True

    MsgBox "Fin de programme !", vbInformation

End Sub

Sub ListeRecursive(ByVal f As Object, ByVal ChaineATrouver As String, ByVal DateMax2 As Date)

Dim Sf As Object, Fich As Object, Sf2 As Object

    For Each Sf In f.SubFolders
        For Each Fich In Fso.GetFolder(Sf).Files
            If InStr(1, LCase(Fich.Name), ChaineATrouver, vbTextCompare) > 0 Then
                ReDim Preserve Liste_Fichiers(5, IndexListe)
                Liste_Fichiers(0, IndexListe) = Fich.Name
                Liste_Fichiers(1, IndexListe) = Fich.Path
                Liste_Fichiers(2, IndexListe) = Fich.DateLastModified
                Liste_Fichiers(3, IndexListe) = Fich.DateCreated
                If Fich.DateCreated < DateMax2 Then Liste_Fichiers(4, IndexListe) = "X"
                Liste_Fichiers(5, IndexListe) = Fso.GetFolder(Sf).Files.Count
                IndexListe = IndexListe + 1
            End If
        Next Fich
        ListeRecursive Fso.GetFolder(Sf), ChaineATrouver, Range("DateMax")
    Next Sf

End Sub

Sub ReconstituerLesLiensHypertextes(ByVal ShFichiers2 As Worksheet, ByVal AireFichiers As Range)

Dim I As Long, IndexLien As Long

    IndexLien = 1

    For I = 1 To AireFichiers.Count

        With AireFichiers(I)
             If .Value <> "" Then
                .Hyperlinks.Delete
                ShFichiers2.Hyperlinks.Add Anchor:=AireFichiers(I).Offset(0, 2), Address:=AireFichiers(I).Offset(0, 1), TextToDisplay:=CStr(IndexLien)
                IndexLien = IndexLien + 1
            End If
        End With

     Next I

End Sub

Function VerifierLeChemin(ByVal Chemin2 As String) As Boolean

Dim Fso As Object

    VerifierLeChemin = False
    Set Fso = CreateObject("Scripting.FileSystemObject")
    VerifierLeChemin = Fso.FolderExists(Chemin2)
    Set Fso = Nothing

End Function

Dans le module de l'onglet Menu :

Private Sub BoutonExplorer_Click()

     ListerLesFichiers Range("Repertoire"), Range("MotsARechercher")

End Sub

Bonjour JeanMichel0404, Eric

Après avoir exploré le forum Excel VBA, j'explore maintenant les autres techniques que j'ai déjà pratiqué, je ne revendique pas être un expert Powershell, je tente un script à adapter :

$path = "C:\temp\files\"
$extension = "*.wav"
$FromDate = (Get-Date).AddDays(-90)
Get-ChildItem -Path $Path -filter $extension -Recurse -File | Where-Object { $_.LastWriteTime -lt $FromDate } | Remove-Item
Rechercher des sujets similaires à "expert powershell ici"