VBscript Active Directory

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DNAxtreme
  • Registratie: Februari 2009
  • Laatst online: 06-08 00:50
Hallo,

Ben een script aan het schrijven voor een opdracht op school.

Dit script maakt 50 users aan in de Test ou.

D.m.v de regel: "On Error Resume Next" Skipt hij al als bijvoorbeeld een gebruiker al bestaat. Ik zou er graag nog bij willen hebben ipv "WScript.Echo "50 Gebruikers aangemaakt" Dat hij aangeeft hoeveel nieuwe gebruikers hij heeft aangemaakt. als gebruiker 1 al bestaat en hij 2 tm 50 aanmaakt, een msgbox van 49 users toegevoegd.

Zou iemand mij op weg kunnen helpen? Heb alles al geprobeerd. Ik weet dus niet wat de functie is om te laten tellen hoeveel gebruikers hij heeft toegevoed.

Hoop dat iemand mij kan helpen. Hieronder de werkende code.

On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://ou=Test," & _
objRootDSE.Get("defaultNamingContext"))

For i = 1 To 50
Set objLeaf = objContainer.Create("User", "cn=Gebruiker" & i)
objLeaf.Put "sAMAccountName", "Gebruiker" & i
objLeaf.SetPassword "test"
objLeaf.SetInfo
Next

WScript.Echo "50 Gebruikers aangemaakt."

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 22:15

MAX3400

XBL: OctagonQontrol

School-opdracht?

Waarom pak je het dan niet netter aan en laat je eerst controleren of een user al bestaat en die dus niet toevoegt in de "aanmaak-lus"?

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:05

Reptile209

- gers -

Met 'on error resume next' kom je er in je code natuurlijk nooit achter of er een fout is opgetreden :). Ga eens kijken wat objContainer.Create() teruggeeft als een username al bestaat. Daar komt vast een bruikbaarder systeem uit tevoorschijn, zodat je met een simpel tellertje kunt kijken hoeveel er gelukt zijn. En omdat je gedetailleerdere informatie krijgt, zou je zelfs kunnen loggen welke users al bestaan!

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • DNAxtreme
  • Registratie: Februari 2009
  • Laatst online: 06-08 00:50
Hallo,
Bedankt voor de snelle reacties! Het is inderdaad een school opdracht.
'on error resume next' Zonder deze regel geeft hij aan: The object already exist.
Heb dit dus puur zo gedaan om de foutmelding weg te krijgen.

Wat ik dus wil, is geen foutmelding. maar aan het einde van het script een boxje met daarin een counter hoeveel users hij heeft toegevoegd.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dan doe je eerst een read om te kijken of 't al bestaat: zo niet voeg toe en hoog je tellertje op. Simpel toch?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • DNAxtreme
  • Registratie: Februari 2009
  • Laatst online: 06-08 00:50
het probleem is dat ik niet zon held ben met dit verhaal... Dus eerst een read ?? Klinkt logisch. maar hoe? Ik leer voor netwerkbeheerder maar moet een cursus Applicatie ontwikkeling doen. (voor de formaliteit) Als ik kan realiseren wat ik hier boven vraag dan ben ik klaar.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

DNAxtreme schreef op dinsdag 09 maart 2010 @ 15:37:
het probleem is dat ik niet zon held ben met dit verhaal...
Je hoeft ook geen held te zijn met dit verhaal om Google te kunnen gebruiken. Als we 't je voorzeggen leer je er ook niks van, daar heeft niemand wat aan.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • DNAxtreme
  • Registratie: Februari 2009
  • Laatst online: 06-08 00:50
Ik heb wel het een en ander gevonden maar zou niet weten waar ik dat nou moet toepassen in mijn script. Als ik het er in zet krijg ik fouten. Ik vroeg me gewoon af welk commando ik nodig heb om te kunnen realiseren om te kunnen readen, If user exist then count 0 zoiets.

Dat laatste.. Tsja.. Ik ga er verder toch niks meer mee doen. Het is puur zodat ik dat vak met een V afsluit. Vind het al knap dat ik dit voor elkaar/werkend heb gekregen

Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 18:21
Je weet het ldap adres van de user "cn=Gebruiker" & i en je hebt de methode GetObject. Als het object bestaat is het een object, anders niet. Dat kan dan wel met een if.

Verder zou je eens naar error handling kunnen kijken. Door simpel weg je fout te negeren geef je een controle mechanisme al uit handen. Je code loopt wel door, maar je kunt niet controleren of het aanmaken gelukt is.

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 22:15

MAX3400

XBL: OctagonQontrol

NMe schreef op dinsdag 09 maart 2010 @ 15:48:
[...]
Als we 't je voorzeggen leer je er ook niks van, daar heeft niemand wat aan.
+
DNAxtreme schreef op dinsdag 09 maart 2010 @ 16:20:...Tsja.. Ik ga er verder toch niks meer mee doen...
Het is dus een kwestie van trial&error of logisch nadenken; het lijkt me toch dat school je wil opleiden om logisch na te denken in de syntax van een stukje code teneinde deze opdracht (of later bij een werkgever) iets succesvol af te kunnen ronden.

Ikzelf ben niet logisch met scripting en dergelijke maar zou er persoonlijk voor kiezen om een loopje in te bouwen. Check voor user1 eerst of 'ie al bestaat in AD. Zo ja, skip create goto user2-loop. Zo nee, create user, goto user2-loop.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • DNAxtreme
  • Registratie: Februari 2009
  • Laatst online: 06-08 00:50
Zoiets in de vorm van

On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://ou=Test," & _
objRootDSE.Get("defaultNamingContext"))

For i = 1 To 50
Set objLeaf = objContainer.Create("User", "cn=Gebruiker" & i)
objLeaf.Put "sAMAccountName", "Gebruiker" & i
objLeaf.SetPassword "test"
objLeaf.SetInfo

If cn=Gebruiker" & i Exist then............

Next

WScript.Echo "50 Gebruikers aangemaakt."

Met wat kan ik het gaan counten? Vind het echt moeilijk

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat roepen we nou al sinds de eerste post in dit topic over "On Error Resume Next"? :X En je doet nog steeds niet éérst een check voordat je iets toevoegt. Werk dit eens gewoon in je hoofd uit: je wil eerst kijken óf hetgeen je toevoegen al bestaat. Zo ja, dan doe je niks. Zo nee, dan voeg je het toe en hoog je een tellertje op.

In pseudocode:
tellertje = 0
als record niet bestaat dan
   voeg regel toe
   tellertje = tellertje + 1

Vervolgens hoef je alleen maar uit te zoeken hoe je checkt of een record al bestaat, en dat staat in de eerste drie hits van de Google query die ik hierboven linkte al uitgelegd. De rest van de code heb je al.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:35

MueR

Admin Tweakers Discord

is niet lief

offtopic:
Zou je de code tag willen gebruiken? Dat leest wat prettiger.


Ik zit met lichte verbazing dit topic te lezen. Je moet dit voor school maken, maar wil er eigenlijk geen energie in steken. Dat kan ik ergens wel begrijpen, niet elk vak kreeg van mij evenveel aandacht op school. Ik vind het wel wat vervelend dat je die instelling hier ook uitdraagt. Je verwacht eigenlijk gewoon dat wij je code gaan schrijven, omdat je zelf te lam bent om het op te zoeken.

Met de hoeveelheid nuttige hints in dit topic had je het al lang af kunnen hebben als je er even een uurtje voor ging zitten. Dat je verder nooit meer iets met VB denkt te gaan doen (ik betwijfel het, je krijgt het vak met een reden), wil niet zeggen dat je er nooit mee moet beginnen.

[/2-cents]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • DNAxtreme
  • Registratie: Februari 2009
  • Laatst online: 06-08 00:50
Hallo,

Het moet niet zo zijn dat jullie de indruk krijgen dat ik hier niks voor wil doen. integendeel. Waarschijnlijk is dit voor jullie heel makkelijk. Maar ik zit echt met mn handen in het haar.

Ik zit er nu dus al mee vanaf gister. Ik snap de logica er niet zo van. Ieder zn ding zeg ik nou maar.

Ben er nog mee bezig. Ben al wel wat verder. Heb het volgende gevonden. Vond een soort gelijk script en heb daar het volgende uit kunnen halen. Het telt dus wel. maar werkt nog niet voor mijn doeleind. Wat ik nu dus wil, is dat hij gaat tellen, Nogmaals voor de duidelijkheid. OU=Test, daarin zitten 50 users. Het script werkt nu wel. hij voegt de users wel toe. maar aan het einde van de rit zegt hij has 1 new member. Snap dan ook niet wat hij nu telt. Waarschijnlijk staat nu alleen de counter niet goed? Wel stond in de teller code die ik vond: "On Error Resume Next" Moet ik die nu wel gebruiken of niet ? (ondanks dat hij in de code van het internet stond) Zonder On Error Resume Next Geeft hij aan object already exist. Misschien kan iemand me het laatste zetje geven ? :-)

Hij moet dus het aantal toegevoegde users gaan tellen. Heb hem ook al zo gehad dat hij alleen de users in de groep telde.. maar niet het aantal toegevoegde.. Denk dat het nog 1 regeltje is dat ontbreekt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
On Error Resume Next
set objRootDSE = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://ou=Test," & _
    objRootDSE.Get("defaultNamingContext"))
 
For i = 1 To 50
    Set objLeaf = objContainer.Create("User", "cn=Gebruiker" & i)
    objLeaf.Put "sAMAccountName", "Gebruiker" & i
    objLeaf.SetInfo

Next

intCounter = 0
For Each objUser In objOU
   If objUser.Class = lcase("User") then
      objGroup.add(objUser.ADsPath)
      intCounter = intcounter +1
   End If

Next

WScript.Echo strGroup & " has " & intCounter & " new members"

[ Voor 5% gewijzigd door DNAxtreme op 10-03-2010 19:28 ]


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 18:21
Vraag me af waar je objOU vandaan hebt.
Lijkt me dat dat objContainer moet zijn daar heb je namelijk je gebruikers ingestopt.

Als je scripts kopieert is het altijd goed uit te zoeken wat het doet, en wat je er van nodig hebt voor jou doel. Zo maar er in plakken gaat nooit werken. Je zal altijd nog wel iets aan moeten passen.

Acties:
  • 0 Henk 'm!

  • Jeroen V
  • Registratie: Februari 2004
  • Laatst online: 05-07 23:57

Jeroen V

yadda yadda yadda

DNAxtreme schreef op woensdag 10 maart 2010 @ 19:23:Denk dat het nog 1 regeltje is dat ontbreekt.
Geloof me, het zijn meer regeltjes......

Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Je kant ook gewoon 'Err' uitlezen en daar mee tellen als je te lui bent om eerst te checken of die user bestaat. Krijg je een Err dan tel je niet, krijg je geen Err dan tel je 'm wel.

On Error Resume Next is eigenlijk not done.. en eigenlijk ook Option Explicit gebruiken en alle vars defineren.

[ Voor 13% gewijzigd door Krypt op 11-03-2010 16:52 ]

Pvouput live


Acties:
  • 0 Henk 'm!

  • DNAxtreme
  • Registratie: Februari 2009
  • Laatst online: 06-08 00:50
Hallo,

Mede door wat tips van jullie heb ik het script eindelijk af. Heb het script goedgekeurd gekregen. De counter werkt nu en krijg aan het einde een popup met aan het einde het totaal toegevoede users.

Bedankt :-)

Dit is het resultaat:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
On Error Resume Next
err.clear
intCounter = 0
set objRootDSE = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://ou=Test," & _
    objRootDSE.Get("defaultNamingContext"))
 
For i = 1 To 10
    Set objLeaf = objContainer.Create("User", "cn=Gebruiker" & i)
    if err.Number <> 0 then
    MsgBox ("Error")
    else
        objLeaf.Put "sAMAccountName", "Gebruiker" & i 
        objLeaf.SetInfo 
    intCounter = intCounter + 1
    End if
Next

WScript.Echo strGroup & " heeft " & intCounter & " nieuwe gebruikers"

Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Fijn dat het werk.. maar een schoonheidsprijs verdient het naar mijn mening niet :)

Pvouput live


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Krypt schreef op vrijdag 12 maart 2010 @ 13:22:
Fijn dat het werk.. maar een schoonheidsprijs verdient het naar mijn mening niet :)
Mwah, afhankelijk van hoe snel de AD-server is kan deze aanpak wel beter zijn, mits je geen interesse hebt in het uitvinden waarom het toevoegen fout ging. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-08 13:55
Klopt; maar dan zou ik de 'On Error Resume Next' neerzetten bij de Create functie en weer 'On Error Goto 0' neerzetten na het uitlezen van de Err.

Verder nog 'Option Explicit' gebruiken en alle variablelen definieren. Verder wordt 'strGroup' gedisplayed, terwijl deze helemaal niet gevuld wordt.

Als een hobby project ok; maar productie is het voor mij een no-go.
Daarbij is het voor school; dus kan je het meteen goed leren. Maar dat ik mijn mening :)

Pvouput live

Pagina: 1