Poměrně často musí správce systému Windows provádět různá nahrávání na základě informací o uživatelích v doméně služby Active Directory. Představte si, že máme seznam účtů (uživatelská jména ve formátu samAccountName) a například potřebujeme získat informace o tom, ve které organizaci tito uživatelé pracují, a jejich Canonical Name (CN). Dříve, abych získal tuto informaci, musel jsem napsat malý skript ve vbs, který postupně iteruje všechny záznamy v Excelu a vrací zpět požadované informace ze služby Active Directory. Takový mechanismus je plně funkční, ale ne příliš pohodlný, tak jsem se rozhodl využít sílu jazyka Visual Basic z aplikačního jazyka a provést Dotazy služby Active Directory přímo z aplikace Excel (z makra), protože taková technika by byla docela univerzální a v zásadě lze všechny tyto skripty přenášet s čistým svědomím na méně důvtipné účetní a ekonomy!
Vytvořil jsem nové makro v sešitu aplikace Excel a vytvořil funkci nazvanou GetADInfo, která na vstupu získá název vyhledávaného pole (v mém případě je to uživatelské jméno uložené v atributu Active Directory - samAccountName), hodnota tohoto pole (hodnota buňky) s uživatelským jménem) a jménem artikotu AD, jehož hodnota by se funkce měla vrátit.
Jak to všechno funguje? V mém příkladu obsahuje buňka A2 jméno uživatele domény a já chci, aby tento uživatel zjistil společnost, ve které je uveden (pole AD „Společnost“) a jeho kanonické jméno (pole AD „rozlišovací jméno“), v tomto případě vzorce pro buňky, resp. bude vypadat takto:
Buňka B2 (název organizace):
= GetADInfo ("samAccountName"; A2; "Company")
Buňka C2 (CN):
= GetADInfo ("samAccountName"; A2; "rozlišovací jméno")
Kód makra VBA pro načítání dat z AD je následující:
Funkce GetADInfo (ByVal SearchField, ByVal SearchString, ByVal ReturnField) 'Zadejte název domény ("dc = doména, dc = místní") Dim adoCommand, strDomain, objConnection strDomain = "dc = winitpro, dc = ru" Nastavit objConnection = CreateObject (" ADODB.Connection ") objConnection.Open" Provider = ADsDSOObject; " 'Connecting Set adoCommand = CreateObject ("ADODB.Command") adoCommand.ActiveConnection = objConnection' Rekurzivní vyhledávání v AD začínající kořenem domény adoCommand.CommandText = _ "; (& (objectCategory =" & "User" & ")" & _ "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & "; subtree" 'vytvoří sadu záznamů RecordSet Dim objRecordSet Set objRecordSet = adoCommand.Execute If objRecordSet.RecordCount = 0 Pak GetADInfo = "not found"' nic nalezeno Else GetADInfo = objRecordS ReturnField) 'return value End If' Close the connection objConnection.Close 'Vymazat proměnné Set objRecordSet = Nothing Set objCommand = Nothing Set objConnection = Nothing End Function
Aby tato funkce fungovala, musíte ve VBA připojit několik knihoven. V editoru VBA vyberte nabídku Nástroje-> Odkazy av zobrazeném okně označte následující knihovny:
- Visual Basic pro aplikaci
- Knihovna objektů Microsoft Excel 14.0
- Automatizace OLE
- Knihovna objektů Microsoft Office 14.0
- Knihovna Microsoft ActiveX Data Objects 2.8 (nebo tak)
- Microsoft Scripting Runtime
- Microsoft VBScript Regulární výrazy 5.5
Po aktivaci následujících součástí uložte makro VBA a sešit aplikace Excel a v důsledku toho se informace z Active Directory zobrazí v odpovídajících polích Excelu. Krása tohoto skriptu je, že je celkem univerzální a s malými úpravami pomůže dynamicky načíst téměř všechny informace z Active Directory přímo v sešitu přímo v sešitu Excel!