Удалите старые файлы резервных копий, если новый размер файла не слишком мал - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь создать сценарий powershellscript для планирования удаления резервной копии, чтобы жесткий диск не был заполнен.

  • Я хочу проверить, какой файл является самым новым
  • После этого я хочу проверить, не отличается ли размер файла более чем на 10% от второго новейшего файла.
  • Если размер файла находится в пределах диапазона размеров, удалите все, кроме самых новых.
  • Если размер файла меньше или превышает 10% второго нового файла, удалите все файлы, кроме самого нового и второго самого нового.

Я бы хотел, чтобы вы, ребята, помогли мнеЯ должен подумать, чтобы сформулировать код, чтобы заставить это работать.

Я начал с ниже, который удаляет все файлы старше 2 дней, но я не совсем уверен, как изменить это, чтобы сохранить самый новый файл нев зависимости от дней.

$Path = "C:\Temp\Backup\Folder1\"
$Days = 2
$Date = Get-Date
$Include = "*.gpg"
$Exclude = "*.txt"

Get-ChildItem $Path -Recurse |
Where-Object {-not $_.PSIsContainer -and $Date.Subtract($_.CreationTime).Days -gt $Days } |
Remove-Item -WhatIf

1 Ответ

1 голос
/ 07 марта 2019

Вы можете сделать что-то вроде этого:

$BackupFiles = Get-ChildItem -File | Sort-Object LastWriteTime -Descending

$LatestBackup = $BackupFiles | Select -First 1
$PrevBackup = $BackupFiles | Select -Skip 1 -First 1

$BackupSizeThreshold = $PrevBackup.Length * 0.1


$FilesToRemove = If ($LatestBackup.Length -le ($PrevBackup.Length + $BackupSizeThreshold) -and $LatestBackup.Length -ge ($PrevBackup.Length - $BackupSizeThreshold)) {
    $BackupFiles | Select -Skip 1
}
Else {
    $BackupFiles | Select -Skip 2
}

$FilesToRemove | Remove-Item -WhatIf

Удалите -WhatIf, если вы видите ожидаемые результаты.

...