Windows Server

WSH (Windows Scripting Host) ile Active Directory’de Programlama

Visual Basic Script kodlarini kullanarak Active Directory içerisinde nesne olusturma, silme, nesneler üzerinde degisiklikler yapma, nesneleri sorgulama, toplu halde nesneler açma gibi islevleri yerine getirebilirsiniz. 

RootDSE Nedir?

RootDSE’nin amaci kullanici nesnesini Active Directory’ye baglamak için gerekli tutamagi saglamaktir. RootDSE’nin açilimi Root Directory Service Entry’dir. RootDSE objelerin ne yaptiklarini açiklar. Teknik olarak VBS’den daha ziyade WSH ile GetObject methodunu kullanarak Active Directory’ye baglantiyi saglar. Büyük organizasyonlarda RootDSE’yi root domain’e göre belirleyebilirsiniz. Normalde RootDSE o anda bulunulan domain’e ayarlidir. Bütün bu söylediklerimizin özeti olarak RootDSE’nin active directory’nin ta kendisi oldugunu söylememiz yanlis olmaz.

ADSI Edit – Support Tool

RootDSE’nin ne yaptigina farkli bir perspektiften bakarsak, bunu bize en iyi açiklayacak araç Windows Server 2003 CD’si içerisindeki Support dizini içerisindeki Tools dizininden Windows Server Support Tool’lar kurulduktan sonra gelen ADSIEDIT aracidir. ADSI, Active Directory içerisindeki kullanici ve bilgisayar gibi objelerin özelliklerini ve niteliklerini ögrenmek için gerekli grafiksel arayüzü saglar. ADSIEDIT kullanarak Active Directory yapisindaki üç kabin içerisini görebilirsiniz.Bunlar:

ü  Domain

ü  Configuration

ü  Schema

Biz bu kaplarin her birine partition(active directory database bölümleri) adini veriyoruz.

1 – RootDSE ‘den Domain adini çekmek

‘ RootDSE nesnesinden domain adini çeken kod.
Set objRootDSE = GetObject(“LDAP://RootDSE”)
strDomain = objRootDSE.Get(“DefaultNamingContext”)

Eger mevcut domain adini görmek isterseniz yukaridaki kodun en alt satirina asagidaki satirlardan birini yazin. Böylece domain adini çekip size bir mesaj kutusunda gösterecektir.


WScript.Echo strDomain ‘ Domain adini control etmek için test amaçli konuldu

Veya

Msgbox(strDomain)  ‘ Domain adini control etmek için test amaçli konuldu

 

Not 1: Biz bu örnekte objRootDSE ve strDomain degisken isimlerini kullandik. Sizde kendinize uygun, kurallara uyan degisken isimlerini rahatça kullanabilirsiniz. Fakat tabii ki anlamli degiskenler kullanmak en iyisidir.

Note 2: DefaultNamingContext RootDSE (Active Directory) ‘nin bir özelligidir.

2 – Objelerin Olusturulacagi Yerin(objContainer) Belirlenmesi

Set objContainer = GetObject(“LDAP://” & strOUContainer)

Not 1: strOUContainer nesnelerin olusturulacagi yeri gösteren son derece önemli bir degiskendir. Bu degiskenin degerini domain adiniza ve OU adina gore dogru bir biçimde ayarlamalisiniz.

Not 2: “LDAP://” nesnenin olusturulacagi hedef yerin active directory oldugunu söyler.

Simdi uygulamalarla bunlari görelim.

 

Uygulama 1: OU Olusturma

 

  1. Notepad`i acin.
  2. OUac.vbs isimli bir dosya olusturun.
  3. Asagidaki kodlari bu dosya icine yazin.

 

Set oRoot = GetObject(“LDAP://rootDSE”)
Set oDomain = GetObject(“LDAP://” & oRoot.Get(“defaultNamingContext”))
Set oOU=oDomain.Create(“organizationalUnit”, “ou=maya”)
oOU.Put “Description”, “ITSTACK Bilgi Teknolojileri Merkezi”
oOU.SetInfo

Yukaridaki script kodunu yazip çalistirdiktan sonra bulundugunuz domain altinda maya isimli bir OU açar ve Description özelligine ITSTACK Bilgi Teknolojileri Merkezi ifadesini atar.

 

Uygulama 2: Kullanici Olusturma

Set oRoot = GetObject(“LDAP://rootDSE”)
Set oDomain = GetObject(“LDAP://” & oRoot.Get(“defaultNamingContext”))
Set oUser = oOU.Create(“User”, “cn=egitmen”)
oUser.Put “sAMAccountName”, ” egitmen ”
oUser.Put “Description”, “Marka Olmus Uzman Egitmenler”
oUser.SetInfo
oUser.SetPassword “123+abc”
oUser.AccountDisabled = False
oUser.SetInfo
Wscript.Echo “Basariyla tamamlandi, Active Directory Users and Computers bakin!!!”

Yukaridaki script kodunu yazip çalistirdiktan sonra bulundugunuz domain altinda egitmen isimli bir kullanici açar ve Description özelligine Marka Olmus Uzman Egitmenler yazar. Burada SETINFO methodu onaylama amaçli kullanilir. Setinfo satirina gelene kadar henüz obje olusturulmaz. Setinfo satiri ile isleme onay verilir. SetPassword ile kullanici hesabina sifre atanir. AccountDisabled methodu ile kullanici hesabinin enable mi yoksa disable mi olarak açilacagi belirlenir. Yapilan bu degisiklikler yine veritabanina yazilmasi ve güncellenmesi için setinfo methodu ile onaylanmistir. Wscript.Echo ile islem tamamlandiktan sonra bir mesaj görüntüleme gerçeklestirilmis oluyor.

 

Uygulama 3: Toplu Kullanici Olusturma

‘TOPLUM OU’su içerisine toplu kullanici ekleme
‘Mesut Aladag – Yasin Asir tarafindan yazilmis script
Dim nesneOU
Set oRoot = GetObject(“LDAP://rootDSE”)
Set oDomain = GetObject(“LDAP://” & oRoot.Get(“defaultNamingContext”))
Set objRootDSE = GetObject(“LDAP://rootDSE”)
Set nesneOU=oDomain.Create(“organizationalUnit”, “ou=Toplum”)
nesneOU.Put “Description”, “Mesut Aladag – Yasin Asir Yazdi…”
nesneOU.SetInfo
Set nesnekap= GetObject(“LDAP://OU=Toplum,” & _
objRootDSE.Get(“defaultNamingContext”))
For i = 1 To 10
Set nesnetip=nesnekap.Create(“User”, “cn=Kullanici” & i)
nesnetip.Put “sAMAccountName”, “Kullanici” & i
nesnetip.SetInfo
Next
WScript.Echo “Tebrikler, 10 Kullanici açildi F5 basarak güncelleyin”

Yukaridaki kod çalistirilinca once domain altinda Toplum isimli bir OU açar. Daha sonra bu OU içerisine kullanici1’den kullanici10’a kadar 10 adet kullanici olusturur.

VBScript Kullanarak Satis OU’su içerisine Kullanici Ekleme

Bu örnekte, VBScript kullanarak Satis OU’su içerisine yeni bir kullanici eklemeyi ögreneceksiniz. Bu örnek ADSI  ve VBScript ile active directory’de programlamanin kolayligi ve rahatligini göreceksiniz.Bu örnekte biz kullanicinin sadece belli özelliklerini tanimladik.Siz arzu ederseniz tüm özelliklerini tanimlayabilirsiniz.

NotePad’i açin ve asagidaki kodu yazip, UserAC.vbs adi ile kaydedin ve çalistirin.

Set oRoot = GetObject("LDAP://rootDSE")

Set oDomain = GetObject("LDAP://ou=satis," & oRoot.Get("defaultNamingContext"))

Set objRootDSE = GetObject("LDAP://rootDSE")

Set oUser=oDomain.Create("User", "CN=Feyzo")

oUser.Put "samAccountName","Feyzo"
oUser.Put "givenName","Feyzo"
oUser.Put "sn","Kibar"
oUser.Put "userPrincipalName","[email protected]"
oUser.SetInfo
Set oUser = Nothing 'oUser degiskenini siliyor.
Set oDomain = Nothing ' oDomain degiskenini siliyor.
WScript.Echo "Tamamlandi"

Yukaridaki kodu çalistirdiginizda active directory içerisindeki satis OU’su içerisine Feyzo isimli bir kullanici hesabinin eklendigini göreceksiniz.

VBScript Kullanarak Kullanici Silmek

Bu örnekte, VBScript kullanarak Satis OU’su içerisindeki feyzo isimli kullanici hesabini silmeyi ögreneceksiniz.

NotePad’i açin ve asagidaki kodu yazip, UserSIL.vbs adi ile kaydedin ve çalistirin.

Set oRoot = GetObject("LDAP://rootDSE")

Set oDomain = GetObject("LDAP://ou=satis," & oRoot.Get("defaultNamingContext"))

Set objRootDSE = GetObject("LDAP://rootDSE")

oDomain.Delete "User", "CN=Feyzo"
Set oDomain = Nothing 'oContainer degiskenini siliyor.
WScript.Echo "Tamamlandi"

VBScript Kullanarak Toplu Olarak Kullanici Özelliklerini Degistirme

Bu örnekte, VBScript kullanarak Satis OU’su içerisindeki bütün kullanici hesaplarinin adres bilgilerinde güncellemeler yapacagiz.

NotePad’i açin ve asagidaki kodu yazip, UserDegistir.vbs adi ile kaydedin ve çalistirin.

Set oRoot = GetObject("LDAP://rootDSE")

Set oDomain = GetObject("LDAP://ou=satis," & oRoot.Get("defaultNamingContext"))

Set objRootDSE = GetObject("LDAP://rootDSE")

ModifyUsers oDomain
Set oDomain = Nothing 'oContainer degiskenini siliyor.
WScript.Echo "Tamamlandi"
Sub ModifyUsers(oObject)
Dim oUser
oObject.Filter = Array("user")
For Each oUser in oObject
                                     oUser.Put "st","Besiktas"
                                     oUser.Put "streetAddress","Barbaros Blv. No:9"
                                     oUser.Put "postalCode","80690"
                                     oUser.Put "l","Besiktas"
                                     oUser.SetInfo
                 Next
End Sub
 
Gidip Active Directory Users and Computers içerisinden baktiginizda asagidaki gibi olustugunu göreceksiniz.

 

VBScript Kullanarak Objeleri Export Etmek

Bu örnekte, VBScript kullanarak Satis OU’su içerisindeki bütün kullanici hesaplari ve bunlarin niteliklerini bir text dosyaya listelemeyi göreceksiniz.

NotePad’i açin ve asagidaki kodu yazip, RaporAl.vbs adi ile kaydedin ve çalistirin.

Dim OutPutFile

Dim FileSystem
Set oRoot = GetObject("LDAP://rootDSE")

Set oDomain = GetObject("LDAP://ou=satis," & oRoot.Get("defaultNamingContext"))

Set objRootDSE = GetObject("LDAP://rootDSE")

Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")

Set OutPutFile = FileSystem.CreateTextFile("c:\rapor.txt", True)
EnumerateUsers oDomain
OutPutFile.Close

Set FileSystem = Nothing
Set oDomain = Nothing 'oDomain degiskenini siliyor.

WScript.Echo "Tamamlandi"

WScript.Quit(0)

Sub EnumerateUsers(oCont)

Dim oUser

For Each oUser In oCont

Select Case LCase(oUser.Class)

Case "user"

If Not IsEmpty(oUser.distinguishedName) Then

OutPutFile.WriteLine "dn: " & oUser.distinguishedName

End If

If Not IsEmpty(oUser.name) Then

OutPutFile.WriteLine "name: " & oUser.Get ("name")

End If

If Not IsEmpty(oUser.st) Then

OutPutFile.WriteLine "st: " & oUser.st

End If

If Not IsEmpty(oUser.streetAddress) Then

OutPutFile.WriteLine "streetAddress: " & oUser.streetAddress

End If

Case "organizationalunit" , "container"

EnumerateUsers oUser

End Select

OutPutFile.WriteLine

Next

End Sub
 

WSH Kullanarak Grup Hesabi Olusturmak

Set oRoot = GetObject(“LDAP://rootDSE”)

Set oDomain = GetObject(“LDAP://” & oRoot.Get(“defaultNamingContext”))

Set oGroup = oDomain.Create(“Group”, “cn=Patronlar”)

oGroup.Put “sAMAccountName”, ” Patronlar ”

oGroup.SetInfo

Wscript.Echo ” Tebrikler Basariyla tamamlandi”

Yukaridaki script kodunu yazip çalistirdiktan sonra bulundugunuz domain altinda Patronlar isimli bir grup açar.

 

Script Ile Bilgi Toplama:

Kullanici adini , bilgisayar adini ve çalistiginiz domain adini veren script:

Set ad = WScript.CreateObject(“WScript.Network”)

WScript.Echo “Computer Name = ” & ad.ComputerName & VBCrLf _


& “User Name = ” & ad.UserName & VBCrLf  & “Domain = ” & ad.UserDomain

Not 1: VBCrLf alt satira geçmeyi saglar.

Not 2: Alt çizgi (Underscore(_)) kod yarida kalinca ikinci satirdan devam etmeyi saglar.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu