none
Alle Rechner der AD abfragen ob ein bestimmter User in der lokalen Admin Gruppe ist RRS feed

  • Frage

  • Hallo,

    habt ihr eine Idee wie man das anstellen kann, das eine Abfrage über eine komplette AD läuft, welche die lokalen Gruppe der Administratoren der Clients nach einem bestimmeten User durchsucht ?

    Es handelt sich um ca. 900 Clients ^^

    Leider habe ich noch keine vernünftigen Ansatz :-(

    Wäre super wenn ihr mir helfen könntet.

    Gruß

    Uwe

    Freitag, 10. April 2015 08:05

Antworten

Alle Antworten

  • Am 10.04.2015 schrieb Geo_Uma:

    habt ihr eine Idee wie man das anstellen kann, das eine Abfrage über eine komplette AD läuft, welche die lokalen Gruppe der Administratoren der Clients nach einem bestimmeten User durchsucht ?

    Gegenfrage: Was möchtest Du damit erreichen? Soll der User in der
    Gruppe dann gelöscht werden?


    Servus
    Winfried

    Gruppenrichtlinien
    HowTos zum WSUS Package Publisher
    WSUS Package Publisher
    HowTos zum Local Update Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 10. April 2015 09:12
  • Hallo Winfried,

    im Grunde ja. Im ersten Schritt soll aber nur Festgestellt werden auf welchen Maschinen die Zugehörigkeit besteht.

    Gruß

    Uwe

    Freitag, 10. April 2015 09:39
  • Am 10.04.2015 schrieb Geo_Uma:

    im Grunde ja.

    Das löschen ist sehr einfach mit Hilfe von Group Policy Preferences zu
    erledigen. Sieh dir diesen Artikel an, das Beispiel sollte helfen:
    http://www.gruppenrichtlinien.de/artikel/verwaltung-der-lokalen-administratoren/

    Im ersten Schritt soll aber nur Festgestellt werden auf welchen Maschinen die Zugehörigkeit besteht.

    Hier ein bisschen Code, Du wirst sicherlich etwas anfangen können damit.

    Private Function blnUserInGroup() As Boolean
                    blnUserInGroup = False
    
                    Try
                            'blnUserInGroup = False, Benutzerobjekt ist nicht in der Gruppe der lokalen Administratoren oder Netzwerkkonfigurations-Operatoren vorhanden!
                            'Achtung! Keine Suche in evtl. vorhandenen Gruppen!
                            Dim deComputer As DirectoryEntry = GetComputerEntry(strComputername)
                            Dim strGruppen As String() = Split("Netzwerkkonfigurations-Operatoren;Administratoren", ";", -1, CompareMethod.Text)
                            Dim i As Integer = 0
                            For i = 0 To UBound(strGruppen)
                                    Dim deGroup As DirectoryEntry = GetGroupByName(deComputer, strGruppen(i))
                                    'Mitglieder der Gruppen auslesen.'
                                    Dim groupMembers As List(Of DirectoryEntry) = GetGroupMembers(deGroup)
                                    For Each Member As DirectoryEntry In groupMembers
                                            If Member.Name.ToString = strUsername Then
                                                    blnUserInGroup = True
                                                    deGroup.Dispose()
                                                    deComputer.Dispose()
                                                    Return blnUserInGroup
                                            End If
                                    Next
                            Next i
                    Catch ex As Exception
                            MsgBox(ex.Source & " blnUserInGroup " & ex.Message, MsgBoxStyle.Critical)
                    End Try
            End Function
            Public Function GetGroupMembers(ByVal deGroup As DirectoryEntry) As List(Of DirectoryEntry)
                    GetGroupMembers = Nothing
    
                    Dim EventLog1 As New System.Diagnostics.EventLog()
                    EventLog1.Source = "IPChanger"
    
                    Try
                            Dim members As IEnumerable = CType(deGroup.Invoke("members", Nothing), IEnumerable)
                            Dim r As New List(Of DirectoryEntry)()
    
                            For Each o As Object In members
                                    Dim deMember As DirectoryEntry = New DirectoryEntry(o)
                                    r.Add(deMember)
                            Next
                            Return r
    
                    Catch ex As Exception
                            If Not Diagnostics.EventLog.SourceExists("Meinprogramm") Then
                                    Diagnostics.EventLog.CreateEventSource("MeinProgramm", "Anwendung")
                            End If
                            EventLog1.WriteEvent(New EventInstance(1, 1), New String() {ex.Source & " GetGroupMembers " & ex.Message})
                    End Try
    
            End Function
            Public Function GetGroupByName(ByVal DE As DirectoryEntry, ByVal Groupname As String) As DirectoryEntry
                    GetGroupByName = Nothing
                    'get admin group info'
                    Dim EventLog1 As New System.Diagnostics.EventLog()
                    EventLog1.Source = "MeinProgramm"
    
                    Try
                            Dim deGroup As DirectoryEntry = DE.Children.Find(Groupname, "group")
                            Return deGroup
    
                    Catch ex As Exception
                            If Not Diagnostics.EventLog.SourceExists("MeinProgramm") Then
                                    Diagnostics.EventLog.CreateEventSource("MeinProgramm", "Anwendung")
                            End If
                            EventLog1.WriteEvent(New EventInstance(1, 1), New String() {ex.Source & " GetGroupByName " & ex.Message})
                    End Try
            End Function
            Public Function GetComputerEntry(ByVal Computername As String) As DirectoryEntry
                    GetComputerEntry = Nothing
                    'create directory entry connection to the remote machine'
                    Dim EventLog1 As New System.Diagnostics.EventLog()
                    EventLog1.Source = "IPChanger"
                    Try
                            Dim deComputer As New DirectoryEntry("WinNT://" + Computername + ",computer")
                            deComputer.RefreshCache()
                            Return deComputer
    
                    Catch ex As Exception
                            If Not Diagnostics.EventLog.SourceExists("MeinProgramm") Then
                                    Diagnostics.EventLog.CreateEventSource("Meinprogramm", "Anwendung")
                            End If
                            EventLog1.WriteEvent(New EventInstance(1, 1), New String() {ex.Source & " GetComputerEntry " & ex.Message})
                    End Try
            End Function

    Ist nicht ausschließlich von mir, dieses Forum hier hat mir auch
    geholfen das zum Laufen zu bekommen. ;)

    Ist der Benutzer in der Gruppe, kannst Du eine Textdatei auf einer
    Freigabe erstellen oder sonstwas machen. Verteilen kannst Du das
    Programm ebenfalls per GPP als geplante Aufgabe. Dann wird es
    regelmässig ausgeführt.


    Servus
    Winfried

    Gruppenrichtlinien
    HowTos zum WSUS Package Publisher
    WSUS Package Publisher
    HowTos zum Local Update Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 10. April 2015 10:16
  • Vielen Dank ich werde mir das mal in ruhe zu gemühte führen :-)

    Aber ich glaube das ist sogar schon eine Spur zuviel ^^Ich dachte das würde per WMI funktionieren um das Ergebniss eventuell zusätzlich in einer Listbox sichtbar zumache, wenn man einen Rechner explizit auswählt


    Freitag, 10. April 2015 10:32
  • Am 10.04.2015 schrieb Geo_Uma:

    Aber ich glaube das ist sogar schon eine Spur zuviel ^^Ich dachte das würde per WMI funktionieren um das Ergebniss eventuell zusätzlich in einer Listbox sichtbar zumache, wenn man einen Rechner explizit auswählt

    Du kannst natürlich auch jeden Computer abfragen, in meinem Code ging
    es ja nur um den lokal verwendeten. Die abgefragten Rechner dann mit
    dem Ergebnis der Überprüfung in einer Listbox anzeigen lassen.


    Servus
    Winfried

    Gruppenrichtlinien
    HowTos zum WSUS Package Publisher
    WSUS Package Publisher
    HowTos zum Local Update Publisher
    NNTP-Bridge für MS-Foren

    • Als Antwort markiert Geo_Uma Dienstag, 14. April 2015 08:03
    Freitag, 10. April 2015 11:49