2016-07-26 51 views
0

我正嘗試使用GADS將我們的Active Directory羣組成員同步到Google Apps羣組。對於組中的新用戶(A),它可以正常工作,並已添加到Google Groups中。但是,當我將該用戶從Active Directory中的A組中移除並運行GADS同步時,該用戶仍留在GoogleApps中的A組中。GADS在將用戶從Google羣組中刪除時不會將用戶從Google羣組中刪除

我錯過了什麼或者GADS應用程序有什麼問題嗎?我在Windows Server 2008 R2計算機上使用Google Apps Directory Sync版本4.2.1。

感謝,

鄭氏

回答

1

作爲第一步,我建議更新到最新的GADS,4.3.2。

一旦你這樣做了,如果你可以重現這個問題,你會想要生成跟蹤級日誌和搜索有問題的用戶。我還建議重命名你的.log文件,以便它只包含一個同步。這會給你更多關於爲什麼它不被刪除的信息。

日誌可能有太多信息供您想要公開清理和發佈。我會建議打開一個帶有.log文件和XML的Google案例。 Google支持可能還需要LDAP和LDIF,但並非總是如此。

+1

我確實升級到GADS 4.3.2,但問題仍然存在。我正在聯繫Google支持。 –

0

我最後寫一個python腳本回答這個問題我自己:

  1. 搜索在AD組要同步到谷歌所有用戶:

http://www.dangtrinh.com/2016/07/get-all-ms-active-directory-group.html

  1. 搜索Google羣組中的所有用戶:

http://www.dangtrinh.com/2016/07/get-google-group-members-using-gam-and.html

  1. 比較兩個列表並刪除未在AD的櫃檯部分顯示的Google Group成員。

這裏是工作的腳本:

#! /usr/bin/env python 

import shlex, subprocess 
import sys 
# ad_utils.py: http://www.dangtrinh.com/2016/07/get-all-ms-active-directory-group.html 
import ad_utils 


GADMIN_ACCOUNT = '<your google apps administrator email>' 
GAM_PATH = '/path/to/your/gam.py' 
GOOGLE_GROUPS = { 
    '<group name>': 'group email', 
... 
} 


def get_group_members(group_email, gam_path=GAM_PATH): 

    cmd = 'python %s print group-members group %s' % (gam_path, group_email) 
    if sys.platform == 'win32': 
     cmd = 'gam print group-members group %s' % (group_email) 

    args = shlex.split(cmd) 
    proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    out, err = proc.communicate() 

    members = [] 
    if proc.returncode == 0: 
     if out: 
      out = out.split('\n') 
      for i in range(1, len(out)): 
       row = out[i].split(',') 
       if len(row) >= 3: 
        if row[2].lower() != GADMIN_ACCOUNT: # exclude gadmin account 
         members.append(row[2].lower()) 
    return members 


def del_group_member(group_email, member_email, gam_path=GAM_PATH): 

    cmd = 'python %s update group %s remove user %s' % (gam_path, group_email, member_email) 
    if sys.platform == 'win32': 
     cmd = 'gam update group %s remove user %s' % (group_email, member_email) 

    args = shlex.split(cmd) 
    proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    out, err = proc.communicate() 

    return proc.returncode, out, err 


def sync_ad_gapps_group_members(group_name, group_email, ad_conn, dry_run=False): 
    ad_members = ad_utils.get_group_members(group_name, ad_conn) 
    if ad_members: 
     googlegroup_members = get_group_members(group_email) 
     for guser in googlegroup_members: 
      if guser not in ad_members: 
       print "=== %s not active in AD" % guser 
       if dry_run: 
        pass 
       else: 
        del_group_member(group_email, guser) 


def sync_ad_gapps_groups(dry_run=False): 
    ad_conn, ad_result = ad_utils.ad_auth() 
    if ad_result: 
     for gname, gemail in GOOGLE_GROUPS.iteritems(): 
      print "\n+++ Syncing group %s" % gname 
      sync_ad_gapps_group_members(gname, gemail, ad_conn, dry_run) 
    else: 
     print "Fail!" 


if __name__ == "__main__": 
    dry_run = False 
    if len(sys.argv) > 1: 
     dry_run = bool(sys.argv[1]) 

    if dry_run: 
     print "=== Running Google Apps Groups sync in dry-run mode" 

    print "==== Dry running: %s" % dry_run 

    sync_ad_gapps_groups(dry_run) 

用法:

$ python google_groups_ad_sync.py [dry_run] 

您可以設置GADS後運行該腳本的計劃任務。