0

そこで、特定の OU 内のユーザーのリストを AD で検索し、これをテキスト ファイルに出力するスクリプトを作成しました。このテキスト ファイルをフォーマットする必要があります。私が検索している最上位の OU には、この会社の各場所の OU が含まれており、その場所のユーザー アカウントが含まれています。

これが私のスクリプトです:

import active_directory
import sys

sys.stdout = open('output.txt', 'w')
users = active_directory.AD_object ("LDAP://ou=%company%,dc=%domain%,dc=%name%
for user in users.search (objectCategory='Person'):
 print user

sys.stdout.close()

私の出力は次のようになります。異なるユーザーごとに 20 行ほどしかありません。

LDAP://CN=%username%,OU=%location%,OU=%company%,dc=%domain%,dc=%name%

したがって、私がやりたいことは、これを平易な英語に置き換えて、ユーザー名とサブセット OU を表示するだけで読みやすくすることです。したがって、この:

LDAP://CN=%username%,OU=%location%,OU=%company%,dc=%domain%,dc=%name%

これになります:

%username%, %location%

これを .csv または .xls にエクスポートして、場所またはアルファベット順に並べ替えることができる列に入れる方法があれば、それは素晴らしいことです。私はテキストファイルを理解するだけで大​​変な時間を過ごしました。

4

1 に答える 1

1

このような文字列がある場合

LDAP://CN=%username%,OU=%location%,OU=%company%,dc=%domain%,dc=%name%

その後、それを操作することは非常に簡単です。形式が標準で変更されない場合、それを操作する最も速い方法は、string.split()を使用することです。

>>> splitted = "LDAP://CN=%username%,OU=%location%,OU=%company%,dc=%domain%,dc=%name%".split('=')

リストを生成します

>>> splitted 
["LDAP://CN", 
 "%username%, OU",
 "%location%, OU",
 "%company%, dc",
 "%domain%, dc",
 "%name%"]

これで、リストのアイテムにアクセスできます

>>> splitted[1]
"%username%, OU"

「、OU」を取り除くには、別の分割を行う必要があります。

>>> username = splitted[1].split(", OU")[0]
>>> username
%username%

CSVは単なるテキストファイルなので、ファイルの末尾を変更するだけです。これが完全な例です。

output = open("output.csv","w")
users = active_directory.AD_object ("LDAP://ou=%company%,dc=%domain%,dc=%name%
for user in users.search (objectCategory='Person'):
    # Because the AD_object.search() returns another AD_object
    # we cannot split it. We need the string representation
    # of this AD object, and thus have to wrap the user in str()

    splitteduser = str(user).split('=')
    username = splitteduser[1].split(", OU")[0]
    location = splitteduser[2].split(", OU")[0]
    output.write("%s, %s\n"%(username,location))

    % \n is a line ending
    % The above is the old way to format strings, but it looks simpler.
    % Correct way would be:
    % output.write("{0}, {1}\n".format(username,location))    

output.close()

これは周りで最も美しい解決策ではありませんが、理解するのに十分簡単なはずです。

于 2012-10-14T11:01:28.467 に答える