Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] BASH+Ldapsearch - поиск включенных и отключенных учетных записей (http://forum.oszone.net/showthread.php?t=350485)

dahiko 14-01-2022 13:53 2977607

BASH+Ldapsearch - поиск включенных и отключенных учетных записей
 
Всем привет!

Стоит задача: скриптом 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 2977610

Решил вопрос. Надо отрицание тоже брать в скобки. Получилось в итоге так
поиск включенных
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 2977623

Помогите еще пожалуйста с поиском в разных OU. Нужно искать в нескольких OU и выводить в итоговый суммированный результат.

dahiko 17-01-2022 12:31 2977847

Попробовал сделать разными путями. Одно из решений - использовать конструкцию $((переменная+переменная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 2977856

https://stackoverflow.com/questions/...ne-specific-ou

dahiko 17-01-2022 14:01 2977867

Цитата:

Цитата DJ Mogarych
https://stackoverflow.com/questions/...ne-specific-ou »

Эту статью тоже находил, читал. Но проблема оказалась в другом. У меня текстовый редактор в Mobaxterm был настроена формат Dos. Поэтому при каждом сохранении документа в конце строки добавлялся символ "^M".
Поменял формат на Unix, удалил все лишние символы и все заработало. В итоге эти конструкции оказались рабочими:

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

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


Время: 12:24.

Время: 12:24.
© OSzone.net 2001-