zimbra-script/delete-closed-accounts.sh

69 lines
3.3 KiB
Bash
Raw Permalink Normal View History

2021-01-15 18:51:12 +03:00
#!/bin/bash
##############################################################################
#
# Удаление закрытых учетных записей почты через определенное время
# Удаление происходит через месяц после увольнения (на основе комментария)
#
# Автор: Сергей Калинин
# https://nuk-svk.ru
# svk@nuk-svk.ru
##############################################################################
# Список учётных записей со статусом "Закрыта" (closed)
zmaccts | grep closed | grep @ | while read ACCOUNT_STRING
do
#ACCOUNT=`echo ${ACCOUNT_STRING} | grep @ | awk '{ print $1 }'`
# Квота
#QUOTA_TOTAL=`zmprov ga ${ACCOUNT} | grep "zimbraMailQuota" | cut -d ":" -f2`
# Использовано из квоты
#QUOTA_USAGE=`zmmailbox -z -m ${ACCOUNT} gms`
# Сервер с ящиком
#HOSTED_ON=`zmprov ga ${ACCOUNT} | grep zimbraMailHost | awk -F: '{ print $2 }'`
#echo "-------"
#echo ${ACCOUNT_STRING}
ACCOUNT=`echo ${ACCOUNT_STRING} | awk -F' ' '{print $1}'`
ACCOUNT_CREATE_DATE=`echo ${ACCOUNT_STRING} | awk -F' ' '{print $3 " " $4}'`
ACCOUNT_CREATE_DATE=$(date -d "${ACCOUNT_CLOSE_DATE}" +%s)
# Дата и время последнего заходя в ящик
#LAST_ON=`echo ${ACCOUNT_STRING} | grep zimbraLastLogonTimestamp: | awk -F: '{ print $2 }' `
LAST_LOGON_DATE=`echo ${ACCOUNT_STRING} | awk -F' ' '{print $5 " " $6}'`
if [ "${LAST_LOGON_DATE}" != "never " ]; then
LAST_LOGON_DATE_SEC=`date -d "$LAST_LOGON_DATE" +%s`
else
LAST_LOGON_DATE_SEC='0'
fi
#echo "${ACCOUNT} ${ACCOUNT_CLOSE_DATE} ${ACCOUNT_CREATE_DATE} ${LAST_LOGON_DATE} ${LAST_LOGON_DATE_SEC}"
NOW_DATE_SEC=$(date +%s)
NOW_DATE=$(date +%d%m%Y)
# Описание
DESCRIPTION=`zmprov ga ${ACCOUNT} | grep description | awk -F: '{ print $2 }' `
# Дата увольнения
FIRED_DATE=`echo ${DESCRIPTION} | grep -i 'увольнение' | cut -d ' ' -f2 `
DAY=`echo ${FIRED_DATE} | cut -c 1,2`
MONTH=`echo ${FIRED_DATE} | cut -c 3,4`
YEAR=`echo ${FIRED_DATE} | cut -c 5,8`
FIRED_DATE_SEC=$(date -d "${YEAR}${MONTH}${DAY} 23:59" +%s)
#echo "${NOW_DATE} ${NOW_DATE_SEC} ${ACCOUNT}; Close: ${ACCOUNT_CREATE_DATE} ${ACCOUNT_CREATE_DATE}; Last: ${LAST_LOGON_DATE} ${LAST_LOGON_DATE_SEC}; ${DESCRIPTION}; Fired: ${FIRED_DATE} ${FIRED_DATE_SEC}"
#Дата удаления (дата увольнения + 1 месяц)
if [ "${LAST_LOGON_DATE_SEC}" -gt 0 ]; then
DELETE_DATE=$(date +%Y%m%d -d "${YEAR}${MONTH}${DAY} + 1 month")
else
DELETE_DATE=$(date +%Y%m%d -d "${YEAR}${MONTH}${DAY}")
fi
DELETE_DATE_SEC=$(date +%s -d "${DELETE_DATE} 23:59")
if [ "${DELETE_DATE_SEC}" -le "${NOW_DATE_SEC}" ]; then
# Удаление ящика
#echo "${NOW_DATE}: Удаление: ${ACCOUNT}; ${QUOTA_USAGE}; ${HOSTED_ON}; ${LAST_ON}; ${DESCRIPTION}; ${FIRED_DATE}; ${DELETE_DATE}"
zmprov da ${ACCOUNT}
echo "Date: ${NOW_DATE}; Account: ${ACCOUNT}; Create date: ${ACCOUNT_CREATE_DATE}; Last logon: ${LAST_LOGON_DATE}; ${DESCRIPTION}; Fired: ${FIRED_DATE}; Deleted: ${DELETE_DATE}"
fi
done