peterpanter
Goto Top

AD-User Gruppenmitgliedschaft per CMD auslesen

Hallo,

ich möchte einigen Usern die Möglichkeit geben, selbst nachzusehen, in welchen AD-Gruppen sie oder Kollegen sind. CMD können/dürfen die User, PowerShell nicht...
c:\>net user /domain mustermannm
Problem: das net user schneidet die Gruppennamen nach 22 Zeichen ab. Ist bei den "Software-Applikation-..."-Gruppen recht witzlos.
Benutzername                        MUSTERMANNM
Vollständiger Name                  Max Mustermann
....
Lokale Gruppenmitgliedschaften      *Grp_O365_Lizenz-Prod-
                                    *Grp_EDV
				    *Benutzer-Lizenz-Grupp
                                    *Software-Applikation-
                                    *Software-Applikation-
                                    *Software-Applikation-
                                    *Software-Applikation-
...

Beim net localgroup sind auch die langen Gruppennamen vollständig. Erste Idee: Liste der AD-Gruppen erstellen und die Mitglieder auslesen. Klappt prinzipiell, ist aber recht aufwändig und langsam.
@echo off
setlocal enabledelayedexpansion
REM *** User-Gruppenliste löschen
if exist AD_Gruppen_USER_Liste.txt del AD_Gruppen_USER_Liste.txt
REM *** Gruppenliste erstellen
net localgroup /DOMAIN > AD_LocalGroup_Liste.txt
for /f "delims=" %%G in (AD_LocalGroup_Liste.txt) DO (  
    set "GroupName=%%G" '  
	echo !GroupName:~1! 
    net localgroup /DOMAIN !GroupName:~1! >> AD_Gruppen_USER_Liste.txt
    )
REM *** Überflüssige Zeilen aus User-Gruppenliste entfernen 
findstr /b /v /c:"Die Anforderung wird" /c:"Der Befehl wurde" /c:"Mitglieder" AD_Gruppen_USER_Liste.txt > temp.txt  
findstr ^.$ temp.txt > AD_Gruppen_USER_Liste.txt
del temp.txt

Irgendeine Idee, wie ich (ohne PowerShell) an die User-Gruppen-Mitgleidschaft komme?
Thanks /pp

Content-ID: 1148668936

Url: https://administrator.de/contentid/1148668936

Printed on: December 6, 2024 at 18:12 o'clock

DerWoWusste
DerWoWusste Aug 12, 2021 at 13:52:53 (UTC)
Goto Top
Hi.

whoami /groups
als User ausführen.
PeterPanter
PeterPanter Aug 13, 2021 at 04:44:03 (UTC)
Goto Top
Zitat von @DerWoWusste:
whoami /groups
als User ausführen.
Danke für den Tipp. Hatte ich schon probiert, klappt aber nur für den aktuelle angemeldeten User, der Abteilungsleiter z.B. kann für seine MA die Gruppenmitgliedschaft nicht nachgucken.
PeterPanter
PeterPanter Aug 13, 2021 at 04:51:24 (UTC)
Goto Top
Zitat von @Gwin235:
Open up a command promt (cmd.exe or PowerShell)
Run: gpresult /V.
Thanks, gpresult I didn't check right now. It seems to work for current user, but the department head can't check for other employees, as far as I see...
colinardo
Solution colinardo Aug 13, 2021 updated at 10:07:20 (UTC)
Goto Top
Zitat von @PeterPanter:

Zitat von @DerWoWusste:
whoami /groups
als User ausführen.
Danke für den Tipp. Hatte ich schon probiert, klappt aber nur für den aktuelle angemeldeten User, der Abteilungsleiter z.B. kann für seine MA die Gruppenmitgliedschaft nicht nachgucken.

Servus,
mittels SamAccountName gesucht (zur Info, das ist kein Powershell!)
dsquery user -samid MaxMuster | dsget user -memberof
oder mittels Name
dsquery user -name "Max Muster" | dsget user -memberof  
weitere details siehe dsquery user /?

Ansonsten habe ich auch noch was per VBS, etc. auf Lager.
Function FindAccount(strUserName)
	On Error Resume Next
	Dim adoCommand, adoConnection
	Dim varBaseDN, varFilter
	Dim objRootDSE, varDNSDomain, strQuery, adoRecordset

	Set adoCommand = CreateObject("ADODB.Command")  
	Set adoConnection = CreateObject("ADODB.Connection")  
	adoConnection.Provider = "ADsDSOObject"  
	adoConnection.Open "Active Directory Provider"  
	Set adoCommand.ActiveConnection = adoConnection
	
	' Search entire Active Directory domain.  
	Set objRootDSE = GetObject("LDAP://RootDSE")  
	
	varDNSDomain = objRootDSE.Get("defaultNamingContext")  
	varBaseDN = "<LDAP://" & varDNSDomain & ">"  
	
	' Filter for user objects.  
	varFilter = "(&(objectCategory=person)(objectClass=user)(SamAccountName=" & strUserName & "))"  
	
	' Construct the LDAP syntax query.  
	adoCommand.CommandText = varBaseDN & ";" & varFilter & ";ADSPath;Subtree"  
	adoCommand.Properties("Page Size") = 2  
	adoCommand.Properties("Timeout") = 20  
	adoCommand.Properties("Cache Results") = False  
	Set adoRecordset = adoCommand.Execute
	adoRecordset.MoveFirst

	If adoRecordset.RecordCount > 0 Then
		set FindAccount = GetObject(adoRecordset("ADSPath"))  
	else
		set FindAccount = Nothing
	End If
	
	adoRecordset.Close
	adoConnection.Close
End Function

dim strSAMID,user,strGroups,strMember,grp
strSAMID = InputBox("Bitte Usernamen eingeben:","Gruppenmitgliedschaften abfragen")  
set user = FindAccount(strSAMID)
If not user is nothing then
	For Each strMember in user.GetEx("memberof")  
		set grp = GetObject("LDAP://" & strMember)  
		strGroups = strGroups & grp.Get("Name") & vbNewline  
	Next
	Msgbox strGroups
Else
	Msgbox "User nicht gefunden!",vbExclamation  
End if

Grüße Uwe
PeterPanter
Solution PeterPanter Aug 13, 2021 updated at 12:14:05 (UTC)
Goto Top
Zitat von @colinardo:
...
Servus,
mittels SamAccountName gesucht (zur Info, das ist kein Powershell!)
dsquery user -samid MaxMuster | dsget user -memberof
oder mittels Name
dsquery user -name "Max Muster" | dsget user -memberof  
weitere details siehe dsquery user /?

dsquery klappt in der Form nicht. Auf den AD-Servern eine feine Sache, aber die Workstations kennen das nicht...
Was funktioniert, ist
rundll32 dsquery,OpenQueryWindow
Damit bekommt der User das AD-Suchfenster auf, kann dann nach einer Gruppe suchen und gucken, ob er drin ist. Umgekehrt nach einem User suchen geht auch, aber da sieht man in den User-Eigenschaften nicht die Gruppenzugehörigkeiten...

Ansonsten habe ich auch noch was per VBS, etc. auf Lager.
...
Super, vielen Dank! face-smile
Das VBS funktioniert genau wie gewünscht. Muss ich nur noch in unserem Application-Control (Ivanti) erlauben...

Grüße Uwe
Grüße zurück /pp
colinardo
colinardo Aug 13, 2021 updated at 14:37:56 (UTC)
Goto Top
Zitat von @PeterPanter:
dsquery klappt in der Form nicht. Auf den AD-Servern eine feine Sache, aber die Workstations kennen das nicht...
Das ist so nicht richtig. Das funktioniert problemlos auch auf einer Workstation, ist unter Windows 10 mit dabei, einfach nur das RSAT AD Feature aktivieren und schon gehts!
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online
PeterPanter
PeterPanter Aug 13, 2021 at 14:37:56 (UTC)
Goto Top
Zitat von @colinardo:

Zitat von @PeterPanter:
dsquery klappt in der Form nicht. Auf den AD-Servern eine feine Sache, aber die Workstations kennen das nicht...
Das funktioniert problemlos auch auf einer Workstation, ist unter Windows 10 mit dabei!

Hmmm, ok, Win10 probier ich nächste Woche nochmal. Habe auf einer virtuellen Win7 und Citrix-Terminal-Server2019-Session probiert, da ging's nicht. AFAIK sind die RSAT-Tools ab 2018 in Win10 nur noch als Feature bei Bedarf drin. Check am Dienstag... Nochmals Danke!
colinardo
colinardo Aug 13, 2021 updated at 14:40:05 (UTC)
Goto Top
Zitat von @PeterPanter:
AFAIK sind die RSAT-Tools ab 2018 in Win10 nur noch als Feature bei Bedarf drin. Check am Dienstag... Nochmals Danke!
Ja, das Feature muss nur aktiviert werden. Das meine ich , ist mit dabei man muss es nur für die entsprechende Workstation aktivieren.