[.net]Active Directory User aan groep toevoegen

Pagina: 1
Acties:

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
Ik ben bezig om een beheer tool te maken voor een applicatie die gebruik maakt van de rechten uit Active Directory op een Windows 2000 server.

Bij deze applicatie moeten de gebruikers lid zijn van een speciale groep voor deze applicatie. De beveiliging werkt al goed en dat is dan ook het probleem niet. Ik wil graag vanuit mijn eigen applicatie gebruikers aan kunnen maken en aan de betreffende groep toevoegen. Ik ben eerst begonnen om een stukje code te maken om een gebruiker toe te voegen. Dit werkt ook perfect de gebruiker wordt op de server toegevoegd. Ik wil de gebruiker daarna ook aan de betreffende groep toe voegen. Hier gaat het echter mis. Ik heb natuurlijk eerst in de MSDN gezocht hoe dit moet. Hier vondt ik de volgende code

C#:
1
2
3
4
5
6
7
8
DirectoryEntry dom = new DirectoryEntry();
DirectoryEntry ou = dom.Children.Find("OU=Consulting");
// Add User to a group;
DirectoryEntry usr = ou.Children.Find("CN=New User");
// To add multiple users to a group use AddRange( new string[]
//{"...userDnHere","...userDnHere..."});
group.Properties["member"].Add(usr.Properties["distinguishedName"].Value);
group.CommitChanges();


Nou kloppen er volgens mij al een paar dingen niet aan deze voorbeeldcode want zo wordt er een DirectoryEntry dom aangemaakt zonder parameter. Deze DirectoryEntry verwijst dus niet naar een DirectoryEntry van de machine dus de Find die op de volgende regel wordt gedaan zal nooit effect hebben.

Maar het belangrijkste voor mij zijn de laatste 2 regels. Ik heb ondertussen al een DirectoryEntry die naar mijn groep verwijst ( Gevonden met de Find methode ) en een DirectoryEntry die naar de user verwijst( Verkregen door een user aan te maken of door te zoeken met de Find Methode ). Dus heb ik zelf de volgende code geschreven om even te testen.

C#:
1
2
3
4
5
DirectoryEntry machine= new DirectoryEntry("WinNT://WEBTEST" );
DirectoryEntry groep= machine.Children.Find( "GroepNaam" );
DirectoryEntry user = machine.Children.Find( "GebruikerNaam" );
groep.Properties["member"].Add( user.Properties["distinguishedName"].Value );
groep.CommitChanges();


Als ik dit doe dan krijg ik de foutmelding
Value cannot be null. Parameter name: value
op deze regel
C#:
1
groep.Properties["member"].Add( user.Properties["distinguishedName"].Value );

Dus het blijkt dat de property distinguishedName niet bestaat. Dat heb ik dus gecontroleerd door alle properties van user te printen en het klopt inderdaad dat deze er niet tussen staat. Voor de rest staan alle properties inderdaad op de correcte waarde voor deze user. Ik heb nog geprobeerd om andere properties van de user aan de Add Methode mee te geven maar dan krijg ik deze foutmelding
Exception from HRESULT: 0x8000500F
Ik heb in de msdn gezocht (zowel online als mijn lokale versie) naar 0x8000500F maar dat leverde geen results op. Google leverde 1 result op
linkje maar hier stond geen antwoord in op mijn probleem.

Ik heb al van alles geprobeerd. Het kan denk ook niet aan de rechten liggen want op het moment is het account waaronder de code wordt uitgevoerd administrator. Het lukt dus ook gewoon om een user aan te maken dus het lijkt me dat ik ook een gebruiker aan een groep kan toevoegen.

Weet iemand mischien wat ik verkeerd doe of heeft er iemand een idee hoe ik wel een gebruiker aan een groep kan toevoegen?

[ Voor 3% gewijzigd door Woy op 15-09-2003 12:33 . Reden: opmaak ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
Is er niemand die wel eens een NT User aan een NT Group heeft toegevoegd in zijn programma?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
Ik heb het nou wel voor elkaar door direct een Invoke te doen op de group class. dus
C#:
1
groep.Invoke( "Add", "WinNt://WEBTEST/GebruikerNaam" );


Ik vindt het alleen wel vreemd dat de standaard manier die in de documentatie staat niet werkt. Ik had wel verwacht dat er een mooie Wrapper voor de DirectoryServices zou zijn maar ik vindt het nog wel een beetje tegen vallen. Maar het werkt ieder geval goed nou en dat is het belangrijkste.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • jwpmzijl
  • Registratie: December 2002
  • Laatst online: 21-06 09:07
Dit is een VB-script dat bij mij werkt. Wellicht heb je er iets aan

code:
1
2
3
4
5
6
7
'De groep bepalen waar de gebruikers aan toegevoegd moet worden
Groep = "juristen"
Set objGroup = GetObject ("LDAP://cn=" & Groep & ",ou=groups,ou=Unit1 ,dc=Domein1,dc=nl")

'Gebruiker met de naam "Gebruiker1" toevoegen aan de groep
Set objUser = GetObject("LDAP://cn=Gebruiker1,ou=Juristen,ou=Unit1,dc=Domein1,dc=nl")
objGroup.Add objUser.AdsPath

Hans van Zijl


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Topicstarter
Dit VB-script werkt inderdaad wel goed, maar het probleem is dat dit niet .net is. Ik roep nou via de Invoke methode van DirectoryEntry inderdaad ook de add methode aan en dus doe ik het eigenlijk wel op dezelfde manier, maar het vreemde vindt ik dat microsoft het in de MSDN anders uitlegt. zie deze link
Het werkt opzicht perfect zo maar ik vindt het een beetje vreemd dat ik direct via Invoke die methode aan moet roepen, in .net had ik toch verwacht dat er een wrapper functie voor bestaat ofzo.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”