zimbra自动化操作之:如何修改所有用户的签名

本文展示如何创建一个简单的脚本,用于修改所有用户在ldap中的签名属性
这里会用两个脚本来完成这个工作,在此过程中会解释为什么不使用一个脚本来完成:
脚本1:

#!/bin/bash
  
path="/opt/zimbra/bin"
  
     for i in `/opt/zimbra/bin/zmprov -l gaa`  
      do
       echo -ne "Checking account: $i \t"
       
       $path/zmprov ma $i zimbraPrefMailSignatureEnabled TRUE
       signature=`$path/zmprov ga $i | egrep "(^cn|^ou|^company|^street|^telephoneNumber|^mobile|^title)" | cut -d : -f 2 | sed 's/^\ //g'`
       $path/zmprov ma $i zimbraPrefMailSignature "$signature"
       echo "done!"

    done
  • 这个脚本如下功能:

    设置zmprov的默认路径
    设置zimbraPrefMailSignatureEnabled的属性值为TRUE
    定义变量 signature
    给变量设置 ldap中用户不同的属性值,在此例子中:(^cn|^ou|^company|^street|^telephoneNumber|^mobile|^title),属性根据管理员需要进行改变
    最后修改用户为ldap中的用户属性

脚本2:

#!/bin/bash

path="/opt/zimbra/bin"
  
    for i in `/opt/zimbra/bin/zmprov -l gaa`  
     do
       echo -ne "Adding SignatureID to account: $i \t"

       signatureid=`$path/zmprov ga $i zimbraSignatureId | sed -n '2p' | cut -d : -f 2 | sed 's/^\ //g'`
       $path/zmprov ma $i zimbraPrefDefaultSignatureId "$signatureid"
       $path/zmprov ma $i zimbraPrefForwardReplySignatureId "$signatureid"
       echo "done!"
     done
  • 脚本2:
    获取zimbraSignatureId的属性值
    将获取zimbraSignatureId 的值设置给 zimbraPrefDefaultSignatureId
    将获取zimbraSignatureId 的值设置给 zimbraPrefForwardReplySignatureId

向下滚动查看,为何要使用两个脚本,并找到如何运行脚本

这些值在 Admin的web页在这些地方可看到:
下图我们可以看到绿色和红色的框,第一个脚本就是设置绿色框的属性值,第二个脚本就是设置红色框的属性值

有很重要的一点我们需要知道,在我们设置红色框的属性值之前,就算运行了第一个脚本设置了签名值,它也不是生效的。在web页面这些设置很直观,但是在运行脚本的时候,常常会被忽视

为何要使用两个脚本:
使用两个脚本是因为如果把两个脚本的内容写在一个脚本中,第二个脚本的命令将不会被执行。第二个脚本的作用是找出 zimbraPrefDefaultSignatureId 的属性值,并分配给另外两个属性。然而,即使改变签名,属性值也不会分配给 signatureid。得到这个值的唯一方法就是用户登录他自己的账户。然后,我们可以把这个属性的值,并将其分配给另外两个属性。
如下显示信息:

Checking account: [email protected]    ++ /opt/zimbra/bin/zmprov ga [email protected]
++ sed 's/^\ //g'
++ cut -d : -f 2
++ egrep '(^cn|^ou|^company|^street|^telephoneNumber|^mobile|^title)'
+ signature='9
dsvsdv
dvdssd
dfvsdvs
svadsv'
+ /opt/zimbra/bin/zmprov ma [email protected] zimbraPrefMailSignatureEnabled TRUE zimbraPrefMailSignature '9
dsvsdv
dvdssd
dfvsdvs
svadsv'
++ /opt/zimbra/bin/zmprov ga [email protected] zimbraSignatureId
++ sed 's/^\ //g'
++ cut -d : -f 2
++ sed -n 2p
+ signatureid=5fd31077-c448-4a97-8d7e-b1a8aa8c6930
+ /opt/zimbra/bin/zmprov ma [email protected] zimbraPrefDefaultSignatureId 5fd31077-c448-4a97-8d7e-b1a8aa8c6930
+ /opt/zimbra/bin/zmprov ma [email protected] zimbraPrefForwardReplySignatureId 5fd31077-c448-4a97-8d7e-b1a8aa8c6930
+ echo 'done!'
done!
+ for i in '`/opt/zimbra/bin/zmprov -l gaa`'
+ echo -ne 'Checking account: [email protected] \t'



Checking account: [email protected]   ++ /opt/zimbra/bin/zmprov ga [email protected]
++ sed 's/^\ //g'
++ egrep '(^cn|^ou|^company|^street|^telephoneNumber|^mobile|^title)'
++ cut -d : -f 2
+ signature='49
sefefe
efefes
efefef
fef'
+ /opt/zimbra/bin/zmprov ma [email protected] zimbraPrefMailSignatureEnabled TRUE zimbraPrefMailSignature '49
sefefe
efefes
efefef
fef'
++ /opt/zimbra/bin/zmprov ga [email protected] zimbraSignatureId
++ sed 's/^\ //g'
++ cut -d : -f 2
++ sed -n 2p
+ signatureid=
+ /opt/zimbra/bin/zmprov ma [email protected] zimbraPrefDefaultSignatureId ''
+ /opt/zimbra/bin/zmprov ma [email protected] zimbraPrefForwardReplySignatureId ''
+ echo 'done!'
done!

运行第一个脚本后,+ signatureid= 的输出只能显示第一个用户,因为用户 [email protected] 已经登录。对于第二个用户,signatureid 值没有被设置,所以接下来两个属性都设置为了空,因此两个脚本放在一个脚本中,会有命令未正常执行

我们应该怎么做?
运行了第一个脚本后,发一封全局邮件通知用户重载或者重新登录。然后运行第二个脚本或者让他们自己设置自己邮箱的红色框框的属性值

你可能感兴趣的:(zimbra自动化操作之:如何修改所有用户的签名)