Dopyt Active Directory z Excelu

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.!