Я знаю, как получить DN из командной строки:
adquery user -D "$(hostname -s)"
Однако я хочу добавить DN в сценарий adedit. Если я могу select_object {DN here}
, тогда я смогу делать все, что мне нужно.
Я просто не знаю, как получить DN прямо в adedit
.
Согласно adquery
страница руководства (часть Centrify Suite):
Команда adquery предназначена для обеспечения обратной совместимости, чтобы вы могли запрашивать в Active Directory информацию о пользователях и группах из командной строки на компьютере под управлением Centrify. Вы можете использовать эту команду для запроса информации для классических или иерархических зон. Однако в большинстве случаев следует использовать команды или сценарии adedit для запроса информации в иерархических зонах в Active Directory.
Однако я не могу найти четкой документации о том, как переводить adquery
команды в собственные вызовы внутри adedit
.
Например:
adquery user `hostname -s` --dump
Это дает список всех необработанных атрибутов и значений для пользователя, который является компьютером, на котором я выполняю команду. Используя --attribute
flag, я могу вернуть только один атрибут.
С участием adedit
, после того, как я побежал select_object THE_DN
, Я могу получить другие поля, например "описание", запустив get_object_field description
. Но как получить DN в первую очередь?
Я нашел руководство программиста adedit, но не могу найти там то, что мне нужно, несмотря на обширные поиски и эксперименты.
Пока у меня не будет лучшего подхода, я бегу:
adedit myscript "$(adquery user -D "$(hostname -s)")"
А потом в скрипте:
if { $argc != 1 } {
puts "format: $argv0 hostDN"
exit 1
}
set the_dn [lindex $argv 0]
bind ... (credentials here)
select_object $the_dn
(Примечание: adedit построен на Tcl, поэтому я пометил этот вопрос как Tcl, так и Active Directory. У меня нет репутации, чтобы создавать тег Centrify.)
На данный момент у меня нет хостов Centrify для тестирования. Но я предполагаю, что вы ищете комбинацию get_adinfo host
и get_objects
.
get_adinfo host
предоставит вам информацию о текущем хосте или, по крайней мере, имя компьютера (память тумана).
get_objects
более типичная команда запроса LDAP, которая принимает типичные параметры LDAP, такие как глубина, основание (DN) и фильтр.
Итак, когда у вас есть имя компьютера, вы можете использовать get_objects
чтобы запросить DN примерно так.
set results [get_objects -depth sub "DC=example,DC=com" "(&(objectClass=computer)(sAMAccountName=$hostname))"]
set compDN [lindex $results 0]
Опять же, совершенно не проверено. Но я почти уверен, что это поможет вам двигаться в правильном направлении.