yudifudi 0 Geschrieben 1. April 2014 Melden Teilen Geschrieben 1. April 2014 (bearbeitet) 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 1. April 2014 von yudifudi Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 1. April 2014 Melden Teilen Geschrieben 1. April 2014 (bearbeitet) 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 1. April 2014 von Sunny61 Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 1. April 2014 Melden Teilen Geschrieben 1. April 2014 Wenn es nur um den angemeldeten Benutzer geht: "whoami /groups | find /i 'DeinGruppenName'". In dem fall ist es ziemlicher Overkill, das Live-AD zu fragen, damit erzeugst Du nur (unerwünschte) Last auf den DCs... Wenn Dir Whoami zu trivial ist: Token Groups ist Dein Suchstichwort :-) Zitieren Link zu diesem Kommentar
yudifudi 0 Geschrieben 2. April 2014 Autor Melden Teilen Geschrieben 2. April 2014 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... :-( Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 2. April 2014 Melden Teilen Geschrieben 2. April 2014 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 Zitieren Link zu diesem Kommentar
yudifudi 0 Geschrieben 3. April 2014 Autor Melden Teilen Geschrieben 3. April 2014 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 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 3. April 2014 Melden Teilen Geschrieben 3. April 2014 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/ Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 3. April 2014 Melden Teilen Geschrieben 3. April 2014 Und natürlich SelfADSI: http://www.selfadsi.de/bind.htm Hatte ich ja auch drauf hingewiesen. Aber hier fehlen wohl noch ein paar Grundlagen zu VBS... Was ist WshNetwork, was ist GetObject... http://www.herongyang.com/VBScript/ Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.