2017-03-18 5 views
1

私はPythonにはかなり新しく、ADサーバをクエリしていくつかの属性(username、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) 

私はADにアクセスし、検索とユーザー作成とグループ設定を実行するPyADライブラリを使用しています。これらは、私は、ユーザーの作成に使用する方法である、グループの追加や照会が(私がしようとしている

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" 
    ) 

https://zakird.com/pyad/index.html

これは私が執筆を開始した内容れる:ここでのドキュメントへのリンクです)これらは良く見えるかどうかを把握するために、私は現在持っている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

したと

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

を移動して行う1で複数のユーザーを登録します両方の '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を使用しないでください(一部のライブラリはPython以外の特定のケーシングに準拠しているため)あなたが登録したいと思う他のもの(電子メールなど)が
  • あなたはYAMLからロードされたデータを反復処理することができるようにシーケンスファイルのトップレベルにすることを検討するためにcreate_user

  • からはcreate_userにパラメータを追加しますあなたの投稿Pythonは

    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

関連する問題