7

上司が現在使用している古い VBS を置き換える新しいプログラムを作成しています。

そのため、プログラムは AD に入り、すべての従業員の名前とその電子メール アドレスを収集することになっています。私の問題は、各ユーザーに約 60 個のプロパティが割り当てられていることですが、私のプログラムは 32 個のフィールドしか取り込んでおらず、そのうちの 1 つは必要な CN の半分です。もちろん、メールはインポートされるプロパティの 1 つではありません。また、デバッグ中に気付いたのは、ロングアイランドの支店から従業員を連れてくるだけで、どこからでも連れてくるのではなく、理由がわかりません。どんな助けでも大歓迎です!! =D

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
using Microsoft.Office.Interop.Excel;
using System.DirectoryServices.ActiveDirectory; 


namespace EmailListing
{
    class Program
    {
        static void Main(string[] args)
        {


            DirectoryEntry adFolderObject = new DirectoryEntry("LDAP://OU=PHF Users,DC=phf,DC=inc");


            DirectorySearcher adSearchObject = new DirectorySearcher(adFolderObject);
            adSearchObject.SearchScope = SearchScope.Subtree;



            adSearchObject.Filter = "(&(ObjectClass=user)(!description=Built-in*))";




            foreach (SearchResult adObject in adSearchObject.FindAll())
             {
                 //mail = adObject.Properties["mail"].ToString();

                Console.Write(adObject.Properties["cn"][0]); 
                Console.Write(".        ");
                //Console.WriteLine(mail);





             }

            Console.WriteLine();
            Console.ReadLine();
        }
    }
}
4

1 に答える 1

2

PrincipalSearcherおよび「例によるクエリ」プリンシパルを使用して検索を行うことができます。

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
UserPrincipal qbeUser = new UserPrincipal(ctx);

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
    UserPrincipal foundUser = found as UserPrincipal;

    if (foundUser != null && !foundUser.Description.StartsWith("Built-In"))
    {
        string firstName = foundUser.GivenName;
        string lastName = foundUser.Surname;
        string email = foundUser.EmailAddress;
    }
}

まだお読みでない場合は、.NET Framework 3.5 でのディレクトリ セキュリティ プリンシパルの管理に関するMSDN の記事を必ずお読みくださいSystem.DirectoryServices.AccountManagement。または、System.DirectoryServices.AccountManagement 名前空間に関する MSDN ドキュメントを参照してください。

もちろん、必要に応じて、作成した「例によるクエリ」ユーザー プリンシパルに他のプロパティを指定することもできます。

  • DisplayName(通常: 名 + スペース + 姓)
  • SAM Account Name- Windows/AD アカウント名
  • User Principal Name- "username@yourcompany.com" スタイル名

の任意のプロパティを指定し、UserPrincipalそれらを の「例によるクエリ」として使用できますPrincipalSearcher

于 2012-12-03T16:41:10.300 に答える