批处理脚本用于将 Active Directory 中的信息(姓名、电话号码、位置等)导出到 csv 文件中

批处理脚本用于将 Active Directory 中的信息(姓名、电话号码、位置等)导出到 csv 文件中

我公司的秘书使用一个电子表格来查找信息,该表格列出了员工的姓名、电话号码和位置。所有这些信息都位于 AD 中,但问题是我们是一家快速发展的公司,员工经常更换位置、职位,有时还会更换电话号码,所以她的电子表格经常过时。我的技术水平很低,但我的老板建议我尝试编写某种批处理脚本,她可以从她的计算机上运行该脚本,该脚本进入 AD,将这些信息提取到 csv 中,然后将其放入 excel 文档中。

我不太熟悉脚本编写(在学校学过一点 Python,但不是很多),所以我想我只是在寻找一些正确方向的指引。我几乎完全了解脚本需要做什么,我只是不确定有哪些命令可以与 AD 交互并从中提取信息。使用批处理脚本是否可以做到这一点?她是否需要对 AD 进行某些访问才能从她的计算机运行它?

答案1

除非您使用的是 Windows NT 4,否则我建议使用 Windows PowerShell - 它功能强大且非常易于使用(至少与 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

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

答案2

我可以告诉你解决了前雇主的类似问题。我们只使用 Windows 来托管 AD 和 Exchange,公司中的所有其他服务器都运行FreeBSD所以我使用一个名为广告工具它充当 Active Directory 客户端,并输出列表或单个属性。使用 adtool,在您按照其文档配置其对 AD 服务器的访问权限后,您可以使用以下 shell 命令提取基本列表:

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

对于每条记录所需的附加信息,您可以查询记录并解析结果:

$ 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 脚本旨在将数据发送到 stdout,因此可以将其重定向到服务器上的文件或复制到员工的工作站以导入 excel。请注意,它不是完美的。目前,它不会转义字段名称中可能存在的双引号。如果这对您来说是一个风险,您可以自行承担。

恐怕我没有 AD 服务器来测试这个,所以我无法给你一个完整的解决方案,但是如果你决定采用这条路线并在 Linux 或 Unix 中构建你的自动化,我会很乐意帮助你在看到你正在解析其数据的基本 adtool 命令的输出后进行必要的文本处理。

注意:您也可以使用任何 LDAP 客户端(例如OpenLDAP几乎每个 Linux 和 BSD 发行版都提供该工具。Adtool 只是一种便利工具。

答案3

如果秘书拥有 Microsoft Office 2013 Professional Plus、Office 365 ProPlus 或 Excel 2013 Standalone,她可以使用 Excel Power Query 将这些信息从 Active Directory 直接拉入 Excel。从 Excel Power Query 菜单选项中选择“来自其他来源”,然后选择“来自 Active Directory”。可以从 Power Query 编辑器中选择所需的数据,以创建可随时刷新的报告。不需要额外的权限。

Power Query 插件可从此处下载:https://www.microsoft.com/en-ca/download/details.aspx?id=39379excel-FX104018616.aspx

相关内容