7

こんにちは私は、ユーザーがActiveDirectoryで検索する1つまたは複数のコンピューターをテキストボックスに入力できるようにする関数をWindowsフォームプログラムに追加しようとして立ち往生しています。ユーザーはテキストボックスに検索文字列を入力してからボタンを押すと、その検索結果に一致するコンピューターが別の検索ボックスに表示されます。これが私のこれまでのコードです。

また、各コンピューター名を次のように別々の行に配置したいと思います。

computername1            
computername2        
computername3

ありがとう!

ボタンの内側は次のようになります。

List<string> hosts = new List<string>();
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://servername";

try
{
    string adser = txtAd.Text; //textbox user inputs computer to search for

    DirectorySearcher ser = new DirectorySearcher(de);
    ser.Filter = "(&(ObjectCategory=computer)(cn=" + adser + "))"; 
    ser.PropertiesToLoad.Add("name");

    SearchResultCollection results = ser.FindAll();

    foreach (SearchResult res in results) 
    //"CN=SGSVG007DC" 
    {
       string computername = res.GetDirectoryEntry().Properties["Name"].Value.ToString();
       hosts.Add(computername);
       //string[] temp = res.Path.Split(','); //temp[0] would contain the computer name ex: cn=computerName,..
       //string adcomp = (temp[0].Substring(10));
       //txtcomputers.Text = adcomp.ToString();
    }

    txtcomputers.Text = hosts.ToString();
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    de.Dispose();//Clean up resources
}
4

1 に答える 1

9

.NET 3.5 以降を使用している場合は、System.DirectoryServices.AccountManagement(S.DS.AM) 名前空間を確認してください。ここでそれについてすべて読んでください:

基本的に、ドメイン コンテキストを定義し、AD でユーザーやグループを簡単に見つけることができます。

// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
   // find a computer
   ComputerPrincipal computer = ComputerPrincipal.FindByIdentity(ctx, "SomeComputerName");

   if (computer != null)
   {
       // do something here....     
   }
}    

単一のコンピューターを検索する必要はないが、コンピューターのリスト全体を検索する必要がある場合は、PrincipalSearcher基本的に「QBE」(例によるクエリ) オブジェクトを設定できる新しいインターフェイスを使用できます。検索条件を定義し、それらの条件に一致するものを検索します。

新しい S.DS.AM 名前空間を使用すると、AD でユーザーやグループを簡単に操作できます。

于 2012-08-28T05:18:41.353 に答える