Python:如何打印AD用户的手机号码?

0 投票
1 回答
1196 浏览
提问于 2025-04-17 15:51

我又遇到点麻烦了,真是的。我在网上找了很多资料,想看看有没有人做过类似的事情,确实有一些人成功了,但我就是拼不出完整的拼图。

简单来说:我需要获取在AD(活动目录)中所有用户的手机号码。

到目前为止,最简单的方法似乎是Tim Golden的active_directory模块,这让我来到了我的代码目前的样子(基本上是直接复制粘贴他的示例代码):

#!/usr/bin/env python
import active_directory

def main():

    for user in active_directory.search (objectCategory='Person', objectClass='User'):
      print user

if __name__ == '__main__':
    main()

上面的代码运行得很好,但我就是不知道怎么把手机号码加到输出里。我不知道在AD/LDAP中这个字段的名字是什么,但我猜可能是'MobileTelephoneNumber'。

有没有人知道一个简单粗暴的方法,可以把每个用户的手机号码加上?不一定只要号码,也可以是所有的联系信息。

编辑:

我在猜测我需要稍微修改一下代码,像这样:

    for user, number in active_directory.search (objectCategory='Person', objectClass='User', objectClass='MobileTelephoneNumber'):
      print user, number

不过这似乎不太管用。我相信一定有办法做到这一点,但我就是想不出来。如果我能搞清楚号码在AD里到底存在哪儿,我可能最终能弄明白,但目前似乎没有太多相关的信息,或者说我看不懂的信息。

编辑 #2:
多亏了ivan_pozdeev,我能看到我需要的属性(“mobile”),但我还是不知道怎么用Python把它打印出来……有没有办法通过Python打印LDAP对象的所有属性,如果有的话,能不能用active_directory模块?

编辑 #3:
没事了,我想我明白了。一旦我有了能正常工作的代码,我会把它发回来,以防其他人也遇到我遇到的这个难题。

编辑 #4:
结果我有点傻。这其实很简单,只需要用以下代码:

    for user in active_directory.search (objectCategory='Person', objectClass='User'):
      print user, user.mobile

再次感谢ivan_pozdeev的帮助,真心感谢 :)

1 个回答

0

请查看我帖子中的编辑 #4。这其实也不是我自己解决的,但感谢用户 ivan_pozdeev 指引了我正确的方向。

如果将来还有其他人看到这个帖子,可以先下载 AD Explorer,然后查看你想打印的属性名称。如果属性名称是“mobile”,你可以通过指定 user.mobile 来获取它(就像我那样)。

还有 Tim Golden,如果你看到这个,真是太棒了,你在 active_directory 模块上的工作非常出色,帮了我大忙。

撰写回答