Powershell : copie de fichiers considérés comme anciens

Suite à une demande d’un collègue, j’ai réalisé un script Powershell réalisant une copie récursive de fichiers et dossiers si ceux-ci ont été créés, modifiés ou utilisés (au choix de l’utilisateur) depuis un nombre de jours spécifiés.

En reprenant la logique du script d’archivage automatique de fichiers d’événements Windows, il peut être possible de réaliser une mécanique d’archivage automatique de certains fichiers comme des logs par exemple. Les deux scripts (combinés en un seul) pourraient alors réaliser la copie dans un répertoire temporaire où ils seraient compressés avant d’être acheminés sur un répertoire réseau dédié.

function process{
Write-Host "Folders will be displayed in Cyan." -ForegroundColor "Cyan"
Write-Host "Files will be displayed in Green.`r`n" -ForegroundColor "Green"
foreach($item in $items){
if ($item.Attributes -eq "Directory") { Write-Host $item.FullName -ForegroundColor "Cyan" }
else { Write-Host $item.FullName -ForegroundColor "Green" }
$destination = $item.FullName.Substring($origpath.Length,$item.FullName.Length-$origpath.Length)
Copy-Item $item.FullName -Destination "$destpath\$destination" -Force
}
}
Write-Host "Old files archiving script"
Write-Host "=========================="
$origpath = "C:\source\"
$destpath = "C:\dest\"
$today = Get-Date
if (Test-Path -Path $destpath) { Write-Host "Destination directory already exists. Be careful as the script will overwrite any existing files." -ForegroundColor "Red" } else { New-Item -Path $destpath -ItemType "directory" | out-null }
$olderthan = Read-Host "Archive files older than X days"
Write-Host "1: Creation Date"
Write-Host "2: Modification Date"
Write-Host "3: Last Access Date"
$datetype = Read-Host "Kind of timestamp the script should use ? (1, 2 or 3)"
switch($datetype){
"1" { $items = Get-ChildItem $origpath -Recurse | Where-Object { $_.CreationTime -lt $today.AddDays(-$olderthan) } ; process }
"2" { $items = Get-ChildItem $origpath -Recurse | Where-Object { $_.LastWriteTime -lt $today.AddDays(-$olderthan) } ; process }
"3" { $items = Get-ChildItem $origpath -Recurse | Where-Object { $_.LastAccessTime -lt $today.AddDays(-$olderthan) } ; process }
}
Write-Host "Bye."
Lien pour marque-pages : Permaliens.

Un Commentaire

  1. Bonjour,
    j’obtiens ce message dès lors que le script doit copier un dossier :
    move-Item : Impossible de trouver une partie du chemin d’accès.
    Au caractère C:\Users\XXXXXXXXX\Downloads\win_toarchivev2.ps1:11 : 3
    + move-Item $item.FullName -Destination « $destpath\$destination …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : WriteError: (C:\Users\XXXXXX\xslafilter.res:FileInfo) [Move-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

    Merci

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.