Войти

Показать полную графическую версию : [решено] BASH+Ldapsearch - поиск включенных и отключенных учетных записей


dahiko
14-01-2022, 13:53
Всем привет!

Стоит задача: скриптом bash в определенных OU в домене искать отключенные и включенные учетные записи.

Вот таким скриптом удалось выдернуть количество отключенных учеток.
echo "start"
EEC=$(ldapsearch -x -H ldap://192.168.1.110 -D 'test\admin' -w Qwerty1234 -b 'OU=IS,DC=test,DC=local' '(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))'| grep 'dn' | wc -l)
echo "disabled accounts = "$EEC

Никак теперь не пойму, как таким же способом найти только включенные учетки? Перед userAccountControl ставлю восклицательный знак, чтобы сделать отрицание NOT, и после этого скрипт не работает.
echo "start"
EEC=$(ldapsearch -x -H ldap://192.168.1.110 -D 'test\admin' -w Qwerty1234 -b 'OU=IS,DC=test,DC=local' '(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))'| grep 'dn' | wc -l)
echo "disabled accounts = "$EEC

Возвращается такой ответ:

start
ldap_search_ext: Bad search filter (-7)
disabled accounts = 0

dahiko
14-01-2022, 14:15
Решил вопрос. Надо отрицание тоже брать в скобки. Получилось в итоге так
echo "start"
EEC=$(ldapsearch -x -H ldap://192.168.1.110 -D 'test\admin' -w Qwerty1234 -b 'OU=IS,DC=test,DC=local' '(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'| grep 'dn' | wc -l)
echo "disabled accounts = "$EEC

dahiko
14-01-2022, 15:18
Помогите еще пожалуйста с поиском в разных OU. Нужно искать в нескольких OU и выводить в итоговый суммированный результат.

dahiko
17-01-2022, 12:31
Попробовал сделать разными путями. Одно из решений - использовать конструкцию $((переменная+переменная2))
echo "start"
EEC=$(ldapsearch -x -H ldap://192.168.1.110 -D 'test\admin' -w Qwerty1234 -b 'OU=IS,DC=test,DC=local' '(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'| grep 'dn' | wc -l)
echo "disabled accounts = "$EEC

echo "start2"
EEC2=$(ldapsearch -x -H ldap://192.168.1.110 -D 'test\admin' -w Qwerty1234 -b 'OU=IS2,DC=test,DC=local' '(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'| grep 'dn' | wc -l)
echo "disabled accounts = "$EEC2

res=$((EEC+EEC2))
echo $res

Но это не работает - возвращается ошибка
")syntax error: invalid arithmetic operator (error token is "

DJ Mogarych
17-01-2022, 13:05
https://stackoverflow.com/questions/9184978/ldap-root-query-syntax-to-search-more-than-one-specific-ou

dahiko
17-01-2022, 14:01
https://stackoverflow.com/questions/...ne-specific-ou »
Эту статью тоже находил, читал. Но проблема оказалась в другом. У меня текстовый редактор в Mobaxterm был настроена формат Dos. Поэтому при каждом сохранении документа в конце строки добавлялся символ "^M".
Поменял формат на Unix, удалил все лишние символы и все заработало. В итоге эти конструкции оказались рабочими:

Первая конструкция
res=$((EEC+EEC2))
echo $res

Вторая конструкция
res=$(($EEC+$EEC2))
echo $res




© OSzone.net 2001-2012