Powershell сжимает файлы старше X дней из пути к папке, сохраняя структуру папок (папка + подпапки), а также исключая несколько подпапок - PullRequest
0 голосов
/ 28 апреля 2020

Я довольно новичок в Powershell в целом, я сталкивался с некоторыми частичными решениями, но не могу найти подходящую. В идеале я хотел бы архивировать (Zip) с помощью Powershell, но только файлы определенного возраста (x дней / месяцев), но я бы предпочел сохранить структуру папок и добавить исключения. Вот что я пытался использовать (без успеха):

$inputFolder = "C:\Temp\Test"
$excludeFolders = @("\subfolderToKeep")
$ouputFileName="C:\Temp\archive.zip"
$Daysback = "-5"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)

$tempFolder = [System.IO.Path]::GetTempFileName()
Remove-Item $tempFolder -Force
New-Item -Type  Directory -Path $tempFolder -Force
$exclude =@()
$excludeFolders | ForEach-Object {
 $exclude+=(Join-Path $inputFolder $_) 
 Get-ChildItem (Join-Path $inputFolder $_) -Recurse | 
  ForEach-Object{$exclude+=$_.FullName}}
Get-ChildItem $inputFolder -Recurse | Where-Object { $_.FullName -notin $exclude -and $_.LastWriteTime -lt $DatetoDelete } |
 Copy-Item -Destination {Join-Path $tempFolder $_.FullName.Substring($inputFolder.length)}

Get-ChildItem $tempFolder |
Compress-Archive -DestinationPath $ouputFileName -Update

Текущая настройка будет работать без фильтрации даты:

-и $ _. LastWriteTime -lt $ DatetoDelete

...