blob 10 Geschrieben 24. November 2009 Melden Teilen Geschrieben 24. November 2009 Hallo, ich habe es geschafft, mittels VBS in einer Gruppe die Member in eine TXT auszulesen. Jetzt würde ich gerne ein kleines Script schreiben, wo bei Usern die Gruppenzugehörigkeit in ein TXT File schreibt, scheitere aber. Die Suche hat mir nicht geholfen. Script Center von MS auch nicht. Also ich will die vbs starten, dann soll eine input Box kommen in der ich den "displayname" eingebe. Anschließend soll der User in meiner definierten Domäne gesucht werden (ldap über ein Query?), bei Erfolg dann die Member of Liste in eine TXT Datei ausgegeben werden. Ich bitte um Hilfe, evtl. gibt es schon etwas das ich nur auf meine Wünsche anpassen muss. Was ich auf keinen Fall will, ist dass ich Dinge wie OU und Username angeben muss, da ich nicht auf Anhieb weiss in welcher OU sich der User befindet, dessen member of ich auslesen möchte. Danke im voraus! Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 24. November 2009 Melden Teilen Geschrieben 24. November 2009 Moin, du suchst vermutlich ANR. faq-o-matic.net Finden statt Stbern in AD: Ambiguous Name Resolution Eine entsprechende Suchfunktion per VBS habe ich z.B. hier implementiert, da kannst du abgucken: faq-o-matic.net AD-Adressen im Sekretariat bearbeiten lassen Gruß, Nils Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 25. November 2009 Autor Melden Teilen Geschrieben 25. November 2009 Super, danke NilsK, werde nacher mal versuchen was testweise zu bauen um zu sehen ob ich ANR verstanden/einsetzen kann. Nur wie lese ich dann von dem User die Einträge unter "Member of" aus? Z.b. wenn ich eine AD Gruppe als Objekt habe, lese ich die Members einfach mit einer Schleife aus: For Each user In obJGroup.Members ... Hier gibt es aber kein "Member of", oder? Zumindest hat es mal nicht funktioniert. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 25. November 2009 Melden Teilen Geschrieben 25. November 2009 Moin, naja, indem du halt das Feld "memberOf" ausliest ... Die Gruppe hat ein Feld "member", in dem ihre Mitglieder stehen. Jedes Objekt, das Mitglied sein kann (also User, Gruppen, Computer, ...), hat ein Feld "memberOf", in dem steht, welchen Gruppen es angehört. Dieses Feld wird im Moment der Abfrage berechnet. Gruß, Nils Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 25. November 2009 Autor Melden Teilen Geschrieben 25. November 2009 Okay, habe es hinbekommen, aber auf eine unschöne Variante. Ich kann jetzt von einem User die Gruppen, denen der User angehört, auslesen und in eine TXT Datei schreiben. Danke @NilsK, dein Script hat mir viel weitergeholfen. Hier mein Code (ich bitte um Verbesserungsvorschläge): strUsername = InputBox("Geben Sie den Usernamen (z.B. mustermann-dieter) ein.", "+++ User auslesen +++") Set objRoot = GetObject("LDAP://rootDSE") strDomainName = objRoot.Get("DefaultNamingContext") strSQL = "SELECT adspath FROM 'LDAP://" & strDomainName & "' WHERE SAMAccountName='" & strUsername & "'" Set objConnect = CreateObject("ADODB.Connection") objConnect.Provider = "ADsDSOObject" objConnect.Open "Active Directory Provider" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnect objCommand.CommandText = strSQL 'Query ausführen, User finden Set objRS = objCommand.Execute On Error Resume Next 'Unschön, aber es funktioniert. Evtl kann man das anderst schreiben? For Each objekt In objRS.Fields strUser = objekt.value Next On Error Goto 0 'Falls kein Wert vrohanden ist If strUser = "" Then MsgBox "User nicht gefunden! Das Script bricht nun ab." WScript.quit End If 'Die Suche war erfolgreich, ADSPath wird jetzt verwendet um User zu holen Set strfinalUser = GetObject("" & strUser & "") For Each strMember In strfinalUser.memberof strMember2 = InStr(strMember, ",") strMember3 = Left(strMember, strMember2 - 1) strMember4 = InStr(strMember3, "=") strMember5 = Mid(strMember3, strMember4 + 1, strMember2) strOutput = output & strMember5 & vbNewLine strLog = "C:\MemberOf-LOG.txt" Set objX = CreateObject("Scripting.FileSystemObject") Set objLog = objX.OpenTextFile(strLog,8,True,TristateUseDefault) objLog.Write strOutput objLog.Close Next MsgBox "Fertig!" WScript.quit Wie gesagt ich glaube das geht kürzer udn schöner, aber es funktioniert! =) Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 25. November 2009 Melden Teilen Geschrieben 25. November 2009 Moin, vielleicht solltest du erst mal erklären, was du überhaupt erreichen willst. Sonst reden wir hier nur aneinander vorbei. Gruß, Nils Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 26. November 2009 Autor Melden Teilen Geschrieben 26. November 2009 Ist doch ganz easy, wenn man das Script ausführt was ich gepostet habe, dann wird man aufgefordert einen Usernamen einzugeben. Dieser sollte natürlich im AD vorhanden sein. Dann wird der User ermittelt und die Einträge unter "Member Of" in eine TXT Datei geschrieben. Das Script funktioniert, aber ich habe das Gefühl das das nicht die ideale Lösung (siehe Code) sein kann. Daher meine Frage, was man verbessern/optimieren könnte. Denn mit meinem Script bin ich schon an die Grenze gestoßen: Was ist, wenn ich von den Gruppen, die ich unter "Member Of" auslese noch zustäzlich die dazugehörige eMail Adresse oder sontige AD Attribute ermitteln möchte? Dann müsste ich erneut einen großen Teil coden, was evtl. mit einem Zweizeiler erledigt wäre. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 26. November 2009 Melden Teilen Geschrieben 26. November 2009 Moin, du hast angegeben, was dein Skript macht. Ich weiß aber immer noch nicht, warum du das denn machen willst. Die zuletzt von dir gestellte Frage habe ich hier beantwortet: faq-o-matic.net Mitglieder einer AD-Gruppe mit Zusatzdaten ausgeben Gruß, Nils Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 26. November 2009 Autor Melden Teilen Geschrieben 26. November 2009 Warum ich die Gruppen von "Member of" eines bestimmten Users auslesen möchte? Ist das nicht egal? Aber bitte: Ich habe das Skript auf dem Desktop liegen und wenn ein User mit seinen Problemchen anruft, gebe ich so schnell seinen Benutzernamen ein und erhalte auf dem Desktop eine CSV Datei mit den Gruppen, die bei ihm unter "Member of" zu finden sind. Da viele Berechtigungen über Gruppen gesteuert werden, kann ich dort für mein Aufgabengebiet den Fehler schnell erkennen. Ansonsten muss ich mich erst auf den Server verbinden, AD U&C aufrufen, den User suchen, anklicken etc... also eine Arbeitserleichterung. Und wie gesagt es funktioniert jetzt, meine Frage ist nur an die Profis ob es an meinem Script Code etwas zu optimieren gäbe. Danke für den Link, stöber ich dann mal durch. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 26. November 2009 Melden Teilen Geschrieben 26. November 2009 Moin, zwanzig Jahre IT-Erfahrung sagen mir, dass es sinnvoll ist zu wissen, was denn das eigentliche Ziel ist. Sonst diskutiert man die Probleme einer Lösung und nicht die Lösung eines Problems. Deine Aufgabe könntest du z.B. ohne jedes Scripting mit der Eingabe von "net user USERNAME /domain" in einem CMD-Fenster lösen. Gruß, Nils 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.