C# ile Active Directory kullanıcılarının birçok bilgisi güncellenebilmektedir. Bunların başında ad soyad, telefon ve e-mail bilgileri gelmektedir. Bunların haricinde adres, ünvan, ofis, konum ve benzeri diğer bilgiler de güncellenebilmektedir.
Temel bilgileri güncellemek için PrincipalContext ve UserPrincipal class’ı yeterli iken daha geniş yelpazede güncelleme yapabilmek için DirectoryEntry class’ı da projeye eklenmelidir. Bunun için “Add Reference” ile projenize System.DirectoryServices ve System.DirectoryServices.AccountManagement referanslarını ekleyiniz. Alttaki Kod bloğunda UserPrincipal ile kullanıcının bilgilerinin alınması ve güncellenmesi sağlanmaktadır. Örneğimizde temel bilgilerin yanı sıra “physicalDeliveryOfficeName” ofis / konum bilgisi de güncellenecektir. Bu ifadeye property name denilmektedir. Hangi property’lerin olduğuna arama motorunda “AD domain user object” incelenerek bakılabilir.
public string UpdateAdUser(string arananKullanici,string email,string name,string surname) { PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, "domain.local", "yetkili_user", "yetkili_user_pass"); UserPrincipal userPrincipal = null; try { userPrincipal = UserPrincipal.FindByIdentity(principalContext, IdentityType.SamAccountName, arananKullanici); } catch(Exception ex) { return "AD ile bağlantı kurulamadı."; } if (userPrincipal == null || userPrincipal.SamAccountName == "") { return "Kullanıcı Bulunamadı"; } //Temel bilgilerin guncellenmesi userPrincipal.EmailAddress = email; userPrincipal.GivenName = name; userPrincipal.Surname = surname; userPrincipal.DisplayName = name + " " + surname; userPrincipal.Save(); //Guncellenen bilgiler kaydedilir. //--- //Temel bilgiler Disindaki alanlari guncelleme baslangic SetDomainProperty(userPrincipal.GetUnderlyingObject() as DirectoryEntry, "physicalDeliveryOfficeName", "Ofis Bilgisi - Cografi Yer Olabilir"); //---- return "Kullanıcı Kayıt Başarılı."; }
Görüldüğü üzere userPrincipal objemiz ile bazı bilgileri güncelleyebildik. Ancak Burada Ofis / Konum bilgisini güncellemek isteseydik userPrincipal objemiz bu işlem için yeterli olmayacaktı. Çünki bu bilgiler (property) objenin altında bulunmamaktadır.
Bu yüzden yeni bir metod ekleyerek erişemediğimiz alanlara erişeceğiz ve bu alanları güncelleyebileceğiz. Ayrıca üstteki Kod alanımızda bu metoda yer vereceğiz.
Domain Objesi düzenleme (Domain Object Property) metodu private olarak şu şekilde olmalıdır.
private void SetDomainProperty(DirectoryEntry dirEntry, string PropName, string PropVal) { if (PropVal != string.Empty) { //Property Check Add or Update //Kontrol ederiz varsa degistiririz. Yokse Ekleriz. if (dirEntry.Properties.Contains(PropName)) { dirEntry.Properties[PropName].Value = PropVal; //Guncelleme dirEntry.CommitChanges(); //Guncellenen bilgiler kaydedilir. dirEntry.Close(); } else { dirEntry.Properties[PropName].Add(PropVal); //Ekleme dirEntry.CommitChanges(); //Guncellenen bilgiler kaydedilir. dirEntry.Close(); } } }
1 yorum
Servet yasin tarhan · 13 Ekim 2022 11:13 tarihinde
Merhabalar
Bu işlemler administror kullanıcısı hariç bir kullanıcıdan yapmak hangi yetkiye sahip olması gerekiyor.