我在文本文件中有一个用户列表。我需要查询我们的校园Active Directory以确保这些用户仍然是“活动”用户(我的机器不属于校园AD)。用户列表映射到AD上的许多相同属性(name,cn,sAMAccountName,uid,gecos)。我可以使用ldapsearch为各个用户成功查询AD,因此我想弄清楚的是:
a)如何使用该文件作为查询的输入
b)如何构建一个shell脚本,以便查询逐行进行,然后输出任何“非活动”用户,以便我可以通过电子邮件发送通知。
非常感谢任何帮助。
答案 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"