C# ile Active Directory Bilgisayarları Üzerinde İşlemler

Active Directorydeki bilgisayarların listesini alarak, bazı bilgisayarlar üzerinde toplu işlem yapmak istiyorsak PrincipalSearcher class’ı ile FindAll metodunu kullanmamız gereklidir.

Tek bir bilgisayarı arıyorsak FindOne metodu daha kullanışlıdır. Aşağıda toplu ve tek olarak arama, listeleme ve bilgisayarı enable/disable etme örnekleri gösterilmiştir.

Enable disable örnekleri dışında bilgisayara ait başkaca bilgileri görme veya değiştirme şansınız vardır. Bunları Msdn makalelerinde bulabilirsiniz.

Bu Classları barındıran namespace’ler:

using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;

Çoklu bilgisayar arama, listeleme ve işlem örneği:

PrincipalContext baglanti = new PrincipalContext(ContextType.Domain, "domain.com.tr", "USER", "PASS");
Principal filter= new ComputerPrincipal(baglanti);
PrincipalSearcher searcher = new PrincipalSearcher(filter);

foreach (Principal bilgisayar in searcher.FindAll())
{
ComputerPrincipal _bilgisayar = (ComputerPrincipal)bilgisayar;
if (_bilgisayar != null)
{
	//Bilgisayari Disable Etme
	if (_bilgisayar.SamAccountName == "XYZ")
	{
	_bilgisayar.Enabled = false;
	_bilgisayar.Save();
	Console.WriteLine(_bilgisayar.SamAccountName + " Disable Edildi.");
	}

	//Bilgisayari Enable Etme
	if (_bilgisayar.SamAccountName == "ABC")
	{
	_bilgisayar.Enabled = true;
	_bilgisayar.Save();
	Console.WriteLine(_bilgisayar.SamAccountName + " Enable Edildi.");
	}

	//Normal Listeleme
	Console.WriteLine(_bilgisayar.SamAccountName);
 }
}

Bir bilgisayar arama ve işlem örneği:

string PcName="XYZ";
PrincipalContext baglanti = new PrincipalContext(ContextType.Domain, "domain.com.tr", "USER", "PASS");
Principal filter = new ComputerPrincipal(baglanti);
filter.Name = String.Format("*{0}*", PcName);
PrincipalSearcher searcher = new PrincipalSearcher(filter);
Principal bilgisayar = searcher.FindOne();

if (bilgisayar != null)
{
	ComputerPrincipal _bilgisayar= (ComputerPrincipal)bilgisayar;
	if (_bilgisayar!= null)
	{
        //enable etmek için
	_bilgisayar.Enabled =true;
        //disable etmek için
	_bilgisayar.Enabled =false;
	_bilgisayar.Save();
	}
}

Not: Bu kodlar yazarın çalışması olup, kullanmanız durumunda sisteminizde oluşabilecek zararlardan kullanan kişi sorumludur. Bu program kodlarını örnek alma amaçlı kullanmanızı tavsiye ederiz.

C# ile Active Directory Kullanarak Login İşlemi

C# framework Active Directory bazlı otantikasyon (login) konusunda bize iki yol sunmaktadır. Birincisi PrincipalContext diğeri ise DirectoryEntry Classlarıdır.

Bu Classlar System.DirectoryServices ve System.DirectoryServices.AccountManagement namespace’i altındadır. DirectoryEntry class’ı oldukca eskidir. Yaygın olarak kullanılmaktadır ve birçok eski framework versiyonun tarafından desteklenmektedir.

PrincipalContext class’ı Framework 4 versiyonunuyla kullanılmaya başlanmıştır ve login işlemini kolaylıkla yapabileceğimiz bir method sunmaktadır.

Bu iki class’ı da ayrı ayrı örneklendireceğim. Login sonrası otorizasyonu konusu programcıya bırakıyorum.

DirectoryEntry Örneği:

//Username: textBox1.Text
//Password: textBox2.Text

DirectoryEntry myDomain = new DirectoryEntry("LDAP://domain.com.tr", textBox1.Text, textBox2.Text);
bool loginBasarili=false;
//Eğer dönen property var ise login olunmuştur.
if(myDomain.Properties.Count>0)
loginBasarili=true;

PrincipalContext Örneği:

//Username: textBox1.Text
//Password: textBox2.Text
bool loginBasarili=false;
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "domain.com.tr"))
{
//Kullanıcı ve Şifre bilgilerini doğrulamasını yapar. Doğruysa login olunmuştur.

loginBasarili= pc.ValidateCredentials(textBox1.Text, textBox2.Text);
}