可能な解決策
Active Directoryから情報を取得するためのソリューションは、 ここにあります 。 Python active_directory、win32api用のモジュールを提供しました。 しかし、スクリプトを実行するとエラーが発生します
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-18: ordinal not in range(128)
エンコーディングを使用したものですが、問題を解決する方法がわかりません。 助けて!
尊敬されるctrlokが助言したように、ldapモジュールを使用した例はまだあります。
Active Directoryから現在のユーザー数とそのリストを取得する実用的な例を次に示します
# -*- coding: cp1251 -*-
import codecs, sys
ctrl = 'domain_name'
outf = codecs.getwriter('cp1251')(sys.stdout, errors='replace')
sys.stdout = outf
import win32com.client
def get_all_users_in_domain():
conn = win32com.client.Dispatch("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open("Active Directory Provider")
query = "SELECT ADsPath FROM 'LDAP://DC="+ctrl+"' WHERE objectClass='user' AND objectCategory='person'"
rs = conn.Execute(query)[0]
users = []
while not rs.EOF:
obj = win32com.client.GetObject(rs.Fields(0).Value)
users.append(obj)
rs.MoveNext()
conn.Close()
return (users)
def get_enabled_user_in_domain(users):
enabled_users = []
for x in range(len(users)):
if users[x].AccountDisabled:
enabled_users.append(users[x])
return (enabled_users)
def print_user (users):
print u" %d \n" %(len(users))
for x in range(0, len(users)):
print users[x].Name.replace(u'CN=','')
users = get_all_users_in_domain()
enabled_users = get_enabled_user_in_domain(users)
print_user(enabled_users)
ここで問題は、ここで各ユーザーが属するグループを追加する方法です...