2017-03-18 44 views
1

我是相當新的Python,我試圖查詢AD服務器,並檢查基於某些屬性(用戶名,firstName,lastName)是否存在用戶和如果該用戶存在查詢他們的組以查看他們是否在特定組中,並且如果沒有,則將他們添加到該組中。我有一個YAML文件,在那裏我存儲用戶的信息,隨着組我想將它們添加在:PyAD AD查詢檢查用戶是否存在,如果不創建它

ADUser: 
    firstName: <value> 
    lastName: <value> 
    username: <value> 
    email: <value> 
    group: <value of group I want them to join> 

這裏是解析YAML文件中的代碼:

with open("AD.yaml", 'r') as stream: 
    try: 
     print(yaml.load(stream)) 
    except yaml.YAMLError as exc: 
     print(exc) 

我正在使用PyAD庫訪問AD並運行我的搜索和用戶創建和組設置。下面是該文檔的鏈接:https://zakird.com/pyad/index.html

這是我開始寫作:

q = pyad.adquery.ADQuery() 
    q.execute_query(
     attributes = (["firstName", <value>],["lastName", <value>],["username", <value>],["email", <value>]) 
     where_clause = "objectClass = '*'", 
     base_dn = "OU=users, DC=domain, DC=com" 
    ) 

這些都是我想要使用用戶創建的方法,組添加和查詢(我想要弄清楚,如果這些好看與否,以及究竟是如何將它們與YAML使用我目前有):

#User Creation 
create_user(name, password=None, upn_suffix=None, enable=True, optional_attributes={}) 
#Find Members of a group 
get_memberOfs(recursive=False, scope='all')¶ 
#Add an object to a group 
add_to_group(group) 
#Query AD 
q = pyad.adquery.ADQuery() 
q.execute_query(
    attributes = ["distinguishedName", "description"], 
    where_clause = "objectClass = '*'", 
    base_dn = "OU=users, DC=domain, DC=com" 
) 

我只是想知道如果有人能幫助我指向這個應該怎麼設置。不要擔心訪問實際的AD服務器,我只是想象從盒子本身運行這個服務器。

這是我迄今所做的:

with open("AD.yaml", 'r') as stream: 
    try: 
     print(yaml.load(stream)) 
    except yaml.YAMLError as exc: 
     print(exc) 

def create_User(new_user, group,): 

    q = pyad.adquery.ADQuery() 
    user = q.execute_query(
       attributes = ["firstName", "description"], 
       where_clause = "objectClass = '*'", 
       base_dn = "OU=users, DC=domain, DC=com" 
      ) 
    if user == true: 
     if user.is_member_of(group, "") 
      logging.info('User is already created and is member of Specified AD Group') 
     else 
      user.add_to_group(user, group) 
    else 
     new_user = ADUser.create("%firstName", "%lastname", "") 
     group = ADGroup.from_dn(group) 
     group.add_member(new_user) 
+0

您發佈的Python是不正確,「with」語句都沒有縮進塊。我認爲這是因爲你對這個網站的格式不熟悉,並試圖糾正它。如果結果不是您計算機上的結果,請回滾編輯和/或在此處輸入正確的代碼。 – Anthon

回答

2

正在加載的用戶信息,但是你只打印。您至少應該將其存儲以備後用。除此之外,還有完全沒有必要使用不安全yaml.load()

from ruamel import yaml 

with open("AD.yaml", 'r') as stream: 
    try: 
     data = yaml.load(stream) 
     print(data) 
    except yaml.YAMLError as exc: 
     print(exc) 

用,你可以打電話給你的方法:

user = data['AdUser'] 
create_User(user['username'], user['group']) 

有從沒有使用yaml.load()考慮,除了幾件事情:

  • 在Python中,您不應該在您自己編寫的方法中使用camel_case(某些庫符合非Pythonesc特定外殼),因此請更改create_Usercreate_user
  • 參數添加到create_user爲你要註冊其他的東西(電子郵件等)
  • 考慮對你的文件的頂級序列以便您可以通過從YAML加載的數據迭代並註冊在一個多用戶去

    - firstName: <value> 
        lastName: <value> 
        username: <value> 
        email: <value> 
        group: <value> 
    - firstName: <value> 
        lastName: <value> 
        username: <value> 
        email: <value> 
        group: <value> 
    

    然後執行:

    for user in data: 
        create_user(user['username'], user['group']) 
    
+0

非常感謝您的回覆!我將一些更改合併到我的代碼庫中。您是否對我設置的if語句或AD查詢有任何意見?我不確定你是否對如何調整其中的某些內容有任何建議。 – user2019182

+0

對不起,我不熟悉ActiveDirectory的工作,所以我沒有太多的評論。這行'if user == true'需要'true'來定義/導入,這看起來有點奇怪。 Python具有'True',但不會用'=='(或'is')進行測試,然後執行'if user:' – Anthon

+0

非常感謝,我向您致謝! – user2019182

相關問題