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...
Problem: das net user schneidet die Gruppennamen nach 22 Zeichen ab. Ist bei den "Software-Applikation-..."-Gruppen recht witzlos.
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.
Irgendeine Idee, wie ich (ohne PowerShell) an die User-Gruppen-Mitgleidschaft komme?
Thanks /pp
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
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
Please also mark the comments that contributed to the solution of the article
Content-ID: 1148668936
Url: https://administrator.de/contentid/1148668936
Printed on: December 6, 2024 at 18:12 o'clock
8 Comments
Latest comment
Zitat von @PeterPanter:
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.
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
dsquery user -name "Max Muster" | dsget user -memberof
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
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!dsquery klappt in der Form nicht. Auf den AD-Servern eine feine Sache, aber die Workstations kennen das nicht...
Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online
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.AFAIK sind die RSAT-Tools ab 2018 in Win10 nur noch als Feature bei Bedarf drin. Check am Dienstag... Nochmals Danke!