• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ActiveDirectoryのユーザ情報の取得方法)

ActiveDirectoryのユーザ情報の取得方法

このQ&Aのポイント
  • 現在、WinNTプロバイダを使用してコンテナオブジェクトを取得し、ユーザ情報を絞って取得する方法について教えてください。
  • 環境はWindowsXP、VC++6.0です。
  • ユーザ件数が多いため、指定したユーザ分のみ取得したい場合にはどうすれば良いですか?

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

a) ユーザ情報をCListとかに保持してリストに該当するものだけ処理する。 b) WinNT://DOMAIN/SERVER/<ユーザ名>,Users と直接指定してユーザ分だけADsGetObjectする。 ――みたいにするとか。 LDAPプロバイダなら、もうすこし複雑な検索条件を指定できるので、そちらを使うとか。

taka077
質問者

お礼

どうもありがとうございました! 参考にしてやってみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ウィンドウのないActiveXコントロールへのメッセージ通知方法

     内部的にWinsock2を使用して別のサーバアプリケーションと通信を行うActiveXコントロールを作成しています。サーバからのデータ受信を非同期で行うため、WSAAsyncSelect()関数を使用して指定したウィンドウにWinsockからイベントメッセージ(メッセージIDはWM_USER+1を使用)を通知させます。 コントロールをウィンドウなしのアクティベーション使用で開発しているので、WSAAsyncSelect()のメッセージ通知対象ウィンドウがコントロール内にありません。 コンテナによりコントロール充てにメッセージを送ってくれるということなので、コンテナのウィンドウハンドルを取得し、WSAAsyncSelect()のメッセージ通知対象ウィンドウに設定しました。が、コントロールのOnMessageWindowless()にWM_USER+1のイベントは来ていないようです。 私が試したウィンドウハンドルは、次のコードで取得できるものです。 1. AfxGetMainWnd()->m_hWnd 2. CWnd::GetActiveWindow()->m_hWnd (CWndは使用するなとありましたが)  取得するウィンドウハンドルが間違っているのでしょうか?それとも、コンテナアプリケーションはWM_USERメッセージをコントロールに送ることができないのでしょうか?もしくは、コンテナにWM_USER+1のメッセージはコントロールへ、という設定をしてやる必要があるのでしょうか?  なお、なぜウィンドウありのコントロールにしないかと申しますと、ウィンドウありだとコンテナ(IEを想定)に乗った直後にウィンドウが生成されず、自分のウィンドウハンドルを取得しようとするとNULLが返ってしまうからです。ユーザがマウスで一度クリックすればOKなのですが・・・オブジェクト生成時に自動的にウィンドウを生成する方法がわかりませんでした。もしこちらが分かればウィンドウありで行くこともできますので、分かる方いらっしゃいましたらお願いいたします。

  • ActiveDirectoryのユーザ情報取得方法

    ActiveDirectoryからユーザの所属部署情報を取得できません。 社内イントラネットのクライアントPC(Windows 7)上にASP.NETアプリ開発環境を作成、AcrtiveDirectory(AD)利用の社内イントラネットのためのASP.NETアプリを作成中です。解決できないところがあり、ご教授いただけますよう、よろしくお願いいたします。 【やりたいこと】 クライアントの所属部署に応じて、表示させるページを変えたい。 そのため、統合Windows認証にて、クライアントPCにてドメイン認証を受けたユーザのユーザ名を、User.Identity.nameにより取得後、ADに問合せ、ユーザの所属部署(department)情報を取得したい。 なお、User.Identity.nameにより、ユーザ名を取得できることは確認済です。 【開発・テスト環境】 ・クライアントPCのWindows7にIISを設置し、本IIS上で、作成中のアプリケーションを動かしActiveDirectoryとの連携を含め動作を確認しようとしている。(アプリケーション完成後には、Windows Server 2008 R2に配置予定)) ■IISにおける認証設定:Windows ■ASP.NETにおける認証設定:Windows ■ASP.NETの偽装設定:true(認証された一般ユーザに設定) ・開発ツール VWD2010 ・開発言語 ASP.NET VisualBasic(Web Form利用) 【現象】 Web Formページ userdep.aspxの<script>タグ内に次のスクリプトを記述。 Dim uName As String = User.Identity.Name Dim path As String = "LDAP=://LDAPserver_name/CN=Users, DC=XXX, DC=XXX, DC=jp" Dim root As DirectoryEntry = New DirectoryEntry(path) Dim schr As DirectorySearcher = New DirectorySearcher(root) schr.Filter = String.Format("(&(objectClass=user)(name={0}))", uName) Dim sr As SearchResult = schr.FindOne() Dim userEntry = sr.GetDirectoryEntry() Dim strdata As String = userEntry.Properties("department").Value Label2.Text = uName Label3.Text = strdata userEntry.Close() root.Close() 本ページを実行(http://localhost/xxx/userdep.aspxで呼び出し)すると、上記6行目(schr.FindOne()メソッド部分)で次のエラーが発生した。 =====エラー表示===== 不明なエラー (0x80005000) 説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.Runtime.InteropServices.COMException: 不明なエラー (0x80005000) =====エラー表示終わり==== 【推測】 Dim sr As SearchResult = schr.FindOne()の行にてエラーが表示されており、この部分は、ActiveDirectoryから情報を取得にいく部分かと思います。 AccessDirectoryにアクセスできていないようにも思えますが、ADへのアクセス権の問題でしょうか? AccessDirectory側でなにか設定しなければならないことがあるのでしょうか? 開発環境(クライアントPC)では、IISおよびASP.NETにてWindows認証を設定し、ASP.NET偽装を設定していますので、認証されたユーザがActiveDirectoryのアクセストークンになると思っております。 なお、クライアントPCにてドメイン認証をうけたユーザIDは、普通のドメインユーザIDです。 考え違い等ありましたら、ご指摘よろしくお願いいたします。

  • ActiveDirectoryのユーザー取得

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

  • WSHにて戻りオブジェクトのプロパティ全取得方法

    http://gallery.technet.microsoft.com/scriptcenter/07a8a60d-fef5-4729-87fe-3c7cee10267e を参考に、ローカルのユーザー情報を抜こうと思っております。 <内容> strComputer = "atl-fs-01" Set colAccounts = GetObject("WinNT://" & strComputer & "") colAccounts.Filter = Array("user") For Each objUser In colAccounts Wscript.Echo objUser.Name Wscript.Echo objUser.FullName Wscript.Echo Description Wscript 実行すると正しく動きました。 1. GetObjectで対象のコンピューターからのオブジェクトを生成 2.フィルターにより、ユーザー情報のみ抽出? 3. objUser.Name、 objUser.FullName objUser.Description を表示という内容までは理解できるのですが、 このobjUserに「FullName」と「Description」以外のプロパティを知りたいのです。 どうにかして、「objUser」が所持する「FullName」と「Description」以外のプロパティ一覧を全表示させることは出来ないでしょうか? ご教授お願いします。

  • SQLServer 列の「説明」の取得について

    SQLDMOオブジェクトを用いて、テーブルの列挙、列の列挙までは行なえるようですが、列の「説明」の項目の取得は行なえないのでしょうか? SQLDMOでなくても、何か取得出来る方法があればご教授お願いします。 --サンプル Public Function Main() Dim objServer As SQLDMO.SQLServer Dim objDatabase As SQLDMO.Database Dim objTables As SQLDMO.Tables Dim curTable As SQLDMO.Table Dim curCOl As SQLDMO.Column Const DB_NAME As String = "local" Const DB_USER As String = "sa" Const DB_PASSWD As String = "password" Const DB_USE As String = "hoge" ' オブジェクト作成 Set objServer = CreateObject("SQLDMO.SQLServer") ' 接続 Call objServer.Connect(DB_NAME, DB_USER, DB_PASSWD) 'DB選択 Set objDatabase = objServer.Databases(DB_USE) 'テーブル一覧 Set objTables = objDatabase.Tables ' テーブルの列挙 For Each curTable In objTables If curTable.SystemObject Then Debug.Print curTable.Name & " [system]" Else Debug.Print curTable.Name '列名の列挙 For Each curCOl In curTable.Columns Debug.Print curCOl.Name '*!ここで列の説明は取得出来ないのでしょうか??? Next End If Next ' 切断 Call objServer.Disconnect End Function

  • directshow を使用して、mpegファイルを再生するには

    お世話になっております。 directshowを使用して、mpegファイルを再生させようとおもったのです、以下のエラーが発生して、コンパイル出来ません。 c:\Documents and Settings\User\My Documents\Visual Studio Projects\test1\test1Class.cpp(33): fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 何が原因かさっぱり分かりません。 何方かご教授お願い致します。 開発環境は、visualstudio2003(言語C++.net) です。 ソースも載せておきます。よろしくお願い致します。 #include <dshow.h> void main(void) { IGraphBuilder *pGraph; IMediaControl *pMediaControl; IMediaEvent *pEvent; CoInitialize(NULL); // フィルタグラフマネージャを作成し、インターフェイスをクエリする。 CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); // グラフを作成。重要: 使用システムのファイル文字列に変更すること。 pGraph->RenderFile(L"C:\\Hello_World.avi", NULL); // グラフの実行。 pMediaControl->Run(); // 終了を待つ。 long evCode; pEvent->WaitForCompletion(INFINITE, &evCode); // クリーン アップ。 pMediaControl->Release(); pEvent->Release(); pGraph->Release(); CoUninitialize(); }

  • 起動済のIEから.NET FrameworkのHtmlDocumentを取得できますか?

    【環境・言語】Windows XP + IE6 + Visual Basic 2008 既に起動しているInternet ExplorerのオブジェクトをShellWindowsから探して、SHDocVw.InternetExplorer型の変数(objIE)に代入してあります。   Dim objIE As SHDocVw.InternetExplorer   'ShellWindowsから目的のIEオブジェクトを探してobjIEに代入 ここから、mshtml.HTMLDocumentを取得するところまでは分かります。   Dim objDoc As mshtml.HTMLDocument = CType(objIE.Document, mshtml.HTMLDocument) これではなくて、.NET FrameworkのHtmlDocumentクラス(System.Windows.Forms名前空間)のオブジェクトを取得することはできるでしょうか? ↓のように無理やりやってみたら、   Dim objDoc2 As System.Windows.Forms.HtmlDocument = CType(objIE.Document, System.Windows.Forms.HtmlDocument) ↓のようなエラーが出ました。   System.InvalidCastException はハンドルされませんでした。   Message="型 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス型 'System.Windows.Forms.HtmlDocument' にキャストできません。COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。ただし、基になる COM コンポーネントがインターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、インターフェイスにキャストすることができます。" mshtml.HTMLDocumentを使ってHTMLを解析していくと、COMオブジェクトの解放が大変そうなので、できれば.NET Frameworkの中で操作したいと思っています。逆(.NET Framework→COM)はHtmlDocument.DomDocumentで簡単に出来るようですが、COMから.NET Frameworkへの変換は出来ないんでしょうか?

  • ActiveDirectory ユーザ一覧取得方法

    ActiveDirectoryで管理しているユーザの一覧を CSV形式等で一覧として出力することはできるのでしょうか? 何かコマンドを使わないとダメでしょうか?

  • ショートカットからフルパスを取得する方法について

    こちら【http://www.kab-studio.biz/Programing/Codian/ShellExtension/09.html】のサイトを参考にしてショートカットからアプリ実行ファイルのフルパスを取得しようとしています。開発環境はMicrosoft Visual Studio 2010です。 以下のソースで特にエラーなく実行はできるのですが、アプリによっては取得できないものがあります。 デスクトップにあるショートカットアイコンですべて動作テストを行っています。 Janetter.lnk、Microsoft Visual Studio 2010.lnk、MetasequoiaLER3.0.lnk、Microsoft Office Word 2007.lnk の四つを試しました。 JanetterとVisualStudioはフルパスが問題なく取得でき、アドレスをたどってアイコンをダブルクリックしてみるとアプリが起動できます。 Metasequoiaは全く取得できず、wordはC:\windows\Installer\{90120000-0011-0000-0000000FF1CE}}\wordicon.exeを取得しました。 アドレスをたどり、wordicon.exeをダブルクリックして起動しようとしてもwordを起動することはできませんでした。 アプリによって取得できるものとできないものの差は何なのでしょうか? どうすればすべての実行ファイルのフルパスを取得できるでしょうか、アドバイスを頂けると助かります。 #include <windows.h> #include <shlobj.h> #include <iostream> #include <string> IShellLink *pShellLink; //IShellLinkへのポインタ IPersistFile *pPersistFile; //IPersistFileへのポインタ bool getLnk(){ HRESULT hRes;//結果 //メンバの初期化 pShellLink = NULL; pPersistFile = NULL; //OLE【 Object Linking and Embedding 】アプリケーションソフト間でデータを転送・共有するための仕組み //OLEを使うために初期化 hRes = ::CoInitialize(NULL); //エラー対処 if(hRes == E_OUTOFMEMORY) return false; if(hRes == E_INVALIDARG) return false; if(hRes == E_UNEXPECTED) return false; // 空のインターフェイスを用意 // ファイル情報の格納場所の確保 hRes = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink,(LPVOID *)&pShellLink); //エラー対処 if(hRes == CLASS_E_NOAGGREGATION) return false; if(hRes == REGDB_E_CLASSNOTREG) return false; //IPersistFileへのポインタを取得 IShellLinkの操作に必要 hRes = pShellLink->QueryInterface(IID_IPersistFile,(LPVOID*)&pPersistFile); //エラー対処 if(hRes != S_OK) return false; return true; } bool UngetLnk(){ //IPersistFileへのポインタの破棄 if(pPersistFile != NULL) pPersistFile->Release(); //IShellLinkへのポインタの破棄 if(pShellLink != NULL) pShellLink->Release(); ::CoUninitialize(); return true; } bool LinkLoad(LPCTSTR lnkpass){ HRESULT hRes; // 結果 OLECHAR ochLinkFile[MAX_PATH]; //ユニコードに変換 ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,lnkpass,-1,ochLinkFile,MAX_PATH); //ショートカットファイルの読み込み hRes = pPersistFile->Load(ochLinkFile,STGM_READ); if(hRes != S_OK) return false; //リンクの決定 ショートカットの読み込み hRes = pShellLink->Resolve(NULL,SLR_UPDATE); if(hRes != NOERROR) return false; return true; } int main(){ LPCTSTR lnkpath="C:\\Users\\Momo\\Desktop\\Microsoft Office Word 2007.lnk"; LPSTR fullpath; char x[100]; fullpath = x; if(getLnk()){ LinkLoad(lnkpath); pShellLink->GetPath(fullpath, _MAX_PATH, NULL, 0); UngetLnk(); std::cout << fullpath << std::endl; }else std::cout << "false" << std::endl; return 0; }

  • directshowでAVIファイルが再生が出来ません…

    Directshowを用いて動画を再生しようと試みています。 Direct sdkとplarformの両方を入れて、インクルードパスとライブラリパスを通しました。 ビルドしてもエラーは無いので某所のシンプルなソースでデバッグ無しで開始をクリック。 すると、再生が終わらないようにメッセージBlock Executionが表示されるものの肝心の動画が映りません。 プログラムはしっかりと動いているはずですが、、 動画aviはMSMPEG4V2です。Directshowのコーデックで動くとのことです。何がおかしいのか、さっぱりです。 環境はwindowsXP visual studio2005 DirectxSDK2008 microsoft platform(しっかりDirectshowフォルダは存在します) ここまで来たなら設定ミスは無いとは思いますが、(設定ミスがあれば、開けない等エラーが出ると思いますので) どうかお願い致します。 サンプルソース ↓ #include <stdio.h> #include <dshow.h> #define FILENAME L"C:\\Documents and Settings\\057104\\My Documents\\homerun2.avi" int main() { IGraphBuilder *pGraphBuilder; IMediaControl *pMediaControl; // COMを初期化 CoInitialize(NULL); // FilterGraphを生成 CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (LPVOID *)&pGraphBuilder); // MediaControlインターフェース取得 pGraphBuilder->QueryInterface(IID_IMediaControl, (LPVOID *)&pMediaControl); // Graphを生成 pMediaControl->RenderFile(FILENAME); // 再生開始 pMediaControl->Run(); // 再生中にプログラムが終わってしまわないように MessageBox(NULL, "Block Execution", "Block", MB_OK); // 資源を解放 pMediaControl->Release(); pGraphBuilder->Release(); // COM終了 CoUninitialize(); return 0; }