Naplnenie skupiny na Exchange členmi skriptom

Pretože GUI Exchange neumožňuje automatické napĺňanie skupiny (mailinglistu, v prostredí Active Directory je to Group) členmi, tak sa dá pomôcť VBS skriptom.

Dajme tomu mám používateľské účty v ActiveDirectory (AD) rozsypané v organizačných jednotkách (OU) kopírujúcich organizačnú štruktúru firmy resp. podľa iného „rozšuflíkovania“. Časom vznikne potreba osloviť konkrétnu organizačnú jednotku hromadným e-mailom.

Poštový klient (MUA) pre Exchange je MS Outlook avšak ten má veľmi slabé možnosti zobrazenia organizačnej štruktúry adresára AD. Zobrazí púhy zoznam ľudí a pomerne ťažko si používateľ Outlooku dokáže vyselektovať zoznam podľa určenej organizačnej jednotky (vrátane podriadených OU).

Preto vznikne nápad vytvoriť skupinu a členov do nej nasypať. Problém je v tom, že je nutné ju aktualizovať. Pokiaľ existuje algoritmus, tak jedinou úlohou je nájsť prostriedok ako ho realizovať.

Pre tento prípad existuje možnosť pravidelne spúštaným skriptom automaticky aktualizovať členov skupiny. Pre tento prípad teda chceme, aby danú skupinu tvorili účty v zadanej OU (a podriadených OU).

Náš skript je pomerne jednoduchý a robí dve veci:

  1. napĺňa Members v zadanej Group zo zadanej OU,
  2. vytvára textový súbor so zoznamom e-mailov.

Skript po kúskoch okomentujem, tučným sú zvýraznené veci, ktoré si musíte prispôsobiť pre svoje podmienky a požiadavky:

‘ Skript: export z AD
‘ (c) 2002 Robert Madaj
On Error Resume Next
Dim oGroup
Set oGroup=GetObject(„LDAP://domain/CN=Skupina Bratislava,OU=Skupiny,OU=firma,DC=people,DC=domain,DC=tld„)

V poslednom riadku určujeme pozíciu skupiny, ktorú sme vopred vytvorili štandardným postupom v AD. Skupina má názov „Skupina Bratislava“ a je uložená v OU s názvom „Skupiny“. Určil som si totiž, že všetky takéto skupiny mám v jednom špeciálnom OU kvoli prehľadu o počte skupín. OU s názvom Firma vyplýva zo štruktúry v AD, v mojom prípade sú všetky účty v skupine pomenovanej názvom firmy a až v ňom sa rozkladá celá organizačná štruktúra firmy. Položky DC rovnako závisia od konfigurácie AD, čiže pomenovania „people“, „domain“ a „tld“ si musíte z neho zistiť.

Dim oContainer
Dim OutPutFile
Dim FileSystem
Set FileSystem = WScript.CreateObject(„Scripting.FileSystemObject“)
Set OutPutFile = FileSystem.CreateTextFile(„\\server\zoznamy\zoznam.txt„, True)
Set oContainer=GetObject(„LDAP://domain/OU=Region Bratislava,OU=firma,DC=people,DC=domain,DC=tld„)

Tu musíme upraviť cestu a názov textového súboru na riadku s OutPutFile. Ja to ukladám na sieťový zdroj preto používam formát s opačnými lomítkami (ak netušíte o čo ide tu sú kľúčové slová pre googlovanie: smb, Samba).

Ďalej musíme určiť z ktorého OU sa budú účty vyberať. Opäť treba zistiť aké hodnoty domain, firma, people, tld treba doplniť podľa konfigurácie Vašej AD.

V mojom príklade chcem aby sa členovia skupiny vyzobávali z OU s názvom „Region Bratislava“. Takže máme určenú OU z ktoréj sa vyberá a skupinu (Group), kam sa vkladá.

Nezabudnite, že premenovanie skupiny popletie skript a tento nebude skupinu napĺňať. Dajte si do Description skupiny príslušné upozornenie, že Members napĺňa skript. Neskôr to oceníte.

Skript dokončíme:

EnumerateUsers oContainer
OutPutFile.Close
Set FileSystem = Nothing
Set oContainer = Nothing
WScript.Quit(0)

Nasledujú podprogramy:

Sub EnumerateUsers(oCont)
Dim oUser
For Each oUser In oCont
Select Case LCase(oUser.Class)
Case „user“
oGroup.Add („LDAP://domain/“ & oUser.distinguishedName)
If Not IsEmpty(oUser.mail) Then OutPutFile.WriteLine „“ & oUser.mail End If
Case „organizationalunit“ , „container“
EnumerateUsers oUser
End Select
Next
End Sub

Nezabudnite tučne zvýraznenú adresu upraviť podľa názvu vašej domény a miesto „domain“ dopísať tú vašu.

V prípade, že ste skutočne nezabudli vytvoriť skupinu, presne ste prepísali jej názov, dobre ste prepísali názov OU a nepoplietli LDAP adresu či názov domény, tak by skript mal „trafiť“ žiadanú skupinu a nasypať do nej Members.


Pred naplnením skupiny je však niekedy dobré najprv členov vymazať a až potom napĺňať nanovo. Môže sa stať, že v danom OU nejaký účet zmizne. Problémom skupín (Groups) v Exchange a AD je v tom, že po vymazaní účtu z Members „nezmizne“ odkaz na už neexistujúci účet. Jednoduchšie je proste Members vymazať a naplniť znova.

Vymazanie Members z danej skupiny sa robí týmto krátkym skriptom:

Const ADS_PROPERTY_CLEAR = 1
Set oGroup=GetObject(„LDAP://domain/CN=Skupina Bratislava,OU=Skupiny,OU=firma,DC=people,DC=domain,DC=tld„)
oGroup.PutEx ADS_PROPERTY_CLEAR, „member“, 0
oGroup.SetInfo

Opäť treba adresu k skupine upraviť podľa konfigurácie konkrétnej AD.


Pre programátorov ešte pár tipov ako pridať do skupiny konkrétneho jednotlivca, resp. ho vymazať, čo už ale nie je súčasť skriptu:


oGroup.Remove („LDAP://domain/CN=Jana Vsedakova,OU=Londyn,OU=firma,DC=people,DC=domain,DC=tld“)
oGroup.Add („LDAP://domain/CN=Jana Vsedakova,OU=Londyn,OU=firma,DC=people,DC=domain,DC=tld“)

Prihodenie jednotlivca môže byť dobré, pokiaľ sa vo vašej firme požaduje, aby členom automatickej skupiny bol ešte niekto ďalší, kto nie je v danom OU ale je nutné ho tam dopĺňať explicitne. Vymazanie jednotlivca je potrebné, ak máte výnimočnú požiadavku konkrétnu osobu nezahŕňať do mailinglistu. Štandardne ste to napríklad vy a všetci, čo neznášajú firemný spam. Aj preto, že mailom zasielané nezmysly sú obvykle už duplicitnou informáciou zverejňovanou iným spôsobom.


Ostáva nám problém ako to všetko zautomatizovať. Mohli by ste síce tento skript vždy ráno odkliknúť – ale to je otrava, keď tu máme nedozierne schopnosti operačného systému (ktoré nepoznajú niektorí veľkí jablkobijci či antilinuxáci s klapkami na očiach.

Áno, jednoduchá súčasť OS Windows. Naplánované úlohy.

Pridám v nich pravidelne spúšťanú úlohu, ktorá spočíva v spustení nami vytvoreného skriptu v nami zadaných intervaloch. Tie si určite sami – podľa mňa stačí raz za deň niekedy v noci.


Staňte sa efektívnym firemným spamerom a vytvárajte si hromadné mailinglisty s použitím automatických skupín.

Written by rony