07. september 2003 - 22:43Der er
18 kommentarer og 1 løsning
Slet brugere ikke på liste
Jeg opretter brugere ud fra en liste i en tekstfil. Når en bruger ikke mere eksisterer slettes vedkommende fra listen. Jeg har ikke indflydelse på indholdet i listen, så den kan jeg ikke lave om på.
Jeg gerne have scriptet til at slette brugere i AD'et, som ikke er på listen.
Jeg indlæser fra listen via en løkke til et Array og alle brugere fra AD'et via et filter. Men jeg kan ikke få de to til at arbejde sammen.
Fra AD: Set oCN = GetObject("LDAP://OU=Afdeling1,OU=Brugere,DC=xxxx,DC=dk") oCN.Filter = Array("User")
Fra tekstfil: While Not tsinputfile.AtEndOfStream strLine = tsinputfile.ReadLine arrInput = Split(strLine, ",") arrInput(0)=replace(arrInput(0),chr(34),"") osv... Wend
Hvis jeg lægger den ene ind i den anden og forsøger at læse (echo) indholdet sker der ikke noget som helst.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jo gerne. Jeg kører f.eks. en løkke de læser alle navne i en bestemt OU. For hver eneste fundne bruger kører jeg så en løkke der læser indholdet i tekstfilen. Hvis brugeren i AD findes i løkken skal der ikke ske noget, hvis brugeren ikke findes på listen skal han slettes.
Nej, det er vel ikke et fedt. Først må du lige finde ud af, om du faktisk får fundet de brugere, der ikke er på listen. Prøv at udskrive en tekstfil over de brugere. Når det så virker, kan du tage fat på atfå slettet disse brugere ved passende brug af LDAP .
Det er netop det der er problemet: Jeg finder alle brugere i AD'et og jeg finder alle brugere i tekstfilen. Jeg mangler at finde de brugere der ikke er på listen.
Men dvs, at problemet er et problem, der alene handler om at lave en liste over brugere, der ikke er på begge lister.' Hvor store lister taler vi om? Hvilket format anvendes i de to lister? Får du en liste over brugere i form af brugernavne, eller er brugernavnene ikke helt det samme som navnene på listen, du ikke selv har indflydelse på?
Listen er voksende, lige nu ca 1400 brugere. txt-fil a,la "Nr","Type","Brugernavn","cpr","fornavn","Efternavn" Brugernavn er det samme på listen som i AD
Dvs listerne er ikke større, end at de kan være i serverens RAM-lager, mens de behandles, men det vil nok være en god ide at lave to sorterede brugernavns-lister, når du skal sammenligne listerne. Kunne der være problemer med store og små bogstaver, så du skal omdanne til f.eks. store, med Ucase-funktionen.
Har jeg forstået dig ret, at du ikke har nogle problemer med at få slettet en bruger, hvis navn du kender, med et passende LDAP-script?
Hvis du har 1400 brugere vil squashguys script nok køre for langsomt. Og det du selv har lavet har måske samme problem. (tænk på den situation, at kun 1 bruger skal slettes, og denne bruger er til sidst i listen oCN. Der bliver vist tale om en mindst 1 million sammenligninger af navne).
Du bør først sortere de to lister enten ved at bruge quick-sort elle comb-sort. Hvis listen over brugere er gemt i A(0),A(1),...,A(n) ,den reviderede evt. mindre liste er gemt i B(0), B(1),...,B(m), begge lister er sorterede så A(0)<A(1)<... og B(0)<B(1)<... vil et script der piller de A-elementer ud, der ikke er i B-listen kunne se således ud:
p=0 for i=0 to n if A(i)<>B(p) then slet brugeren A(i) else if p<m then p=p+1 end if next
-> nmh Der er ikke problemer med Upper/lower i udtrækkene. Og jeg har ingen problemer med at slette brugere og alle deres filer, profilmapper mm. i et hug.
Squashguy forslag ligner vist det jeg havde forstillet mig, men mnh har vist ret i at det bliver en meget lang proces, så jeg må hellere kigge lidt på sorteringsmekanismen. Desværre er der akutte probs på arbejde lige nu så jeg får ikke meget tid i morgen heller til at kigge på det.
Nu har jeg lavet et script, der på grundlag af to usorterede lister af eksisterende brugere og en opdateret liste af brugere laver en liste over de brugere, der ikke er med mere, og en liste over nytilkomne brugere.
Listerne skal være på formen "navn1,navn2,...". De nye lister vil er på samme form, men der bliver samtidigt lavet to arrays.
Scriptet kan afprøves som et VBscript, og til det formål udskrives de fire lister til sidst.
Sorteringsmetoden er CombSort, som desværre ikke kendes af så mange. Den er næsten lige så hurtig som QuickSort, men er langt simplere i sin opbygning.
jeg har længe selv haft behovet for et sådant script, så dette var anledningen til at få det lavet.
dim Users, U, okUsers, okU dim Slettes, Slt(), Nyebrugere, Nye() dim i, p, q, r, s, n, m, txt
sub Sort(A) 'Denne procedure sorterer arrayet, som 'overføres ved reference. 'Det er metoden CombSort, der benyttes. 'Den er næsten lige så hurtig som QuickSort dim n, gap,OK,i,j,tmp 'tabellen A sorteres. CombSort n=Ubound(A) gap = n ok = True While ok If gap < 1 Then gap = 1 ok = (gap <> 1) For i = 0 To n - gap j = i + gap If A(i) > A(j) Then tmp = A(j): A(j) = A(i): A(i) = tmp ok=true End If Next gap = Int(gap / 1.33) 'Tallet 1.33 er bedst Wend end sub
'Listen Users er brugerne der er i systemet. 'Listen okUsers er den nye brugerliste. 'Der skal laves en liste Slettes over de navne i Users, der ikke 'er i okUsers og en liste NyeBrugere over de nytilkomne. 'Krav: begge lister Users og okUsers indeholder mindst et element.
'Nu flettes de to lister n=Ubound(U): m=Ubound(okU) p=0: q=0: r=-1: s=-1 redim slt(n): redim Nye(m) while p<=n and q<=m if U(p)<okU(q) then r=r+1: slt(r)=U(p):p=p+1 elseif U(p)>okU(q) then s=s+1: Nye(s)=okU(q):q=q+1 else p=p+1: q=q+1 end if wend
for i=p to n r=r+1 Slt(r)=U(i) next
for i=q to m s=s+1 Nye(s)=okU(i) next
if r>=0 then redim preserve slt(r) Slettes=join(slt,",") end if
if s>=0 then redim preserve Nye(s) NyeBrugere=join(Nye,",") end if
Det går desværre lidt tung med projektet eller rettere med tiden. Jeg har lige nu 500 brugere der skal skifte fra Tasktimer til Outlook på mandag, så sletteprojektet er stillet lidt i bero, men det ser lige ud til at være det jeg skal bruge så jeg vender forhåbenlig snart tilbage.
Så fik jeg endelig lidt arbejdsro! Chefer er nogen gange irriterende med alle deres akutte her og nu jobs. 1000 tak til nmh, det var lige det der skulle til. Nu virker det bare.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.