Csütörtökön Bende Imre kolléga feldobott egy magas labdát. Volt egy telefonbeszélgetésünk is ezügyben. A feladat a következő:
Van egy Exchange 2000 szerver ahol tömegesen kellene felvenni domaineket a tiltott domainek listájára.
Csak, hogy pontosan jelezzem miről is van szó, ide:
Exchange System Manager/Administrative Groups/First Administrative Group/Servers/<szerver neve>/Protocols/SMTP/Default Virtual Server, Properties, Access fül, Connection…, Add…, Domain
Ezt már megkeresni se egyszerű, hátmég tömegben felvenni ide valamit. Elkezdtem keresgélni, hogy honnan veszi a beállításokat. Végigtúrtam a metabase-t (adsutil.vbs-el), a registry-t, az AD-t és nem találtam semmit. Azután hosszas keresgélés után rájöttem, hogy csak a metabase-ben tárolja a dolgokat, bináris formában egy IPSec tipusú (semmi köze az IPSEC protokolhoz) propertyben. Ezt a tipust a fent említett adsutil.vbs nem kezeli és miután az IPSec tipusnév nem kicsit félreérthető, elsiklottam felette. Végül némi küzdés árán megszültem a dolgot. VBScript (broáf) azért lett belőle mert a JScript a VBScript tipusú tömböt (azt hiszem SafeArray-nak hívják hivatalból) csak olvasni hajlandó és írni nem. Miután az adsutilban ignorálták az IPSec típus kezelését, ezért azt vettem a fejembe, hogy írok egy olyan scriptet ami teljeskörüen kezeli. A legszebb az lenne, ha beleraknám az adsutilba, de nem tudom, hogy ezzel milyen jogi macerákat vennék magamra, amihez semmi kedvem.
Option Explicit 'Constants Const ForReading = 1 'Initial parameters Dim FileName,IsOverWrite,SmtpVsAdsi IsOverWrite = True FileName = "c:\work\metabase\test.txt" SmtpVsAdsi = "IIS://LocalHost/SMTPSVC/1" 'Variables Dim DomainName Dim i Dim FSO, f Dim DomainList 'Code If IsOverWrite Then DomainList = Array("") DomainList(0) = "" Else DomainList = GetDomainList(SmtpVsAdsi) End If Set FSO = CreateObject("Scripting.FileSystemObject") Set f = FSO.OpenTextFile(FileName, ForReading, True) Do While f.AtEndOfStream <> True DomainName = Trim(f.ReadLine) If DomainName <> "" Then AddDomain DomainList, DomainName End If Loop f.Close SetDomainList SmtpVsAdsi, DomainList 'Functions Function GetDomainList(Path) Dim SmtpVS Set SmtpVS = GetObject(Path) GetDomainList = SmtpVS.IPSecurity.DomainDeny End Function Sub SetDomainList(Path,DomainArr) Dim SecObj Dim SmtpVS Set SmtpVS = GetObject(Path) Set SecObj = SmtpVS.IPSecurity SecObj.DomainDeny = DomainArr SmtpVS.IPSecurity = SecObj SmtpVS.SetInfo End Sub Sub AddDomain(DomainArr,DomainName) If Not ((UBound(DomainArr) = 0) and (DomainArr(0) = "")) Then ReDim Preserve DomainArr(UBound(DomainArr)+1) End If DomainArr(UBound(DomainArr)) = DomainName End Sub
Recent Comments