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

Ответить


Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Смайлики
:| :) :wink: :D :lol: :( :cry: 8) :o :oops: :? :x :P :evil: :twisted: :roll: :!: :?: :idea: :arrow: :mrgreen:
Ещё смайлики…

Markdown is OFF

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ВКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Kerio Connect. Сжатие архивных папок

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

UncleFather » 24 апр 2014 17:09, Чт

Задача:

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 (см. Как изменить дату/время создания/редактирования файла/папки)


Вернуться к началу