Ik ben een programma aan het maken die vanuit de registry automatisch wordt opgestart en een aantal zaken controleert.
Een van de eerste dingen is of de huidige user (domain user) lid is van de lokale administrators. Zoniet, moet de user aan de lokale administrators worden toegevoegd.
Om het netjes te doen, wandel ik eerst door de members van de groep Administrators heen, om te kijken of de user erin staat:
Als ik de members bekijk van de Administrators group (lokaal) zijn dat:
- Administrator
- DOMAIN\Domain Admins
- DOMAIN\Pietje
- SomeLocalUser
Het rare is nu... als ik de lokale Directory uitlees, zonder een username/pass op te geven aan het DirectoryEntry object, dan krijg ik 4 Members terug (zoals je zou verwachten)... maar, omdat de user die deze applicatie gaat uitvoeren mogelijk geen lid is van de lokale administrators, wil ik bij het maken van een connectie naar de lokale Directory een username/pass opgeven:
Local.Username = "Administrator"
Local.Password = "Password"
Op zich werkt dit wel.. maar ik krijg dan uit de lokale Administrators groep maar 1 user terug, namelijk de lokale Administrator. De beide domain accounts krijg ik niet terug en ook de SomeLocalUser niet. Verder loopt het programma wel netjes door, maar de constatering of de domain user reeds lid is van de lokale administrators klopt dus niet. Hierdoor gaat het invoken van "Add" even verderop onderuit.
Haal ik de username en pass weer weg, dan krijg ik wel weer 4 accounts terug uit de lokale Administrators, maarja, dan heb ik verderop weer een probleem, want de user die dan het programma uitvoert mag mogelijk geen users toevoegen...
Heeft iemand een idee waarom het resultaat van .Invoke("Members") in het ene geval juist is (4 members) en in het andere geval maar 1 member terug geeft ??
Een van de eerste dingen is of de huidige user (domain user) lid is van de lokale administrators. Zoniet, moet de user aan de lokale administrators worden toegevoegd.
Om het netjes te doen, wandel ik eerst door de members van de groep Administrators heen, om te kijken of de user erin staat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Dim Local, LocalGroup, LocalGroupMemberEntry As DirectoryEntry
Local = New DirectoryEntry("WinNT://" & Environment.MachineName & ",computer")
If Not Local.Children.Find("Administrators", "group") Is Nothing Then
LocalGroup = Local.Children.Find("Administrators", "group")
LocalGroupMembers = LocalGroup.Invoke("Members", Nothing)
If Not LocalGroupMembers Is Nothing Then
For Each LocalGroupMember As Object In LocalGroupMembers
LocalGroupMemberEntry = New DirectoryEntry(LocalGroupMember)
If LocalGroupMemberEntry.Name = UserName Then
Exists = True
End If
Next
End If
End If |
Als ik de members bekijk van de Administrators group (lokaal) zijn dat:
- Administrator
- DOMAIN\Domain Admins
- DOMAIN\Pietje
- SomeLocalUser
Het rare is nu... als ik de lokale Directory uitlees, zonder een username/pass op te geven aan het DirectoryEntry object, dan krijg ik 4 Members terug (zoals je zou verwachten)... maar, omdat de user die deze applicatie gaat uitvoeren mogelijk geen lid is van de lokale administrators, wil ik bij het maken van een connectie naar de lokale Directory een username/pass opgeven:
Local.Username = "Administrator"
Local.Password = "Password"
Op zich werkt dit wel.. maar ik krijg dan uit de lokale Administrators groep maar 1 user terug, namelijk de lokale Administrator. De beide domain accounts krijg ik niet terug en ook de SomeLocalUser niet. Verder loopt het programma wel netjes door, maar de constatering of de domain user reeds lid is van de lokale administrators klopt dus niet. Hierdoor gaat het invoken van "Add" even verderop onderuit.
Haal ik de username en pass weer weg, dan krijg ik wel weer 4 accounts terug uit de lokale Administrators, maarja, dan heb ik verderop weer een probleem, want de user die dan het programma uitvoert mag mogelijk geen users toevoegen...
Heeft iemand een idee waarom het resultaat van .Invoke("Members") in het ene geval juist is (4 members) en in het andere geval maar 1 member terug geeft ??