Загрузка данных из AD (MS SQL)

добавлено: 07 апр 17
понравилось:0
просмотров: 2675
комментов: 2

теги:

Автор: Критик

Отнюдь не всегда получается воспользоваться LDAP-запросом к AD для получения данных из домена, т.к. некоторые показатели AD содержат не одно, а несколько значений.
Это можно обойти, написав ScriptComponent следующим образом:

1) В SSIS-пакете объявляем 2 переменные:
domain - отображаемое имя домена, которое пойдет в таблицу
FQDN - имя домена в формате LDAP://xxxx.xxxx.xxxx
2) Создаем ForEach Loop, где в коллекции перечисляем руками сопоставление
FQDN(в Column0) - domain(в Column1)
3) В ForEach добавляем DataFlow
4) В DataFlow в качестве источника добавляем ScriptComponent, не забываем добавить объявленные выше переменный в область видимости ScriptComponent`а
5) В ScriptComponent`е объявляем нужные выходы
6) В код ScriptComponent`а в CreateNewOutputRows добавляем следующее (предполагаю, что можно написать оптимальнее и намного короче)

Пример приложен

    public override void CreateNewOutputRows()
    {
        using (DirectoryEntry conn = new DirectoryEntry(Variables.FQDN))
        {
            using (DirectorySearcher searcher = new DirectorySearcher(conn))
            {
                searcher.Filter = "(&(objectCategory=person))";
                
                //searcher.PropertyNamesOnly = true;
                //searcher.SearchScope = SearchScope.Subtree;

                var propertiesToLoad = new[] { "manager", "title", "department", "cn", "SAMAccountName", "displayName", "givenName", "sn", "mail", "userAccountControl", "employeeNumber", "description", "distinguishedName" };
                searcher.PropertiesToLoad.AddRange(propertiesToLoad);
                searcher.PageSize = 500;


                using (SearchResultCollection results = searcher.FindAll())
                {
                    foreach (SearchResult result in results)
                    {

                        // добавляем записи в поток выводы
                        Output0Buffer.AddRow();
                        Output0Buffer.DOMAIN = Variables.domain;

                        if (result.Properties["employeeNumber"] != null && result.Properties["employeeNumber"].Count > 0)
                        {
                            Output0Buffer.EMPLOYEENUMBER = result.Properties["employeeNumber"][0].ToString();
                        }


                        if (result.Properties["samaccountname"] != null && result.Properties["samaccountname"].Count > 0)
                        {
                            Output0Buffer.SAMACCOUNTNAME = result.Properties["samaccountname"][0].ToString();
                        }


                        if (result.Properties["cn"] != null && result.Properties["cn"].Count > 0)
                        {
                            Output0Buffer.CN = result.Properties["cn"][0].ToString();
                        }


                        if (result.Properties["givenName"] != null && result.Properties["givenName"].Count > 0)
                        {
                            Output0Buffer.GIVENNAME = result.Properties["givenName"][0].ToString();
                        }


                        if (result.Properties["sn"] != null && result.Properties["sn"].Count > 0)
                        {
                            Output0Buffer.SN = result.Properties["sn"][0].ToString();
                        }


                        if (result.Properties["mail"] != null && result.Properties["mail"].Count > 0)
                        {
                            Output0Buffer.MAIL = result.Properties["mail"][0].ToString();
                        }


                        if (result.Properties["department"] != null && result.Properties["department"].Count > 0)
                        {
                            Output0Buffer.DEPARTMENT = result.Properties["department"][0].ToString();
                        }



                        if (result.Properties["title"] != null && result.Properties["title"].Count > 0)
                        {
                            Output0Buffer.TITLE = result.Properties["title"][0].ToString();
                        }


                        if (result.Properties["userAccountControl"] != null && result.Properties["userAccountControl"].Count > 0)
                        {
                            Output0Buffer.USERACCOUNTCONTROL = Convert.ToInt32(result.Properties["userAccountControl"][0]);
                        }

                        
                        if (result.Properties["description"] != null && result.Properties["description"].Count > 0)
                        {
                            Output0Buffer.DESCRIPTION = result.Properties["description"][0].ToString();
                        }
                        

                        if (result.Properties["distinguishedName"] != null && result.Properties["distinguishedName"].Count > 0)
                        {
                            Output0Buffer.DISTINGUISHEDNAME = result.Properties["distinguishedName"][0].ToString();
                        }


                        if (result.Properties["manager"] != null && result.Properties["manager"].Count > 0)
                        {
                            Output0Buffer.MANAGER = result.Properties["manager"][0].ToString();
                        }

                    }
                }
            }
        }
    }

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии