Задать вопрос
@r1sh

Нужна помощь с Powershell?

Добрый день!

Помогите пожалуйста с написанием скрипта.

У нас каждый день делаются бэкапы 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 завершает весь скрипт, а не только цикл в рамках которого она запускается.

Подскажите пожалуйста, что я делаю не так?
  • Вопрос задан
  • 341 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@cardinalus
Для ForEach-Object - используйте return
для ForEach - используйте continue
Ответ написан
Комментировать
@nozzy
Symfony, Laravel, SQL, Python, Telegram
Попробуйте заменить break на continue.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы