Jump to content

Benutzergruppen im AD auslesen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen

Ich arbeite in der Gebäudeautomation mit einem Leitsystem(WinCC). Im AD gibt es drei Gruppen. Die heissen Reinigung, Maintenance, Admin.

Das ganze läuft wie folgt ab(stelle ich mir vor):

Ein User loggt sich auf dem Computer ein. Und das Leitsystem startet automatisch. Sobald dieses aufgestartet ist soll mein Skript ablaufen. Dieses soll nun die Benutzergruppe herausfinden in welcher der aktuell eingeloggte Benutzer ist. Es kann nicht sein das der Nutzer bei zwei Gruppen dabei ist. Somit stelle ich mir das ganze eigentlich nicht so wirklich kompliziert vor, wenn ich nur alle diese Befehle wüsste für das VBScript.

 

Was ich bis jetzt schon habe ist folgendes:

 

Dim strComputer
Dim objwmi
Dim collitems
Dim objitemMaint, objitemMCC, objitemSSH
Dim i
Dim test
Dim obj1, obj2, PicName
Dim objPC
Dim objWMISvc, colItems, objItem,objWMIService,Wscript,objComputer ,colSettings
Dim Echo
Dim objGroup,objMember, Domain, Group,txt
 
Set objWMISvc = GetObject( "winmgmts:\\.\root\cimv2" )
Set colItems = objWMISvc.ExecQuery( "Select * from Win32_ComputerSystem", , 48 )
For Each objItem in colItems
    strComputer = objItem.Name
Next
 
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery _
    ("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings 
    Echo = "System Name: " & objComputer.Name & "***"
    HMIRuntime.Trace(Echo)
    Echo = "Domain: " & objComputer.Domain & "***"
    HMIRuntime.Trace(Echo)
Next
***********************************************************************************************************************************3
'Mitglieder einer Gruppe
Domain = "zrh.local"
Group="Reinigung"
Set objGroup = GetObject("WinNT://" & Domain & "/" & Group)
For Each objMember In objGroup.Members
Echo = objMember.Name
If Echo = "" Then
HMIRuntime.Trace("kein Eintrag")
Else
HMIRuntime.Trace(Echo)
End If 
 
Next
 

Am Anfang klar die Variablen, dann lese ich den Computernamen aus um dann anschließend die Domain zu ermitteln. Klappt alles soweit so gut. Nach denn vielen Sternen klappt es dann leider nicht mehr so gut. Die For-Schleife wird einfach nicht abgearbeitet. Kann dies sein das die Gruppe leer ist? Oder ist das ganze ein falscher Ansatz? Ich möchte einfach kontrollieren ob der eingeloggte Benutzer zu einer der drei Gruppen gehört. 

 

Kann mir da jemand helfen?

 

Ich danke euch schon im Vorraus

 

Beste Grüsse 

yudifudi

bearbeitet von yudifudi
Link zu diesem Kommentar

Dieser Artikel sollte dir weiter helfen: http://www.faq-o-matic.net/2004/07/28/ein-ad-attribut-zu-einem-logon-namen-herausfinden/

Und in diesem Artikel findest Du die LDAP-Feldnamen dazu: http://www.faq-o-matic.net/2002/09/21/active-directory-ldap-feldnamen/

 

EDIT: Wenn Du keinen vernüftigen Editor für VB-Scripte hast, kannst Du auch mit Hilfe des VBA-Editor aus Acccess, Word oder Excel heraus die Scripte aufbauen und testen. Dabei ist es immer wieder gut Funktionen mit F8 schrittweise zu durchlaufen.

bearbeitet von Sunny61
Link zu diesem Kommentar

Hallo zusammen

Besten dank erstmal für die Antworten. Ich habe nun die Aufgabe wie folgt gelöst:

 

Dim Echo,name,txt,Domain
Dim objNet, WshNetwork,WScript,oGroups, oGroup
 
Set objNet = CreateObject("WScript.Network")
 
Domain = objNet.UserDomain
name = objNet.UserName
 
Set oGroups = GetObject("WinNT://" & domain & "/" & name)
 
For Each oGroup In oGroups.Groups
HMIRuntime.Trace(oGroup.Name & vbCRLF)
If oGroup.Name = "sgx-AAccounts" Then
HMIRuntime.Trace("++sgx-AAccounts gefunden" & vbCRLF)
 
Else
HMIRuntime.Trace("--sgx-AAccounts nicht gefunden" & vbCRLF)
End If 
 
Next
 
Über oGroup gebe ich die Gruppen aus bei welcher der User dabei ist soweit das richtig ist. Und dann vergleiche ich halt die Namen. Und wenn der Eintrag gefunden wurde, kann dort ein Sprung gemacht werden. 
Ist der Code falsch? Weil wenn ich auf dieses FAQ-o-mat gehe sieht da die Programmierung ein wenig anders aus. Zudem habe ich eine Frage bezüglich LDAP. Benötige ich da noch irgend ein Treiber oder kann man da einfach los programmieren? Habe damit keine Erfahrung...  :-(
Link zu diesem Kommentar

Du bestehst also darauf, das AD zu fragen, obwohl alles, was Du wissen willst, bereits in Deinem (lokal vorhandenen) TGT vorhanden ist... Na denn... Mit solchen skriptinitiierten Aktionen wurde bei uns schon mehrfach die Authentifizierung in einer Verwaltungsdomäne lahmgelegt. Denial of Service nennt man das dann :)

 

LDAP ist ein Standardprovider in VBS, das mit dem GetObject funktioniert genauso : GetObject( "LDAP://" & strDistinguishedName ). Suchen geht über ADO mit LDAP- oder SQL-QUeries. Und dazu gibt es Tonnen von Ressourcen.

 

Fang mal bei selfadsi.de an...

 

mfg Martin

Link zu diesem Kommentar

Hallo daabm

Besten Dank für deine Antwort. Nun habe ich jedoch noch eine Frage dazu. Ich habe folgendes:

 

Set ou = GetObject("LDAP://dc1.example.com/ou=Fabrikation,dc=example,dc=com")

 

Was muss ich da bei LDAP://.... eintragen? Und eine Fabrikation habe ich auch nicht. Bekannt ist meine Domain local.zrh. Und wenn ich das richtig verstehe von dir daabm. Dann muss ich nur den Teil:

 

Set objNet = CreateObject("WScript.Network")

 

ersetzen mit Set objNet = GetObject("LDAP://dc1.example.com/ou=Fabrikation,dc=example,dc=com")?

 

Ich hoffe du kannst mir weiter helfen.

Beste Grüsse

yudi

Link zu diesem Kommentar

 

Set ou = GetObject("LDAP://dc1.example.com/ou=Fabrikation,dc=example,dc=com")

 

Was muss ich da bei LDAP://.... eintragen? Und eine Fabrikation habe ich auch nicht. Bekannt ist meine Domain local.zrh. Und wenn ich das richtig verstehe von dir daabm.

Wie heißt dein DC? DC1 oder MeinHauptDC? Anstatt DC1 trägst Du den DC ein den Du abfragen möchtest. Die OU=Fabrikation ist die OU in der Du nach dem Objekt suchst. Der Rest dürfte klar sein, oder? Und ein bisschen Eigeninitiative hat noch niemanden geschadet.

 

 

 

 

ersetzen mit Set objNet = GetObject("LDAP://dc1.example.com/ou=Fabrikation,dc=example,dc=com")?

Bei Frank Carius finden sich ein paar Beispiele wie man damit umgehen kann: http://www.msxfaq.de/code/adsi.htm

 

Und natürlich SelfADSI: http://www.selfadsi.de/bind.htm

 

Und bei Nils zu suchen hat auch noch nie geschadet:

http://www.faq-o-matic.net/2008/01/13/ldap-grundlagen-fuer-active-directory/

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...