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
- Notepad`i acin.
- OUac.vbs isimli bir dosya olusturun.
- 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.