ActiveDirectoryで高い層のOUを指定する方法

このQ&Aのポイント
  • ActiveDirectoryで、多階層のOrganizational Unit(OU)が作成されている場合、高い層のOUを指定してユーザー情報を取得する方法について説明します。
  • 例えば、OUが以下のように階層化されている場合、特定のOUに所属するユーザー情報を取得する方法はいくつかあります。
  • ユーザー情報を取得する際、OUの指定によって取得されるユーザー情報が異なるため、注意が必要です。適切なOUの指定方法を用いて、必要なユーザー情報を取得してください。
回答を見る
  • ベストアンサー

ActiveDirectoryで高い層のOUを指定する

以下のように多階層でOrganizational Unitが作成されています。 ou1 - ou1-1    - ou1-2    - ou1-3 - ou1-3-1 ou2 - ou2-1    - ou2-2 ou3 - ou3-1 - ou3-1-1 この状態で、ou1-1 に所属するユーザー情報を取得したいのですが、その方法がわかりません。 LDAP://xxxxx.xxx/OU=ou1-1,dc=xxxxx,dc=xxx と指定すると、以下のエラーが出てしまいます。 System.DirectoryServices.DirectoryServicesCOMException: サーバーにそのようなオブジェクトはありません。 LDAP://xxxxx.xxx/OU=ou1,dc=xxxxx,dc=xxx と指定すればユーザー情報は取得できますが、1-1だけでなく、1-2,1-3のユーザー情報も一緒に取れてしまいます。 1-1のユーザーだけを指定するにはどうすればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

環境が良くわからないのでActive Directoryの一般的なコマンドです。 csvde -f c:\csvde.csv -s DC名 -d "ou=ou1-1,ou=ou1,dc=xxx,dc=xxx" -p subtree -r "(objectclass=User)" -l "displayName,mail,samAccountName" -u ldifde -f x:\ldif.ldf -s DC名 -d "ou=ou1-1,ou=ou1,dc=xxx,dc=xxx" -p subtree -r "(objectclass=User)" -l "displayName,mail,samAccountName" -u 欲しい情報は引用符の中で指定してください。 以上windowsベースで参考まで

stoutontap
質問者

お礼

ou=ou1-1,ou=ou1 とやればいいのですね! ou=ou1,ou=ou1-1 とやってしまっていました。 解決しました。ありがとうございます!

関連するQ&A

  • ActiveDirectoryのユーザー取得

    GetObject("LDAP://OU=ABC,DC=XXX,DC=local") でOU毎のユーザーは取得できるのですが、 OUを指定せずに、全てのユーザーを取得する方法はないでしょうか? (複数のOUが作成されているので、指定したくない) ネットで検索しても「CNorOU」を指定しない方法が見つけられませんでした。 OUの一覧を取得して、複数回ループするしかないのでしょうか? よろしくお願いします。

  • LDAP認証について

    お世話になっております。 この質問がこのカテゴリであっているか自身がありませんが、実行プログラムがASPなため、このカテゴリに質問させて頂きます。 LDAP認証をする場合、OUがない、ActiveDirectoryは、OUに何を指定すればいいのでしょうか?「Users」でいいのでしょうか? 以下プログラム strLdapPath="LDAP://xxx.xxx.xxx.xxx/CN=123,OU=???,DC=xxx,DC=xxx" strUserID="123" strPassword="****" Set obj = objLdap.OpenDSObject(strLdapPath, strUserID, strPassword, 0) よろしくお願い致します。

  • LDAPのdnの指定方法について

    LDAPを始めて構築している者です。 ユーザ情報を管理するために、openLDAPをインストールしました。 インターネット上にa-company.co.jpというドメインを持っているとします。 dnの指定に、以下の例1ように"dc"属性を用いるのでしょうか。それとも、例2のように"c"属性を用いるのが一般てきなのでしょうか?  例1 dn: ou=people,dc=a-company,dc=co,dc=jp  例2 dn: ou=people,o=a-comapny,c=jp またユーザ情報の管理にinetOrgPersonというObjectClassを使用したいと考えています。 そのため、私自身は、例1を採用したいと思っています。 例1では何かデメリットはありますでしょか? もし例2が一般的な場合、"c"属性を利用するためには、 countryという別のOjectClassを継承する必要があるようです。 以下のように記述するとldapaddする際に異なった種類のオブジェクトを追加できませんというようなエラーが出てしまいます。  dn: uid=xx,ou=people,dc=a-company,dc=co,dc=jp  ClassObect: inetOrgPerson  ClassObect: country  uid: xx 例2が一般的な場合inetOrgPersonとcountry を併記するldifの記述方法はあるのでしょうか? もしあれば教えて頂けると幸いです。 LDAPの構築経験がある方、ぜひご教授お願いいたします。 よろしくお願い致します。

  • LDAP-OS認証 グループによる制限

    LDAP認証の設定がされているLinuxサーバ(CentOS 5.1)へログインする 際に、特定のグループに所属しているユーザのみ許可するにはどうすれ ばよいのでしょうか? ・grp1のldif dn: cn=grp1,ou=Group,ou=People,dc=abc,dc=jp objectClass: posixGroup cn: grp1 gidNumber: 603 memberUid: user1 memberUid: user3 ユーザはuser1、user2、user3の3人がLDAPへ登録されています。 現在は3人ともログインできてしまう。 user1、user3のみログインできるようにしたい。 /etc/ldap.conf のpam_groupdnおよびpam_member_attributeを修正して みましたが挙動は変わりません。 pam_groupdn cn=grp1,ou=Group,ou=People,dc=abc,dc=jp pam_member_attribute memberUid どなたかお知恵をお貸しください。

  • お世話になります。

    お世話になります。 ActiveDirectoryについての質問です。 Server:WindowsServer2003 R2 全ユーザーアカウントの作成日付を取得し、指定場所へ出力したい。 (1)以下のプログラムでは全ユーザーアカウントを対象にすることができません。 全ユーザーアカウントを対象とするにはどのように記述すればよいでしょうか。 ▼プログラム Set objUser = GetObject("LDAP://cn=userName,ou=Kanri,ou=jsystem,dc=domain,dc=co,dc=jp") Wscript.Echo objUser.WhenCreated (2)保存場所の指定方法及び、ファイル形式を指定して、保存するにはどのように記述すればよいで  しょうか。 以上、2点よろしくお願い致します。

  • ActiveDirectoryのユーザー一括登録

    Win2008r2でADを構築し、ユーザー情報の抜出(export)、一括登録(import)を csvdeコマンドで練習しております。 C:>csvde -u -f export.csv -r objectCategory=user コマンドにより、なんとかCSV形式で、ADに登録されている情報を抜き出すことはできました。 ecportしたファイルを基にしてimport用データーを作成したのですが、上手く行かない状態です。 登録するユーザー ⇒user03とuser04 import.csvの中身↓↓ N,objectClass,cn,name,userAccountControl,sAMAccountName,sn,displayName,userPrincipalName "CN=user03,OU=Test-OU,DC=test,DC=local",user,user03,user03,512,user03,user03,user03,user03@test.local "CN=user04,OU=Test-OU,DC=test,DC=local",user,user04,user04,512,user04,user04,user04,user04@test.local import.csvを実行すると。 C:>csvde -i -f import.csv "(null)" に接続しています SSPI を使って現在のユーザーとしてログインしています ファイル "import.csv" からディレクトリをインポートしています 入力ファイルを開くときにエラーがありました 0 個のエントリを正しく修正しました。 プログラムでエラーが発生しました ログはファイルに書き込まれませんでした。ログ ファイルを生成するには、 -j オプションを使ってログ ファイルへのパスを指定してください。 という状態になってしまいます。 以下のサイトを参照して行っています。 http://itpro.nikkeibp.co.jp/article/COLUMN/20080125/292017/ どなたかご教授下さい。

  • perlでactive directoryに登録

    perlスクリプトを使いactive directoryにユーザを登録したいと思っております。 perlもactive directoryも初めてで理解していませんが 仕事でどうしてもやらなくてはならないためどなたかわかる方教えて頂けますと助かります。 環境: windows server 2008R2 active directory 2008 centos 6 やりたいことは、perlを使いactive directoryにユーザ登録をしたいのですが どうやっても登録することができません。 必要なperlモジュールはインストールしてるつもりです。 以下がスクリプトとなります。 =================ここから================== #!/usr/bin/perl use strict; use Net::LDAP; my $ldap_host = 'xxx.xxx.xxx.xxx'; my $bind_dn = 'cn=admin,o=example,c=com'; my $bind_pw = 'password'; my $ldap = Net::LDAP->new( $ldap_host ) or die "$@ $!"; $ldap->bind( $bind_dn, password => $bind_pw ) or die "$@ $!"; $uid = "localuser"; $suffix = ",ou=People,dc=example,dc=com"; $dn = "uid=" . $uid . $suffix; $addResult = $ldap->add( $dn, attr => [ 'cn' => $uid, 'sn' => $uid, 'mail' => $uid . '@example.com', 'uid' => $uid, 'objectClass' => [ 'top', 'person', 'organizationalPerson' ], ] ); if ( $addResult->code == 0 ) { print "added $dn\n"; } else { $ldap->unbind; warn "failed to add entry: ", $addResult->error, "\n"; exit( $addResult->code ); } =================ここまで=================== 上記を実行すると以下のエラーコードが返ってきます。 comment:AcceptSecurityContext error, このエラーについてとあるサイトをみると 「ユーザーは次回ログオン時にパスワード変更が必要」にチェックをいれていると 出力されてしまうとかかれていたのでチェックを外しているのですが結果は同じです。 上記のスクリプトは以下のサイトを参考にして作ったのですが わからない部分があります。 http://d.hatena.ne.jp/askadna/20080326 http://www.knowd.co.jp/yamazaki/index.php?q=node/134 $ldap->addのメソッド?に$dnとattr~~というパラメータを与えているのですが 配列の階層が異なっていますがaddメソッドはこれを認識することはできるのでしょうか。 例えば、 $ldap->addを部分を消して $addResult = ( $dn, attr => [ 'cn' => $uid,  ~以下省略~ 以下のようにprintで表示すると配列の階層はバラバラです。 これでaddは正常に階層をみて動作するのでしょうかということです。 print $addResult[0]・・・・uid=localuser,ou=People,dc=example,dc=com print $addResult[1]・・・・attr print $addResult[1]->[0]・・・・cn print $addResult[1]->[1]・・・・localuser print $addResult[1]->[2]・・・・sn ~~省略~~~ ちなみに、searchメソッドでldapの情報の取得はできています。 少し気になるのはActive directoryに必須項目があり それをattrに格納させていないことが原因だったりするのでしょうか。 Active Directoryの必須項目というのがわかりませんが基本的に例えばSIDなどは システム自動で入れてくれるとおもっていますが・・・ 上記のスクリプトでADにバインドできていることがAD側のログで確認できております。 addでこけているみたいなのですが、どうかよろしくお願い致します。

    • ベストアンサー
    • Perl
  • LDAPの区切り文字。

    WSHでLDAPを使用したいのですが、うまくいきません。 CN名(姓,名)にカンマが含まれているのでオブジェクトの取得に失敗します。どのように記述したらいいのでしょうか? LDAPの区切り文字をカンマ以外の区切り文字に変えたりできるのでしょうか? Set objUser = GetObject("LDAP://cn=LASTNAME, FirstName" & ", ou=Test, dc=Test")

  • OUを移動してもポリシーが変わらない

    Windows2003でActiveDirectoryを構築しておりますが、挙動が判らないことがあり、 経験者の皆さまのお知恵を拝借したく存じます。 ドメイン参加しているPCのアカウントのポリシーを変更する際に、 「ActiveDirectoryユーザーとコンピュータ」の画面で、USR2というOUに所属しているアカウントを ドラッグ&ドロップしてUSR1というOUに移動させました。 USR1とUSR2はUSRという階層の下にあり、USRはALLというドメインの配下にあります。 ここで、USR2に対して設定してあるGPO(Windowsの設定-IEのメンテナンス-接続/プロキシの設定)がUSR1に移動させた後も外れない状態になってしまっています。 PCを何度もログアウトしたり、再起動しても同じです。 また、そのGPOは同じレベルのUSR1及び上の階層のOUでも使用していません。 このユーザーは色々なソフトをインストールしてあるので、アカウントを作り直す訳には いかないので困っています。 こうしたGPOによる設定内容をリフレッシュする方法はあるのでしょうか? よろしくお願い致します。

  • active directoryで あるouのメールを取得

    active directoryで、あるouにはいっている全ユーザーの メールアドレス情報とユーザー名をセットで取得したのです。(可能であれば[,]区切り等で) どなたか、よい解決方法をご存じのかたが いらっしゃいましたらご教授の方よろしくお願いします。

専門家に質問してみよう