0

因此,我创建了一个脚本,用于在 AD 中搜索特定 OU 中的用户列表,并将其输出到文本文件。我需要格式化这个文本文件。我正在搜索的顶部 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 回答