使用输入文件为ldapsearch创建shell脚本

时间:2015-12-10 21:41:29

标签: bash shell scripting active-directory ldap-query

我在文本文件中有一个用户列表。我需要查询我们的校园Active Directory以确保这些用户仍然是“活动”用户(我的机器不属于校园AD)。用户列表映射到AD上的许多相同属性(name,cn,sAMAccountName,uid,gecos)。我可以使用ldapsearch为各个用户成功查询AD,因此我想弄清楚的是:

a)如何使用该文件作为查询的输入

b)如何构建一个shell脚本,以便查询逐行进行,然后输出任何“非活动”用户,以便我可以通过电子邮件发送通知。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可以尝试完成你想要的东西:

emailFile="/var/tmp/emailFile.txt"
for i in $(cat ${filename}) ; do
  results=$(*INPUT LDAPSEARCH HERE REPLACING USERNAME WITH ${i}* | grep -i lastlogontimestamp)
  if [[ ${results} != "" ]] ; then
    echo "${i} appears to be an active user"
  else
    echo "${i} IS INACTIVE"
    echo "${i}" >> "${emailFile}"
  fi
done

这不是一个可用的脚本,但是这应该让您非常了解如何在您的环境中使用它。值得注意的事情......

$ {filename} =您的姓名列表的位置/文件名

在此输入LDAPSEARCH,用$ {i}替换USERNAME =您可以输入命令在此处运行ldap搜索。 示例$(ldapsearch -D“cn = manager”-w password -h server.example.com -b“dc = example,dc = com”“cn = $ {i}”| grep -i“lastlogontimestamp”)

“lastlogontimestamp”将等于您要检查的查询部分,以确定用户是否处于活动状态。

这会将$ {results}变量设置为您要查找的字符串。如果用户从未登录,则可以是日期戳或空。

下一个“if”语句会将结果与您期望的字符串/模式进行比较。我在上面的if语句中指出,如果$ {results}不等于任何内容,则通知您搜索的用户处于活动状态。如果$ {results}确实为空,则记录用户名。

您必须修改ldapsearch部分以满足您的需求,并且if语句必须与您希望从查询中看到的内容相匹配(如果用户未处于活动状态)。我希望这会有所帮助。

答案 1 :(得分:0)

回答你在评论中提供的问题......

您可以使用嵌套的if表达式。实施例。

if [[ $(some command) = "Some expected result" ]] ; then
  if [[ ${results} != "" ]] ; then
    echo "${i} appears to be an active user"
  else
    echo "${i} IS INACTIVE"
    echo "${i}" >> "${emailFile}"
  fi
fi
done

您可以在for循环中运行命令添加第二个变量,例如

userExists=$(some ldapsearch command to see if user exists)
results=$(*INPUT LDAPSEARCH HERE REPLACING USERNAME WITH ${i}* | grep -i lastlogontimestamp
if [[ ${userExists} = "Some expected result" ]] ; then
  if [[ ${results} != "" ]] ; then

你还问了一个关于使用" grep"的问题。寻找多个项目。示例如下。

grep "514\|546"

示例2。 假设我有一个名为test.txt的文件,包含5行

one
two
three
four
five

我会运行以下命令查看文件内部以找到"两个"和"三"

cat test.txt | grep "two\|three"