Pogosto mora sistemski administrator Windows narediti različne prenose na podlagi informacij o uporabnikih v domeni Active Directory. Predstavljajte si, da imamo seznam računov (uporabniška imena v obliki samAccountName), na primer, moramo dobiti informacije o organizaciji, v kateri ti uporabniki delajo, in o njihovem kanonskem imenu (CN). Prej sem moral, da sem dobil te podatke, napisal majhen skript v vbs, ki zaporedoma ponavlja vse zapise v Excelu in vrne potrebne podatke iz Active Directory. Tak mehanizem je popolnoma funkcionalen, vendar ne zelo priročen, zato sem se odločil, da bom uporabil moč Visual Basic iz aplikacijskega jezika in izvedel Active Directory poizveduje neposredno iz Excela (iz makra), ker takšna tehnika bi bila povsem univerzalna in načeloma bi bilo mogoče vse te skripte s čisto vestjo prenesti na manj pametne računovodje in ekonomiste!
V Excelovem delovnem zvezku sem ustvaril nov makro in ustvaril funkcijo, imenovano GetADInfo, ki ob vhodu dobi ime iskanega polja (v mojem primeru je to uporabniško ime, shranjeno v atributu Active Directory - samAccountName), vrednost tega polja (vrednost celice z uporabniškim imenom) in imenom arbootta AD, katerega vrednost naj funkcija vrne.
Kako vse to deluje? V mojem primeru celica A2 vsebuje ime uporabnika domene in želim, da ta uporabnik ugotovi podjetje, v katerem je naveden (polje AD "Podjetje") in njegovo kanonično ime (polje AD "unknownName"), v tem primeru formule za celice oz. bo videti tako:
Celica B2 (ime organizacije):
= GetADInfo ("samAccountName"; A2; "Podjetje")
Celica C2 (CN):
= GetADInfo ("samAccountName"; A2; "unknownName")
Makro koda VBA za pridobivanje podatkov iz AD je naslednja:
Funkcija GetADInfo (ByVal SearchField, ByVal SearchString, ByVal ReturnField) 'Določite ime domene ("dc = domena, dc = local") Dim adoCommand, strDomain, objConnection strDomain = "dc = winitpro, dc = ru" Nastavi objConnection = CreateObject ( ADODB.Connection ") objConnection.Odprite" Ponudnik = ADsDSOObject; " 'Povezovanje Set adoCommand = CreateObject ("ADODB.Command") adoCommand.ActiveConnection = objConnection' rekurzivno iskanje v AD, ki se začne s korenskim domenom adoCommand.CommandText = _ "; (& (objectCategory =" & "Uporabnik" & ")" & _ "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & "; subtree" "ustvarite niz zapisov RecordSet Dim objRecordSet Set objRecordSet = adoCommand.Execute Če objRecordSet.RecordCount = 0 Potem GetADInfo =" ni najdeno "'ničesar najdeno Else GetADInfo = objRecordS ReturnField) 'povratna vrednost End If' Prekini povezavo objConnection.Close 'Počisti spremenljivke Set objRecordSet = Nič nastavljeno objCommand = Nič nastavljeno objConnection = Nič Končna funkcija
Da ta funkcija deluje, morate povezati več knjižnic v VBA. V urejevalniku VBA izberite meni Orodja-> Reference in v oknu, ki se prikaže, označite naslednje knjižnice:
- Visual basic za uporabo
- Knjižnica predmetov Microsoft Excel 14.0
- OLE Avtomatizacija
- Knjižnica predmetov Microsoft Office 14.0
- Knjižnica podatkov Microsoft ActiveX Data Objects 2.8 (ali tako naprej)
- Microsoft Runtime skripta
- Microsoft VBScript regularni izrazi 5.5
Ko aktivirate naslednje komponente, shranite makro VBA in delovni zvezek Excel, zato se v ustreznih poljih Excela prikažejo informacije iz aktivnega imenika. Lepota tega skripta je, da je precej vsestranski in z manjšimi spremembami bo pomagal pri dinamičnem pridobivanju skoraj vseh informacij iz Active Directory prav v delovnem zvezku prav v Excelovem delovnem zvezku!