批处理脚本将信息从Active Directory(名称,电话号码,位置等)导出到csv文件中

在我的工作秘书使用电子表格,列出名称,电话号码和员工位置查询信息,如果有人问。 所有这些信息都位于AD,但问题在于我们是一家发展迅速的公司,人们经常更换地点,工作职位,有时甚至更换电话号码,所以她的电子表格经常过期。 我是一名低级技术人员,但是我的老板向我build议,我应该尝试一些她可以从计算机运行到AD的批处理脚本,将这些信息转换成csv,然后抛出转换成excel文件。

我对脚本不是太熟悉(在学校做了一些python,但数量不是很大),所以我想我只是在正确的方向寻找一些指针。 我几乎得到了脚本需要做什么,我只是不知道有什么命令与AD交互,并从中获取信息。 是否可以用批处理脚本来做到这一点? 她是否需要进入AD的某些访问权限才能从计算机上运行?

除非你使用的是Windows NT 4,否则我build议使用Windows PowerShell – 它非常强大,而且非常易于使用(至less与VBScript,KiXtart等相比)

要使用PowerShell与Active Directory交互和检索数据,使用PowerShell Active Directory模块将使您的生活变得更加轻松。

使用AD模块后,您可以轻松地查询AD以获取用户数据:

Import-Module ActiveDirectory # define the attributes we are interested in, this is the ldap-display-name of the attributes $InterestingAttributes = "displayName","physicalDeliveryOfficeName","telephoneNumber" # Use Get-ADUser to retrieve all enabled users, Select-Object to filter out stuff like the object DN $ADUsers = Get-ADUser -LDAPFilter "(!(userAccountControl:1.2.840.113556.1.4.803:=2))" -Properties $InterestingAttributes |Select-Object -Property $InterestingAttributes $ADUsers | Export-Csv -Path "C:\Users\HerAccountName\Desktop\Users.csv" -NoTypeInformation 

这些属性都是公开的,这意味着她可以自己执行脚本,她不需要pipe理员为她运行它

如果秘书有Microsoft Office 2013 Professional Plus,Office 365 ProPlus或Excel 2013 Standalone,则可以使用Excel Power Query将这些信息从Active Directory直接提取到Excel中。 从Excel Power Query菜单选项中select“From Other Sources”,然后select“From Active Directory”。 可以从Power Query编辑器中select所需的数据以创build一个随时可刷新的报告。 不需要额外的权利。

Power Query插件下载位于以下位置: https : //www.microsoft.com/en-ca/download/details.aspx?id=39379excel – FX104018616.aspx

我可以告诉你是如何解决前雇主的类似问题的。 我们只使用Windows来托pipeAD和Exchange,公司所有其他服务器都运行FreeBSD ,因此我使用一个名为adtool的开源工具开发了我们的导出自动化, adtool充当Active Directory客户端,并且将列表或单个属性。 通过adtool,在您根据文档configuration了对AD服务器的访问权限之后,您可以使用shell命令来获取基本列表,如下所示:

 $ adtool list ou=user,dc=example,dc=com 

对于每条logging需要的附加信息,您可以查询logging并parsing结果:

 $ adtool attributeget <object> <attribute> 

在一个脚本中,这可能看起来像这样:

 #!/bin/bash fmt='"%s","%s","%s"\n' # Grow as required adtool list ou=user,dc=example,dc=com | sed -e 's/^\S*=/"/;s/,\S*/"/' | while read name; do sAMAccountName=$(adtool attributeget "$name" sAMAccountName) email=$(adtool attributeget "$name" mail) somethingelse=$(adtool attributeget "$name" somethingelse) # etc printf "$fmt" "$sAMAccountName" "$email" "$somethingelse" ... done 

这个bash脚本旨在将数据发送到标准输出,因此可以将其redirect到服务器上的文件或复制到工作站的工作站以导入到excel中。 请注意,这并不完美 。 就目前而言,它并不能避免字段名称中可能存在的双引号。 如果对您有风险,您可以自行解释。

恐怕我没有AD服务器来testing,所以我不能给你一个完整的解决scheme,但是如果你决定走这条路,在Linux或Unix上build立自动化,我会很高兴一旦我看到你正在parsing的数据的基本adtool命令的输出,帮助你进行必要的文本处理。

注意:您也可以使用任何LDAP客户端(如几乎每个Linux和BSD发行版都可以使用的OpenLDAP)从Active Directory中获取所需的任何数据。 Adtool只是一个方便。