我知道如何从命令行获取 DN:
adquery user -D "$(hostname -s)"
但是,我想将 DN 放入 adedit 脚本中。如果可以select_object {DN here}
,那么我就可以做其他需要做的事情了。
我只是不知道如何直接获取 DN adedit
。
根据adquery
手册页(Centrify Suite 的一部分):
adquery 命令是为了向后兼容而提供的,它使您可以从 Centrify 管理的计算机上的命令行查询 Active Directory 以获取有关用户和组的信息。您可以使用此命令查询经典或分层区域的信息。但是,在大多数情况下,您应该使用 adedit 命令或脚本查询 Active Directory 以获取分层区域中的信息。
但是,我找不到关于如何将adquery
命令转换为内部本机调用的清晰文档adedit
。
例如:
adquery user `hostname -s` --dump
这将列出运行命令的计算机用户的所有原始属性和值。使用标志--attribute
,我可以仅返回一个属性。
使用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 标签的声誉。)
答案1
我目前没有任何 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]
再次强调,完全没有经过测试。但我确信这应该能让你走上正确的方向。