2011-02-03 34 views

Odpowiedz

3

Jeśli korzystasz z .NET 3.5, użyłbym nowej przestrzeni nazw System.DirectoryServices.AccountManagement.

Dowiedz się więcej o tym tutaj:

Managing Directory Security Principals in the .NET Framework 3.5

W zasadzie, można by założyć pojemnik (a PrincipalContext), a następnie wyliczyć użytkowników, którzy mają do czynienia. Przeprowadź pętlę nad tymi danymi i wyodrębnij potrzebne informacje, a następnie wprowadź je do programu SQL Server.

5

Sposób, w jaki to zrobić na LARGE środowiska AD:

  1. Nightly procesie wsadowym, który biegnie AdFind (Freeware narzędzie), aby wykonać kwerendy LDAP i zrzucić ją do plików CSV
  2. BCP (wbudowane narzędzie wiersza poleceń SQL) do zbiorczego importowania plików CSV do tabel importu w bazie SQL
  3. Procedura przechowywana (wykonywana z osql) w celu pobrania danych z tabeli importu i dodania/aktualizacji rekordów w tabelach głównych

Możemy pobrać 145k użytkowników, 80k grup, 130k komputerów z 10 domen w około 2 godziny od początku do końca. Obejmuje to pobieranie dokładnych informacji LastLogon dla użytkowników i komputerów, co wymaga uderzenia każdego kontrolera domeny. Bez tego proces trwa około 30 minut.

4

Jeśli wystarczy go w SQL, używam poniższy kod

INSERT... 
SELECT A.SAMAccountName, A.Mail, A.displayName FROM 
    (SELECT * FROM OpenQuery(ADSI, 'SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn, userAccountControl,mail 
    FROM ''LDAP://domain.ro/DC=domain,DC=ro'' where objectClass = ''User''') 
    WHERE (sn is not null) and (givenName is not null) and (mail is not null))A 

gdzie ADSI jest połączony serwer stworzony na podstawie tego: http://msdn2.microsoft.com/en-us/library/aa772380(VS.85).aspx

+4

ADSI zwraca nie więcej niż 1000 rekordów w pojedynczym zapytaniu, po czym zgłosi błąd – binball

+0

, a ADSI nie będzie w stanie obsłużyć atrybutów wielowartościowych, a także zapytanie o pole wielowartościowe. – 1010

Powiązane problemy