잊지 않겠습니다.

AD Update source

.NET Framework 2009. 11. 16. 09:44
AD와 같은 분산 시스템에서의 업데이트는 개발자뿐 아니라 시스템 관리자들에게 매우 중요한 일이 된다.
특히 Exchange나 Domain에서의 권한문제 등을 다룰때, AD의 값을 어떻게 변경하느냐에 따라서 각 시스템의 운영자체가 달라지기 때문에 특히 주의를 해야지 된다. 그리고, 시스템측에서는 이러한 AD의 일괄 업데이트를 Powershell이 나오기 전에는 할 방법이 마땅치 않아서 곤란해지는 경우가 많다. PowerShell의 경우에는 매우 쉽게 이런 일을 할 수 있다.

먼저, AD는 모두 DirectoryEntry로 접근을 한다. 각 DirectoryEntry를 통해서 AD Query를 이용한 결과값을 차례대로 업데이트를 하는 것이 가장 유용한 방법이다. 

string ldap = String.Format("LDAP://{0}", LdapPath);  //AD Path 설정

using(DirectoryEntry entry = new DirectoryEntry(ldap, UserName, Password, AuthenticationTypes.Sealing))
{
    //AD Search query
    using(DirectorySearcher searcher = new DirectorySearcher(entry, filter, null, SearchScope.Subtree))
    {
        //Update 할 item의 limit 갯수 설정, 너무나 많은 값들을 업데이트 하는 경우에, 실수라도 하게 되면 큰일도 날수도 있고.;
        searcher.SizeLimit = Buffer;
        SearchResultCollection results = searcher.FindAll();

        foreach(SearchResult result in results)
        {
            try
            {
                //각 Entry의 Directory 값들을 모두 가지고 온다. AD에서의 하나의 Item은 여러개의 Property로 구성이 되기 때문에, 각 Property의 값들의 변경을 행할때 유용하다.
                DirectoryEntry objectEntry = result.GetDirectoryEntry();
                //integer값으로 변경시켜주는 상태이다. 각 값의 type에 따라서 변경하게 해주는 것은 좀더 연구가 필요하다.
                int changeValue = int.Parse(value);
                objectEntry.Properties[propertyName].Value = changeValue;
                objectEntry.CommitChanges();
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}
Posted by Y2K
,