Добрый день!
Помогите пожалуйста с написанием скрипта.
У нас каждый день делаются бэкапы 2х БД, закидваются в каталоги со структурой <год>\<месяц>\<день>
Нужно почистить за предыдущий месяц бэкапы, оставить первый с начала месяца и следующий +15 дней.
При этом нужно проверять что в каталоге есть оба бэкапа (всё бывает)
Написал скрипт на Powershell, но есть проблема:
$year = (Get-Date).Year
#$month = get-date ((get-date).AddMonths(-1)) -format MM
$month = "07"
$temp= "$env:temp" + "\backup\"
$dir="\\files\backup$\8.1\$year\$month"
#
# Создаём временный каталог
#
If (!(Test-Path $temp)){
New-Item $temp -type directory
}
#
# Сбрасываем счётчики
#
$trg=0
$ceh=0
Get-ChildItem -Path $dir| Sort-Object LastAccessTime | Select-Object -First 15 | ForEach-Object {
write-host $_
if ((Test-Path $dir\$_\trg*.dt) -And ($trg -eq 0)){
Copy-Item -recurse -Force $dir\$_\trg* $temp
$trg=1
}
if ((Test-Path $dir\$_\ceh*.dt) -And ($ceh -eq 0)){
#Write-Host $ceh
Copy-Item -recurse -Force $dir\$_\ceh* $temp
$ceh=1
}
if (($trg -eq 1) -And ($ceh -eq 1)){
write-host "All backups are found"
continue
}
}
# Сбрасываем счётчики и ищем второй бэкап
#
$trg=0
$ceh=0
Get-ChildItem -Path $dir| Sort-Object LastAccessTime | Select-Object -Last 12 | ForEach-Object {
if ((Test-Path $dir\$_\trg*.dt) -And ($trg -eq 0)){
Copy-Item -recurse -Force $dir\$_\trg* $temp
$trg=1
}
if ((Test-Path $dir\$_\ceh*.dt) -And ($ceh -eq 0)){
#Write-Host $ceh
Copy-Item -recurse -Force $dir\$_\ceh* $temp
$ceh=1
}
if (($trg -eq 1) -And ($ceh -eq 1)){
write-host "All backups are found"
continue
}
}
Но проблема в том, что команда break завершает весь скрипт, а не только цикл в рамках которого она запускается.
Подскажите пожалуйста, что я делаю не так?