Vrlo često administrator sustava Windows mora obavljati različite prijenose na temelju podataka o korisnicima u domeni Active Directory. Zamislite da imamo popis računa (korisnička imena u formatu samAccountName), pa bismo, primjerice, trebali dobiti informacije o tome u kojoj organizaciji ti korisnici rade i njihovo kanonsko ime (CN). Prije, da bih dobio ove informacije, morao sam napisati malu skriptu u vbs-u, koja sekvencijalno ponavlja sve zapise u Excelu i vraća potrebne podatke iz Active Directory-a. Takav je mehanizam u potpunosti funkcionalan, ali nije baš povoljan, pa sam odlučio iskoristiti snagu Visual Basic-a iz aplikacijskog jezika i izvršiti Active Directory upituje izravno iz Excela (iz makronaredbe), jer takva bi tehnika bila posve univerzalna i u načelu se sve te skripte mogu s čistom savješću prenijeti na manje pametne računovođe i ekonomiste!
Napisao sam novi makronaredbu u radnoj knjizi programa Excel i stvorio funkciju pod nazivom GetADInfo koja na ulazu dobiva ime polja koje se pretražuje (u mom slučaju to je korisničko ime pohranjeno u atributu Active Directory - samAccountName), vrijednost ovog polja (vrijednost ćelije s korisničkim imenom) i naziv AD arbootta čija vrijednost treba vratiti funkciji.
Kako sve to funkcionira? U mom primjeru, ćelija A2 sadrži ime korisnika domene i želim da ovaj korisnik otkrije tvrtku u kojoj je naveden (polje AD "Tvrtka") i njegovo kanonsko ime (polje AD "unknownName"), u ovom slučaju formule za ćelije, respektivno izgledat će ovako:
Ćelija B2 (naziv organizacije):
= GetADInfo ("samAccountName"; A2; "Tvrtka")
Stanica C2 (CN):
= GetADInfo ("samAccountName"; A2; "unknownName")
VBA makro kod za dohvaćanje podataka iz AD-a je kako slijedi:
Funkcija GetADInfo (ByVal SearchField, ByVal SearchString, ByVal ReturnField) 'Navedite naziv domene ("dc = domena, dc = local") Dim adoCommand, strDomain, objConnection strDomain = "dc = winitpro, dc = ru" Postavi objConnection = CreateObject ( ADODB.Connection ") objConnection.Otvorite" Provider = ADsDSOObject; " 'Spajanje skupa adoCommand = CreateObject ("ADODB.Command") adoCommand.ActiveConnection = objConnection' Rekurzivno pretraživanje u AD-u počevši od korijena domene adoCommand.CommandText = _ "; (& (objectCategory =" & "Korisnik" & ")" & _ "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & "; subtree" "kreiraju set zapisa RecordSet Dim objRecordSet Postavi objRecordSet = adoCommand.Execute Ako objRecordSet.RecordCount = 0 Zatim GetADInfo =" nije pronađen "'ništa nije pronađeno Ostalo GetADInfo = objRecordS ReturnField) 'povratna vrijednost Kraj Ako' zatvorite vezu objConnection.Close 'Izbriši varijable Postavi objRecordSet = Ništa nije postavljeno objCommand = Ništa nije postavljeno objConnection = Ništa Kraj funkcija
Da bi ova funkcija radila, morate povezati određeni broj knjižnica u VBA. U VBA uređivaču odaberite izbornik Alati-> Upućivanja i u prozoru koji se pojavi označite sljedeće biblioteke:
- Vizualni osnovni za primjenu
- Knjižnica objekata Microsoft Excel 14.0
- OLE Automation
- Knjižnica objekata Microsoft Office 14.0
- Microsoft ActiveX podatkovni objekti 2.8 knjižnica (ili slično)
- Microsoft Runtime skripta
- Microsoft VBScript regularni izrazi 5.5
Nakon što aktivirate sljedeće komponente, spremite VBA makro i Excel radnu knjigu, i kao rezultat toga će se informacije iz Active Directory-a pojaviti u odgovarajućim Excel poljima. Ljepota ove skripte je u tome što je prilično svestrana i uz manje izmjene pomoći će dinamičkom pronalaženju gotovo svih podataka iz Active Directory-a izravno u radnoj knjižici izravno u Excelovoj radnoj knjizi!