Pomerne často musí správca systému Windows robiť rôzne nahrávania na základe informácií o používateľoch v doméne Active Directory. Predstavte si, že máme zoznam účtov (užívateľské mená vo formáte samAccountName), a napríklad musíme získať informácie o organizácii, v ktorej títo používatelia pracujú, a ich Canonical Name (CN). Skôr, aby som získal takéto informácie, som musel napísať malý skript vo vbs, ktorý postupne iteruje všetky záznamy v Exceli a vracia požadované informácie z Active Directory. Takýto mechanizmus je plne funkčný, ale nie príliš pohodlný, a tak som sa rozhodol využiť silu jazyka Visual Basic z aplikačného jazyka a spustiť Dotazy Active Directory priamo z Excelu (z makra), pretože takáto technika by bola dostatočne univerzálna a všetky tieto skripty sa v zásade dajú prenášať s čistým svedomím na menej dôvtipných účtovníkov a ekonómov.!
Vytvoril som nové makro v zošite programu Excel a vytvoril som funkciu nazvanú GetADInfo, ktorá pri vstupe získa názov vyhľadávaného poľa (v mojom prípade je to meno používateľa uložené v atribúte Active Directory - samAccountName), hodnota tohto poľa (hodnota bunky) s používateľským menom) a názov artikotu AD, ktorého hodnota by sa mala funkcia vrátiť.
Ako to všetko funguje? V mojom príklade obsahuje bunka A2 meno používateľa domény a chcem, aby tento užívateľ našiel spoločnosť, v ktorej je uvedený (pole AD „Spoločnosť“) a jeho kanonické meno (pole AD „rozlišujúci názov“), v tomto prípade vzorce pre bunky, resp. bude vyzerať takto:
Bunka B2 (názov organizácie):
= GetADInfo ("samAccountName"; A2; "Company")
Bunka C2 (CN):
= GetADInfo ("samAccountName"; A2; "rozlišovacie meno")
Kód makra VBA na získavanie údajov z AD je nasledujúci:
Funkcia GetADInfo (ByVal SearchField, ByVal SearchString, ByVal ReturnField) 'Zadajte názov domény ("dc = doména, dc = lokálna") Dim adoCommand, strDomain, objConnection strDomain = "dc = winitpro, dc = ru" Nastavte objConnection = CreateObject (" ADODB.Connection ") objConnection.Open" Provider = ADsDSOObject; " 'Connecting Set adoCommand = CreateObject ("ADODB.Command") adoCommand.ActiveConnection = objConnection' Rekurzívne vyhľadávanie v AD začínajúce koreňom domény adoCommand.CommandText = _ "; (& (objectCategory =" & "User" & ")" & _ "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & "; subtree" 'vytvorí množinu záznamov RecordSet Dim objRecordSet Set objRecordSet = adoCommand.Execute If objRecordSet.RecordCount = 0 Potom GetADInfo = "nenájdené"' nič nebolo nájdené Else GetADInfo = objRecordS ReturnField) 'return value End If' Close the connection objConnection.Close 'Vymazanie premenných Set objRecordSet = Nothing Set objCommand = Nothing Set objConnection = Nothing End Function
Aby táto funkcia fungovala, musíte pripojiť niekoľko knižníc vo VBA. V editore VBA vyberte ponuku Nástroje-> Odkazy av zobrazenom okne označte nasledujúce knižnice:
- Visual Basic for application
- Knižnica objektov programu Microsoft Excel 14.0
- Automatizácia OLE
- Knižnica objektov Microsoft Office 14.0
- Knižnica Microsoft ActiveX Data Objects 2.8 (alebo taká)
- Microsoft Scripting Runtime
- Microsoft VBScript Regulárne výrazy 5.5
Po aktivácii nasledujúcich komponentov uložte zošit makra VBA a zošit Excel, a ako výsledok sa informácie z Active Directory zobrazia v zodpovedajúcich poliach Excel. Krása tohto skriptu je, že je dosť univerzálny a s malými úpravami pomôže dynamicky načítať takmer všetky informácie zo služby Active Directory priamo v knihe priamo v zošite programu Excel.!