script-v6

🧩 Syntax:
# Fonction pour récupérer la dernière date de modification d'un fichier
function Get-FileLastModifiedTime {
    param (
        [string]$filePath
    )
    
    try {
        $fileInfo = Get-Item $filePath
        return $fileInfo.LastWriteTime
    }
    catch {
        Write-Warning "Fichier introuvable : $filePath"
        return $null
    }
}

# Fonction pour calculer l'espace utilisé par tous les fichiers dans un répertoire
function Get-UsedSpaceForClient {
    param (
        [string]$clientDir
    )
    
    $dluPath = Join-Path -Path $clientDir -ChildPath "DLU"
    
    if (Test-Path $dluPath) {
        # Obtenir l'espace utilisé par tous les fichiers dans DLU
        $totalSize = 0
        Get-ChildItem -Path $dluPath -Recurse -File | ForEach-Object {
            $totalSize += $_.Length
        }
        return $totalSize
    }
    return 0
}

# Fonction principale pour vérifier si des fichiers dans DLU datent de plus de N jours
function Check-DLUFilesForClient {
    param (
        [string]$clientDir,
        [int]$daysThreshold
    )
    
    $dluPath = Join-Path -Path $clientDir -ChildPath "DLU"
    
    if (Test-Path $dluPath) {
        $currentDate = Get-Date
        $thresholdDate = $currentDate.AddDays(-$daysThreshold)

        # Parcourir les fichiers dans DLU
        Get-ChildItem -Path $dluPath -Recurse -File | ForEach-Object {
            $lastModifiedTime = Get-FileLastModifiedTime $_.FullName
            if ($lastModifiedTime -lt $thresholdDate) {
                return $true
            }
        }
    }
    return $false
}

# Variable de seuil pour les jours (par exemple, 30 jours)
$daysThreshold = 30  # Modifiez cette valeur pour définir le seuil de jours

# Parcourir tous les clients dans E:\SFTP
$baseDir = "E:\SFTP"
$clients = Get-ChildItem -Path $baseDir -Directory

# Liste pour stocker les informations des clients
$clientsWithOldFiles = @()

# Vérification pour chaque client
foreach ($client in $clients) {
    $clientPath = $client.FullName
    
    # Vérification si des fichiers sont plus vieux que le seuil spécifié
    if (Check-DLUFilesForClient -clientDir $clientPath -daysThreshold $daysThreshold) {
        # Si des fichiers plus vieux que 30 jours sont trouvés, afficher l'espace utilisé
        $usedSpace = Get-UsedSpaceForClient -clientDir $clientPath
        $usedSpaceMB = [math]::Round($usedSpace / 1MB, 2)  # Convertir l'espace en Mo

        # Ajouter les informations du client dans la liste
        $clientsWithOldFiles += [PSCustomObject]@{
            ClientName    = $client.Name
            UsedSpaceMB   = $usedSpaceMB
        }
    }
}

# Trier les clients par espace utilisé (du plus grand au plus petit)
$sortedClients = $clientsWithOldFiles | Sort-Object -Property UsedSpaceMB -Descending

# Affichage des résultats triés
foreach ($client in $sortedClients) {
    Write-Host "Des fichiers dans DLU datant de plus de $daysThreshold jours pour le client $($client.ClientName)"
    Write-Host "Espace utilisé pour le client $($client.ClientName) : $($client.UsedSpaceMB) Mo"
}