WSH (Windows Scripting Host) İle Active Directory’de Programlama
Active Directory, Scripting, Windows Server 62 Comments »Visual Basic Script kodlarını kullanarak Active Directory içerisinde nesne oluÅŸturma, silme, nesneler üzerinde deÄŸiÅŸiklikler yapma, nesneleri sorgulama, toplu halde nesneler açma gibi iÅŸlevleri yerine getirebilirsiniz.
RootDSE Nedir?
RootDSE’nin amacı kullanıcı nesnesini Active Directory’ye baÄŸlamak için gerekli tutamağı saÄŸlamaktır. RootDSE’nin açılımı Root
Directory Service Entry’dir. RootDSE objelerin ne yaptıklarını açıklar. Teknik olarak VBS’den daha ziyade WSH ile GetObject methodunu kullanarak Active Directory’ye baÄŸlantıyı saÄŸlar. Büyük organizasyonlarda RootDSE’yi root domain’e göre belirleyebilirsiniz. Normalde RootDSE o anda bulunulan domain’e ayarlıdır. Bütün bu söylediklerimizin özeti olarak RootDSE’nin active directory’nin ta kendisi olduÄŸunu söylememiz yanlış olmaz.
ADSI Edit - Support Tool
RootDSE’nin ne yaptığına farklı bir perspektiften bakarsak, bunu bize en iyi açıklayacak araç Windows Server 2003 CD’si içerisindeki Support dizini içerisindeki Tools dizininden Windows Server Support Tool’lar kurulduktan sonra gelen ADSIEDIT aracıdır. ADSI, Active Directory içerisindeki kullanıcı ve bilgisayar gibi objelerin özelliklerini ve niteliklerini öğrenmek için gerekli grafiksel arayüzü saÄŸlar. ADSIEDIT kullanarak Active Directory yapısındaki üç kabın içerisini görebilirsiniz.Bunlar:
- Domain
- Configuration
- Schema
Biz bu kapların her birine partition(active directory database bölümleri) adını veriyoruz.
1 - RootDSE ‘den Domain adını çekmek
‘ RootDSE nesnesinden domain adını çeken kod.
Set objRootDSE = GetObject(”LDAP://RootDSE”)
strDomain = objRootDSE.Get(”DefaultNamingContext”)
Eğer mevcut domain adını görmek isterseniz yukarıdaki kodun en alt satırına aşağıdaki satırlardan birini yazın. Böylece domain adını çekip size bir mesaj kutusunda gösterecektir.
WScript.Echo strDomain ‘ Domain adını control etmek için test amaçlı konuldu
Veya
Msgbox(strDomain) ‘ Domain adını control etmek için test amaçlı konuldu
Â
Not 1: Biz bu örnekte objRootDSE ve strDomain değişken isimlerini kullandık. Sizde kendinize uygun, kurallara uyan degisken isimlerini rahatça kullanabilirsiniz. Fakat tabii ki anlamlı değişkenler kullanmak en iyisidir.
Note 2:
DefaultNamingContext RootDSE (Active Directory) ‘nin bir özelliÄŸidir.
2 – Objelerin Oluşturulacağı Yerin(objContainer) Belirlenmesi
Set objContainer = GetObject(”LDAP://” & strOUContainer)
Not 1:
strOUContainer nesnelerin oluşturulacağı yeri gösteren son derece önemli bir değişkendir. Bu değişkenin değerini domain adınıza ve OU adına gore doğru bir biçimde ayarlamalısınız.
Not 2:
“LDAP://” nesnenin oluÅŸturulacağı hedef yerin active directory olduÄŸunu söyler.
Şimdi uygulamalarla bunları 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”, “MAYASOFT Bilgi Teknolojileri Merkezi”
oOU.SetInfo
Yukarıdaki script kodunu yazıp çalıştırdıktan sonra bulunduğunuz domain altında maya isimli bir OU açar ve Description özelliğine MAYASOFT Bilgi Teknolojileri Merkezi ifadesini atar.
Â
Uygulama 2: Kullanıcı 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 bakın!!!”
Yukarıdaki script kodunu yazıp çalıştırdıktan sonra bulunduğunuz domain altında egitmen isimli bir kullanıcı açar ve Description özelliğine Marka Olmus Uzman Egitmenler yazar. Burada SETINFO methodu onaylama amaçlı kullanılır. Setinfo satırına gelene kadar henüz obje oluşturulmaz. Setinfo satırı ile işleme onay verilir. SetPassword ile kullanıcı hesabına şifre atanır. AccountDisabled methodu ile kullanıcı hesabının enable mı yoksa disable mı olarak açılacağı belirlenir. Yapılan bu değişiklikler yine veritabanına yazılması ve güncellenmesi için setinfo methodu ile onaylanmıştır. Wscript.Echo ile işlem tamamlandıktan sonra bir mesaj görüntüleme gerçekleştirilmiş oluyor.
Â
Uygulama 3: Toplu Kullanıcı Olusturma
‘TOPLUM OU’su içerisine toplu kullanıcı ekleme
‘Mesut AladaÄŸ – Yasin Aşır tarafından yazılmış 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 AladaÄŸ – Yasin Aşır Yazdı…”
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 Kullanıcı açıldı F5 basarak güncelleyin”
Yukarıdaki kod çalıştırılınca once domain altında Toplum isimli bir OU açar. Daha sonra bu OU içerisine kullanıcı1′den kullanıcı10′a kadar 10 adet kullanıcı oluÅŸturur.
VBScript Kullanarak Satis OU’su içerisine Kullanıcı Ekleme
Bu örnekte, VBScript kullanarak Satis OU’su içerisine yeni bir kullanıcı eklemeyi öğreneceksiniz. Bu örnek ADSI ve VBScript ile active directory’de programlamanın kolaylığı ve rahatlığını göreceksiniz.Bu örnekte biz kullanıcının sadece belli özelliklerini tanımladık.Siz arzu ederseniz tüm özelliklerini tanımlayabilirsiniz.
NotePad’i açın ve aÅŸağıdaki kodu yazıp, UserAC.vbs adı ile kaydedin ve çalıştırın.
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”,”feyzok@mayasoft.com.tr”
oUser.SetInfo
Set oUser = Nothing ‘oUser deÄŸiÅŸkenini siliyor.
Set oDomain = Nothing ‘ oDomain deÄŸiÅŸkenini siliyor.
WScript.Echo “Tamamlandı”
Yukarıdaki kodu çalıştırdığınızda active directory içerisindeki satış OU’su içerisine Feyzo isimli bir kullanıcı hesabının eklendiÄŸini göreceksiniz.
VBScript Kullanarak Kullanıcı Silmek
Bu örnekte, VBScript kullanarak Satis OU’su içerisindeki feyzo isimli kullanıcı hesabını silmeyi öğreneceksiniz.
NotePad’i açın ve aÅŸağıdaki kodu yazıp, UserSIL.vbs adı ile kaydedin ve çalıştırın.
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 deÄŸiÅŸkenini siliyor.
WScript.Echo “Tamamlandı”
VBScript Kullanarak Toplu Olarak Kullanıcı Özelliklerini Değiştirme
Bu örnekte, VBScript kullanarak Satis OU’su içerisindeki bütün kullanıcı hesaplarının adres bilgilerinde güncellemeler yapacağız.
NotePad’i açın ve aÅŸağıdaki kodu yazıp, UserDegistir.vbs adı ile kaydedin ve çalıştırın.
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 deÄŸiÅŸkenini siliyor.
WScript.Echo “Tamamlandı”
Sub ModifyUsers(oObject)
Dim oUser
oObject.Filter = Array(”user”)
For Each oUser in oObject
        oUser.Put “st”,”BeÅŸiktaÅŸ”
        oUser.Put “streetAddress”,”Barbaros Blv. No:9″
        oUser.Put “postalCode”,”80690″
        oUser.Put “l”,”BeÅŸiktaÅŸ”
        oUser.SetInfo
    Next
End Sub
Â
Gidip Active Directory Users and Computers içerisinden baktığınızda aşağıdaki gibi oluştuğunu göreceksiniz.
Â
VBScript Kullanarak Objeleri Export Etmek
Bu örnekte, VBScript kullanarak Satis OU’su içerisindeki bütün kullanıcı hesapları ve bunların niteliklerini bir text dosyaya listelemeyi göreceksiniz.
NotePad’i açın ve aÅŸağıdaki kodu yazıp, RaporAl.vbs adı ile kaydedin ve çalıştırın.
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 deÄŸiÅŸkenini siliyor.
WScript.Echo “Tamamlandı”
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 Hesabı Oluşturmak
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”
Yukarıdaki script kodunu yazıp çalıştırdıktan sonra bulunduğunuz domain altında Patronlar isimli bir grup açar.
Â
Script İle Bilgi Toplama:
Kullanıcı adını , bilgisayar adını ve çalıştığınız domain adını 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 satıra geçmeyi sağlar.
Not 2: Alt çizgi (Underscore(_)) kod yarıda kalınca ikinci satırdan devam etmeyi sağlar.












Recent Comments