Automating Reciprocal Calendar Sharing

Revision as of 20:59, 8 February 2010 by Heureso (talk | contribs)

The problem: you've just added a new department of users to your Zimbra server. All of those users need to share their calendars with each of the other members of their department.

One solution:

First, create a distribution list with all of the relevant user accounts via the Zimbra Admin console.

The following BASH script takes the name of that distribution list as a command line argument, then outputs a series of CLI commands to share each members's calendar (read-only) with the distribution list, then add a mountpoint to each user's shared calendar to the other list members' calendars. The script should be run as the zimbra user.

#!/bin/bash

if [ "$#" == "1" ]
then
users=$(zmsoap --type admin --zadmin GetDistributionListRequest/dl="$1" @by="name" | grep dlm | sed -e 's/.*<dlm>\(.*\)<\/dlm>/\1/g')

echo $users

for u in $users
do
    echo zmmailbox -z -m $u modifyFolderGrant /Calendar group psychstaff@psymail.ucdavis.edu r
    uname=$(zmmailbox -z -m $u gid -v | grep zimbraPrefFromDisplay | sed -e 's/.*: "\(.*\)",/\1/')
    for v in $users
    do
        if [ $u != $v ]
        then
            echo zmmailbox -z -m $v createMountpoint --view appointment \"/$uname\'s Calendar\" $u /Calendar
        fi
    done
done
else
    echo "usage: $0 distlist@zimbradomain.com"
fi

NOTE: This script will just print out a bunch of commands: it won't actually *run* them. You should redirect the output of this script to a text file, then sanity check the commands in the text file BEFORE you try to run them. For example:

[zimbra@mail ~]$ zimbraRecipCalShare.sh mylist@mydomain.com > check_me_first.sh
... then verify that the commands in the check_me_first.sh file are sane . . . 
[zimbra@mail ~]$ bash check_me_first.sh
</pr>

Also, the initial script takes a while to run (~2 minutes for a 10-user distribution list, in one instance) due to the various lookups that are required. The generated script takes even longer to run.
Jump to: navigation, search