2017-03-31 77 views
-1

我有一個功能,看起來像這樣:For循環未正確執行纏嘗試/除

def get_users(yaml_file="AD_Users.yml"): 
with open(yaml_file, 'r') as stream: 
    try: 
     data = yaml.load(stream) 
    except yaml.YAMLError as exc: 
     print(exc) 
return data.itervalues() 

def create_user_in_ad(new_users): #username, password, base_dn, fname, lname, domain): 
    # LDAP connection 
    for new_user in new_users: 
     try: 
      logging.info('Connecting to LDAP Server %s ' % LDAP_SERVER) 
      ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, 0) 
      ldap_connection = ldap.initialize(LDAP_SERVER) 
      ldap_connection.simple_bind_s(BIND_DN, BIND_PASS) 
      print "Connected to LDAP Server!" 
     except ldap.LDAPError, error_message: 
      print "Error connecting to LDAP server: %s" % error_message 
      #logging.info('Unable to connect to LDAP Server %s ' % LDAP_SERVER) 
      return False 
#   sys.exit(1) 

     # Check and see if user exists 
     try: 
      print new_user['username'] 
      logging.info('Querying AD for user: %s ' % new_user['username']) 
      user_results = ldap_connection.search_s(BASE_DN, ldap.SCOPE_SUBTREE, 
                '(&(sAMAccountName=' + 
                new_user['username'] + 
                ')(objectClass=person))', 
                ['distinguishedName']) 
      print user_results 
     except ldap.LDAPError, error_message: 
      print "Error finding username: %s" % error_message 
      logging.info('Unable to query for user: %s ' % new_user['username']) 
      return False 

     # Check the results 
     if len(user_results) != 0: 
      print "User", new_user['username'], "already exists in AD:" 
      return False 
      sys.exit(1) 

     # Lets build our user: Disabled to start (514) 
     USER_DN = 'cn=' + new_user['fname'] + ' ' + new_user['lname'] + ',' + BASE_DN 
     GROUP_DN = 'ou=' + new_user['group_dn'] + ',' + BASE_DN 
     user_attrs = {} 
     user_attrs['objectClass'] = \ 
        ['top', 'person', 'organizationalPerson', 'user'] 
     user_attrs['cn'] = new_user['fname'] + ' ' + new_user['lname'] 
     user_attrs['userPrincipalName'] = new_user['username'] + '@' + new_user['domain'] 

     # Add the new user account 
     try: 
      ldap_connection.add_s(USER_DN, user_ldif) 
      logging.info('Adding user into AD: %s ' % new_user['username']) 
     except ldap.LDAPError, error_message: 
      print "Error adding new user: %s" % error_message 
      return False 

     # Add the password 
     try: 
      ldap_connection.modify_s(USER_DN, add_pass) 
      logging.info('Password added for user: %s ' % new_user['username']) 
     except ldap.LDAPError, error_message: 
      print "Error setting password: %s" % error_message 
      return False 

     # Change the account back to enabled 
     try: 
      ldap_connection.modify_s(USER_DN, mod_acct) 
      logging.info('Enabling AD Account for user: %s ' % new_user['username']) 
     except ldap.LDAPError, error_message: 
      print "Error enabling user: %s" % error_message 
      return False 

     # Add user to their primary group 
     try: 
      ldap_connection.modify_s(GROUP_DN, add_member) 
      logging.info('Adding user to group %s: ' % new_user['group_dn']) 
     except ldap.LDAPError, error_message: 
      print "Error adding user to group: %s" % error_message 
     return 
new_users = get_users() 
if args.createusers is not "None": 
    create_user_in_ad(new_users) 

它在YAML文件與用戶信息調用:

User1: 
    username: adtest2 
    fname: adtest2 
    lname: adtest2 
    domain: test.com 
    group_dn: test 
# group: 

    # User2: 
    # username: testing 
    # fname: testing 
    # lname: bbbbb 
    # domain: test.com 
    # group_dn: test 
# # group: 

    ldap_connection.unbind_s() 

    print "User %s has been created in AD!" % new_user['username'] 

    # All is good 
    return True 

現在的問題是它在第二個用戶沒有被註釋掉時唯一執行的,我想知道我在for循環中做了什麼錯誤?它正在做所有我希望它做得很好的事情。我使用Python 2.7.13 btw!

輸出現在只顯示第二用戶:

Connected to LDAP Server! 
adtest2 
+0

你會得到什麼結果表明它只在第二個用戶上執行?如果你添加'print new_user'。 – Roelant

+0

我正在打印查詢的結果,其中您可以看到我正在打印new_user的用戶名。我還添加了一個打印new_user ['用戶名']將用戶用戶名打印到代碼中,仍然只返回第二個人 – user2019182

+0

用輸出更新了問題 – user2019182

回答

0

問題是,收益率爲正的內部執行的循環。我只是把它移到for循環之外。