Сразу не получилось сделать всё в одном скрипте, а может и не надо...
Всё делаем под пользователем Zimbra
1. Получаем список всех активных почтовых ящиков:
zmaccts | grep active | grep '@' | sed -r -s 's/ /,/g' | tr -s ',' > noactulist.txt
zmaccts разделяет поля в выводимой строке тучей пробелов, поэтому при помощи sed меняем их на ",", а утилитка tr производит усекновение лишних. Попутно обнаружилось, что zmaccts отводит на имя почтового ящика всего 36 символов. Необходимо внимательно проверить полученный список, пометить (например "#") строки с технологическими и другими ящиками, которые, по тем или иным причинам, нельзя блокировать и сгенерировать уточнённый список:
cat actuserlist.txt | grep -v '#' > noactulist1.txt
В любом случае в него не должны попасть почтовые ящики:
#admin@mail.boo.ru,active,03/20/14,11:59,06/18/15,08:37
#galsync.0ivjy0_v_h@mail.boo.ru,active,03/20/14,12:04,never
#ham.8hnduamz5@mail.boo.ru,active,03/20/14,12:00,never
#spam.kkoqxysq_w@mail.boo.ru,active,03/20/14,11:59,never
#virus-quarantine.pm2vuzyr@mail.boo.ru,active,03/20/14,12:00,never
#galsync@pay.boo.ru,active,12/04/14,20:12,never
#admin@boo.ru,active,03/21/14,19:15,01/25/15,13:50
#postmaster@boo.ru,active,03/21/14,22:22,03/25/14,04:40
2. Теперь необходимо выделить из полученного списка почтовые ящики, не открывавшиеся, например, 31 день. На bash'е сваять не смог, не нашёл как сравнивать дату на "позже/раньше",поэтому python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# acclock.py
#
#
import datetime, time
# List locked users
namefl = "noactulist1.txt"
namefo = "lockulist.txt"
# Current date
date_cur = datetime.date.today()
# No active period
date_delta = datetime.timedelta(days=31)
# Limit for lock
date_old = date_cur - date_delta
# Open file with users list
fl = open(namefl)
fo = open(namefo, "w")
#
for line in fl:
linef = line.split(",")[4]
if linef == "never\n":
print line.split(",")[0]
fo.write(line.split(",")[0] + "\n")
else:
lineff = datetime.date.fromtimestamp(time.mktime(time.strptime(linef, "%m/%d/%y")))
if lineff < date_old:
print line.split(",")[0]
fo.write(line.split(",")[0] + "\n")
# Close file
fo.close()
fl.close()
3. Собственно скрипт блокировки почтовых ящиков по списку, полученному в результате предыдущих действий:
#!/bin/bash
logfile="lockulist.log"
errorfile="lockulist.err"
###### Do not modify past here
#######################################
date=`date +%X_-_%x`
echo "" >> $logfile
echo "------------------------------------" >> $logfile
echo "lock user started.. $date" >> $logfile
echo "" >> $logfile
{ while IFS='\n' read u1; do
user=$u1
echo "lock User $user"
date=`date +%X_-_%x`
zmprov ma $u1 zimbraAccountStatus "locked"
echo "$u1 $date" >> $logfile
done ; } < lockulist.txt
date=`date +%X_-_%x`
echo "" >> $logfile
echo "lock user finished.. $date" >> $logfile
echo "------------------------------------" >> $logfile
|