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();
		}
	}
}
Kategoriler: CSharp

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.

Bir cevap yazın

Avatar placeholder

E-posta hesabınız yayımlanmayacak.

*