web-dev-qa-db-ja.com

現在のホストの識別名(DN)を直接adeditで取得するにはどうすればよいですか?

コマンドラインからDNを取得する方法を知っています。

adquery user -D "$(hostname -s)"

ただし、DNをadeditスクリプトに組み込みたいと思います。 select_object {DN here}ができれば、他に必要なことができます。

DNをadeditで直接取得する方法がわかりません。


adqueryのマニュアルページ(Centrify Suiteの一部)によると:

Adqueryコマンドは、下位互換性のために提供されており、Centrifyが管理するコンピューターのコマンドラインからユーザーとグループに関する情報をActiveDirectoryに照会できるようにします。このコマンドを使用して、クラシックゾーンまたは階層ゾーンの情報を照会できます。ただし、ほとんどの場合、adeditコマンドまたはスクリプトを使用して、階層ゾーンの情報をActiveDirectoryに照会する必要があります。

ただし、adqueryコマンドをadedit内のネイティブ呼び出しに変換する方法について見つけることができる明確なドキュメントはありません。

例えば:

adquery user `hostname -s` --dump

これにより、コマンドを実行しているコンピューターであるユーザーのすべての生の属性と値のリストが表示されます。 --attributeフラグを使用すると、1つの属性のみを返すことができます。

adeditを使用すると、select_object THE_DNを実行した後、get_object_field descriptionを実行することで「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に基づいて構築されているため、この質問にActive Directoryと同様にTclのタグを付けました。Centrifyタグを作成するという評判はありません。)

1
Wildcard

現在、テストするCentrifyホストはありません。しかし、あなたが探しているのはget_adinfo Hostget_objectsの組み合わせだと思います。

get_adinfo Hostは、現在のホストの情報または少なくともコンピュータ名(メモリがかすんでいる)を提供します。

get_objects深度、ベース(DN)、フィルターなどの一般的なLDAPパラメーターを使用する一般的なLDAPクエリコマンドの詳細。

したがって、コンピューター名を取得したら、get_objectsを使用してDNに次のようなクエリを実行できます。

set results [get_objects -depth sub "DC=example,DC=com" "(&(objectClass=computer)(sAMAccountName=$hostname))"]
set compDN [lindex $results 0]

繰り返しますが、完全にテストされていません。しかし、これであなたは正しい方向に進むはずだと私は確信しています。

1
Ryan Bolger