Kerio Connect. Сжатие архивных папок

Microsoft Internet Security and Acceleration (ISA) Server
Microsoft Internet Information Services
Kerio Connect
Kerio Mail Server
Kerio Firewall
UserGate
DHCP, DNS, SMTP, POP, WWW, FTP


Модератор: UncleFather

Аватара пользователя
UncleFather
Site Admin
Сообщения: 1503
Зарегистрирован: 17 авг 2004 16:20, Вт
Контактная информация:

Kerio Connect. Сжатие архивных папок

Сообщение UncleFather »

Задача:

Kerio Connect умеет создавать архивные копии почтовых папок и любой пользователь с соответствующими правами может просмотреть их содержимое. Так же Kerio Connect умеет раз в день, раз в неделю или раз в месяц сжимать архивные папки в zip - архивы и удалять те архивные папки, которые он уже сжал. То есть zip-архивы остаются, а несжатые архивные папки удаляются.

Это все настраивается через панель Администратора Kerio Connect: Конфигурация -> Архивирование и резервное копирование:

01.JPG

Но как быть в случае, когда необходимо через панель администратора просматривать архивные папки, сохраненные более месяца назад. Например, хочется иметь постоянный доступ к архивам за три предыдущих месяца. Можно, конечно, вручную распаковывать архивы, но это совсем неудобно.

Решение:

Я предлагаю автоматизировать процесс удаления архивных папок путем использования командного файла DOS.

Первым делом, снимаем галочку в панели Администратора Kerio Connect: Конфигурация -> Архивирование и резервное копирование -> Сжать старые архивные папки по адресу. Это приведет к тому, что архивные папки вообще удаляться не будут. Так же не будут создаваться zip-архивы архивных папок почты.

Теперь напишем командный файл, который среди архивных папок Kerio Connect будет искать папки, дата изменения которых больше 100 дней, а формат названия соответствует шаблону:

Код: Выделить всё

@echo off
ForFiles /P C:\!MailArch\archive /M ????-??? /C "cmd /c if @isdir==TRUE call C:\Soft\Bat\CompressMailFolder.bat @path" /D -100

Этот батник ищет в папке C:\!MailArch\archive папки, название которых соответствует формату ????-???, а дата изменения больше 100 дней и, для каждой найденной папки запускает другой батник C:\Soft\Bat\CompressMailFolder.bat, которому в строке запуска передает параметр, содержащий полный путь к найденной папке.

Напишем второй командный файл CompressMailFolder.bat, который будет сжимать архивную папку в одноименный архив zip и потом удалять папку, которую он только что сжал:

Код: Выделить всё

@Echo Off
"C:\Program Files\7-Zip\7z.exe" a -aoa -r -tzip -ssw -sdel -y %~1.zip %~1

Для выполнения второго батника нам потребуется скачать и установить alpha-версию свободнораспространяемого (бесплатного) архиватора 7-zip: 7-Zip 9.32 alpha. Причем, нужна именно альфа-версия, поскольку только в ней доступен ключ sdel командной строки, позволяющий удалять файлы и папки после их добавления в архив.

Теперь пропишем запуск первого командного файла в планировщик заданий Windows. Достаточно запускать его один раз в месяц.

После выполнения этих действий мы будем иметь доступ через интерфейс Администратора Kerio Connect к архивам последних трех-четырех месяцев (в зависимости от того, в какой день месяца будет запускаться запланированная задача). Почтовые папки старше 100 дней от момента запуска запланированной задачи будут сжиматься в zip-архивы и удаляться.

Модификация:

Теперь подкорректируем батники так, чтобы архивные папки с датой изменения старше 100 дней сжимались в одноименный zip-архив а затем удалялись, а архивные папки, моложе 100 дней просто сжимались в одноименный zip-архив (не удалялись). При этом архивную папку текущего месяца трогать не будем.

Первый командный файл будет выглядеть так:

Код: Выделить всё

ForFiles /P C:\!MailArch\archive /M ????-??? /C "cmd /c if @isdir==TRUE call C:\Soft\Bat\CompressMailFolder.bat @path Del" /D -60
ForFiles /P C:\!MailArch\archive /M ????-??? /C "cmd /c if @isdir==TRUE call C:\Soft\Bat\CompressMailFolder.bat @path NotDel" /D -1

Второй командный файл (CompressMailFolder.bat) будет выглядеть так:

Код: Выделить всё

@Echo Off
If %2==Del "C:\Program Files\7-Zip\7z.exe" a -aoa -r -tzip -ssw -sdel -y %~1.zip %~1
If %2==NotDel "C:\Program Files\7-Zip\7z.exe" a -aoa -r -tzip -ssw -y %~1.zip %~1

Архивная папка текущего месяца, как правило, имеет сегодняшнюю дату изменения (так как письма приходят каждый день), поэтому она не будет включена в обработку, когда мы задаем отбор архивных папок старше одного дня.

Теперь прописываем запуск первого батника в планировщик заданий не раньше, чем второго числа каждого месяца - для того, чтобы в архивы включалась папка предыдущего месяца (так как мы задаем отбор архивных папок старше одного дня).

Получается, что каждая архивная папка будет три раза сжиматься в zip-архив (два раза без удаления, а третий - с удалением). В моем случае это не играет особой роли, так как процесс архивации занимает 5-7 минут. Но если есть желание исключить из сжатия папки, для которых уже созданы архивы - пользуемся командой проверки наличия файлов/папок: If Exist %~1.zip ... или If Not Exist %~1.zip .... Например, так:

Код: Выделить всё

@Echo Off
If %2==Del (If Exist %~1.zip (RD /S /Q %~1) Else ("D:\Program Files\7-Zip\7z.exe" a -aoa -r -tzip -ssw -sdel -y %~1.zip %~1))
If Exist %~1.zip Exit
If %2==NotDel "D:\Program Files\7-Zip\7z.exe" a -aoa -r -tzip -ssw -y %~1.zip %~1
Exit

Даже если мы будет удалять какие-то письма через интерфейс Администратора Kerio Connect из архивных папок, то в сжатых zip-архивах эти письма все равно сохранятся, так как при добавлении в архив мы не делаем синхронизацию содержимого, а просто добавляем новые файлы.

Примечание:

При определенных операциях с KerioConnect (например, при добавлении нового пользователя), в архивных папках происходят изменения, в связи с чем происходит изменение даты их модификации.

Поэтому, перед выполнением архивирования этих папок, нужно привести дату и время их модификации к нужному виду, а именно - установить ее равной последнему дню месяца, соответствующего архивной папке, а время - поближе к полуночи.

Для этого допишем в командный файл, перед командой архивации следующие строки:

Код: Выделить всё

IF %date:~3,-5% NEQ 01 (D:\Soft\bat\touch.exe -acm -t %date:~6%01312355.00 "C:\!MailArch\archive\%date:~6%-Jan")
IF %date:~3,-5% NEQ 02 (С:\Soft\bat\touch.exe -acm -t %date:~6%02282355.00 "C:\!MailArch\archive\%date:~6%-Feb")
IF %date:~3,-5% NEQ 03 (С:\Soft\bat\touch.exe -acm -t %date:~6%03312355.00 "C:\!MailArch\archive\%date:~6%-Mar")
IF %date:~3,-5% NEQ 04 (С:\Soft\bat\touch.exe -acm -t %date:~6%04302355.00 "C:\!MailArch\archive\%date:~6%-Apr")
IF %date:~3,-5% NEQ 05 (С:\Soft\bat\touch.exe -acm -t %date:~6%05312355.00 "C:\!MailArch\archive\%date:~6%-May")
IF %date:~3,-5% NEQ 06 (С:\Soft\bat\touch.exe -acm -t %date:~6%06302355.00 "C:\!MailArch\archive\%date:~6%-Jun")
IF %date:~3,-5% NEQ 07 (С:\Soft\bat\touch.exe -acm -t %date:~6%07312355.00 "C:\!MailArch\archive\%date:~6%-Jul")
IF %date:~3,-5% NEQ 08 (С:\Soft\bat\touch.exe -acm -t %date:~6%08312355.00 "C:\!MailArch\archive\%date:~6%-Aug")
IF %date:~3,-5% NEQ 09 (С:\Soft\bat\touch.exe -acm -t %date:~6%09302355.00 "C:\!MailArch\archive\%date:~6%-Sep")
IF %date:~3,-5% NEQ 10 (С:\Soft\bat\touch.exe -acm -t %date:~6%10312355.00 "C:\!MailArch\archive\%date:~6%-Oct")
IF %date:~3,-5% NEQ 11 (С:\Soft\bat\touch.exe -acm -t %date:~6%11302355.00 "C:\!MailArch\archive\%date:~6%-Nov")
IF %date:~3,-5% NEQ 12 (С:\Soft\bat\touch.exe -acm -t %date:~6%12312355.00 "C:\!MailArch\archive\%date:~6%-Dec")

Этот код перебирает все папки по месяцам и, если папка существует и это не папка текущего месяца, то ей устанавливается дата модификации, равная последнему дню месяца, соответствующего названию папки, а время модификации устанавливается 23:55:00.

Дата и время модификации меняются при помощи утилиты touch.exe (см. Как изменить дату/время создания/редактирования файла/папки)


Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram

Изображение
Изображение
Изображение
Изображение