[VBscript] Meerdere OU's uitlezen

Pagina: 1
Acties:

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
Ik ben bezig met een script in VB om een password van de user random te resetten, het creeeren van het password lukt, en het resetten op zich ook. Alleen moet je de OU opgeven om het object uit te lezen.
Het script gaat gebruikt worden door een helpdesk die vraagt naar een userID. Het userID staat dus ergens in de Active Directory en ik kan niet uitmaken uit het userID waar deze staat. Dus in welk OU het staat.
Is er een manier om een object op te geven en via VB juist uit te zoeken waar het object staat in de AD? (Zoals dat ook bij Find user in the directory gebruikt wordt)

<edit> Oeps ik denk verkeerde forum.... sorry</edit>

[ Voor 5% gewijzigd door Archie_T op 11-03-2004 14:01 ]


  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
Toch nog een klein schopje...

  • jwpmzijl
  • Registratie: December 2002
  • Laatst online: 23:44
Je zult door alle OU's moeten fietsen om te controleren of in de betreffende OU de gewenste user bestaat. Op het moment dat je deze vind kun je vervolgens de gewenste acties op betreffende account uitvoeren. Heb je een groot aantal OU's en users dan is dit traag maar het werkt wel.

[ Voor 5% gewijzigd door jwpmzijl op 12-03-2004 17:14 ]

Hans van Zijl


  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
jwpmzijl schreef op 12 maart 2004 @ 17:13:
Je zult door alle OU's moeten fietsen om te controleren of in de betreffende OU de gewenste user bestaat. Op het moment dat je deze vind kun je vervolgens de gewenste acties op betreffende account uitvoeren. Heb je een groot aantal OU's en users dan is dit traag maar het werkt wel.
Dat klopt, maar dat is dus wat ik niet wil, er zijn nu nog veel OU's maar de klant gaat reorganiseren en wij gaan migreren naar een Windows 2003 omgeving, dus de AD structuur gaat veranderen. Ik wil er voor zorgen dat de tool nu werkt maar ook hierna, dus ik wil niet afhankelijk zijn van de huidige OU structuur. Ook is het dan makkelijker om in te zetten bij andere klanten.

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
Iemand nog een ideetje??

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Archie_T schreef op 11 maart 2004 @ 14:00:
Ik ben bezig met een script in VB om een password van de user random te resetten, het creeeren van het password lukt, en het resetten op zich ook. Alleen moet je de OU opgeven om het object uit te lezen.
Het script gaat gebruikt worden door een helpdesk die vraagt naar een userID. Het userID staat dus ergens in de Active Directory en ik kan niet uitmaken uit het userID waar deze staat. Dus in welk OU het staat.
Is er een manier om een object op te geven en via VB juist uit te zoeken waar het object staat in de AD? (Zoals dat ook bij Find user in the directory gebruikt wordt)

<edit> Oeps ik denk verkeerde forum.... sorry</edit>
Ik ben wel geintresseerd in hoe die code eruit ziet

W3designer.nl


  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Option explicit
 
'*****************Initialize
Dim check1, check2, check3
Dim repeat, generate, randNO, rndcharup, rndcharlow,filesys,fileopen,pass
randomize
 
'*****************code
createpass ()
WScript.Echo pass

'*****************Functions
'random password creeren
function createpass()
 
 check1 = False
 check2 = False
 check3 = False
 
 for repeat = 1 to 8
  generate   = int(3*rnd)+1
  randNO     = int(rnd*10)
  rndcharup  = int((26*rnd)+65)
  rndcharlow = int((26*rnd)+97)
  select case generate
   case 1
    pass=pass & chr(rndcharup)
    check1= True
   case 2
    pass=pass & chr(rndcharlow)
    check2= True
   case 3
    pass=pass & randNO
    check3= True
  end select
 Next
 
 'checken of alle 3 de characeters voorkomen
 if not check1 Or not check2 Or not check3  then
  pass=""
  createpass()
 end If
 
end function

Dit is dus de code, maakt een password aan met minimaal 1 hoofdletter, 1 kleine letter en 1 cijfer. Ik gebruik dit dus ook nog in andere scripts, dus ik heb nu alleen een simpele echo gegeven, maar je kan die pass string dus overal voor gebruiken.

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Archie_T schreef op 15 maart 2004 @ 16:56:
Dit is dus de code, maakt een password aan met minimaal 1 hoofdletter, 1 kleine letter en 1 cijfer. Ik gebruik dit dus ook nog in andere scripts, dus ik heb nu alleen een simpele echo gegeven, maar je kan die pass string dus overal voor gebruiken.
Ik was meer geintresseerd hoe je dat wachtwoord met je code op het gebruikersaccount toepast. Maar code ziet er mooi uit! :)

W3designer.nl


  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
DarkSilence schreef op 15 maart 2004 @ 17:37:
[...]

Ik was meer geintresseerd hoe je dat wachtwoord met je code op het gebruikersaccount toepast. Maar code ziet er mooi uit! :)
Ok, dan moet ik morgen even posten, zit nu niet op mijn werk (gelukkig) ik zal even kijken wat ik kan posten.

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 27-05 15:32
Om de FQDN uit te lezen:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
objConnectionAD.Open "Provider=ADsDSOObject;"

objCommandAD.ActiveConnection = objConnectionAD

objCommandAD.CommandText = _
    "<GC://dc=[domein],dc=[com];" & _
    "(&(objectCategory=person)" & _
    "(sAMAccountName=[login]));" & _
    "sAMAccountName, distinguishedName;subtree"
  
Set ObjRecordsetAD = objCommandAD.Execute

IF ObjRecordsetAD.recordCount=0 then
  wscript.echo 'Niet gevonden'
 else
  wscript.echo objRecordSetAD.Fields("distinguishedName")
end if


Let op de volgende dingen:
Domein invullen als:
test.com:
code:
1
<GC://dc=TEST,dc=COM;

subdomein.test.nl:
code:
1
<GC://dc=SUBDOMEIN,dc=TEST,dc=NL;


en de gezochte user de samaccountnaam invullen:
Pietje:
code:
1
(sAMAccountName=pietje));


offtopic:
Hoe kon je het regelnummer op een ander nummer laten beginnen?

[ Voor 13% gewijzigd door jvdmeer op 16-03-2004 08:09 ]


  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
DarkSilence schreef op 15 maart 2004 @ 17:37:
[...]

Ik was meer geintresseerd hoe je dat wachtwoord met je code op het gebruikersaccount toepast. Maar code ziet er mooi uit! :)
Zoals beloofd:
code:
1
2
3
4
Option Explicit
Dim usr
Set usr= GetObject("LDAP://DOMAIN")
usr.setpassword (pass)

En hier zie je dus mijn probleem bij Getobject gebruik ik dus de FQDN, maar die kan ik niet vinden aangezien wij hier veel OU's gebruiken. Maar ik ben al aardig op weg en post de resultaten hier nog wel. Nog bedankt voor de VB listing, maar daar kan ik jammergenoeg weinig mee met VB script.

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 27-05 15:32
Archie_T schreef op 16 maart 2004 @ 09:34:
Nog bedankt voor de VB listing, maar daar kan ik jammergenoeg weinig mee met VB script.
Dit komt ook rechtsreeks uit een vbs-file. Het is gewoon vb-script, en het werkt echt. Even de volgende regels erboven zetten:
code:
1
2
3
Set objConnectionAD   = CreateObject("ADODB.Connection")
Set objRecordSetAD    = CreateObject("ADODB.Recordset")
set objCommandAD      = CreateObject ("ADODB.Command")

[ Voor 29% gewijzigd door jvdmeer op 16-03-2004 12:00 ]


  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 22:24
jvdmeer schreef op 16 maart 2004 @ 11:58:
[...]


Dit komt ook rechtsreeks uit een vbs-file. Het is gewoon vb-script, en het werkt echt. Even de volgende regels erboven zetten:
code:
1
2
3
Set objConnectionAD   = CreateObject("ADODB.Connection")
Set objRecordSetAD    = CreateObject("ADODB.Recordset")
set objCommandAD      = CreateObject ("ADODB.Command")
Sorry, het werkt bij mij echt niet, ik denk dat het komt omdat jij VB geinstalleerd hebt en daarom wel bepaalde providers kan aanspreken wat mij niet lukt.
Maar ik heb ondertussen ook niet stil gezeten en ik heb het voor elkaar. Ik heb nu een script wat van het domein de OU's uitleest en deze vervolgens weer gebruikt om de user uit te lezen en dat werkt ok. Wil de listing wel op verzoek posten, maar het is nog een beetje "bedrijfsspecifiek"
<edit>
Ik heb jouw code even gezocht bij ons, wij hadden dus inderdaad al zoiets in ons login script dus dat heb ik even "gestolen", en werkt het in ieder geval VEEL sneller dan mijn code. Dank dank dank
Mijn uiteindelijke code:
code:
1
2
3
4
5
6
7
8
9
10
Dim objConnection, objCommand, objRecordSet
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=ADsDSOObject;"
    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection
    objCommand.CommandText = _
    "<LDAP://DOMAIN>;(&(objectCategory=User)" & "(samAccountName=" & Userinput & "));distinguishedName;subtree"
    Set objRecordSet = objCommand.Execute
    SearchForUser = objRecordSet.Fields("distinguishedName")
    objConnection.Close

DOMAIN is dus ons domein en userinput is de CN van de user
</edit>

[ Voor 34% gewijzigd door Archie_T op 16-03-2004 14:51 ]


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 27-05 15:32
Archie_T schreef op 16 maart 2004 @ 12:11:
Sorry, het werkt bij mij echt niet, ik denk dat het komt omdat jij VB geinstalleerd hebt en daarom wel bepaalde providers kan aanspreken wat mij niet lukt.
Vreemde aanname... ik heb geen VB en ik wil geen VB. Als je naar mijn topics kijkt reageer ik vnl. in [SQL] en [Delphi]. En diegene die Delphi gebruiken weigeren meestal om VB te gebruiken. Die twee talen lijken namelijk allergisch voor elkaar te zijn. ;)

Helaas gebruik ik op mijn werk nog VBS.

Ben blij dat het in ieder geval goed werkt.
Pagina: 1