ooalbert
Goto Top

Active Directory - OU mit den Sicherheitsgruppen und Mitgliedern Exportieren

Hallo,

ich hab hier eine 2008-Domäne und möchte ganz gern alle Sicherheitsgruppen einer bestimmten OU und deren Mitglieder exportieren um es am besten in Excel weiter zu verarbeiten. Aus dem Ad selbst heraus scheint das wohl nicht zu gehen.

Wie würde man das am besten machen?

Grüße

Content-Key: 159396

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: BigWim
BigWim 25.01.2011, aktualisiert am 18.10.2012 um 18:45:37 Uhr
Goto Top
Moin ooAlbert,

vielleicht funktioniert es ja noch wie unter Windows 2003.

Markus
Mitglied: ooAlbert
ooAlbert 26.01.2011 um 10:18:44 Uhr
Goto Top
Ich hab mal das Skript ausprobiert da kommt auch was raus aber nicht das was ich wollte face-smile

Dann hab ich durch zufall "Jose 3.0 RTW" gefunden das soll das auch können nur komfortabler. Das scheint aber nicht richtig zu funktionieren, da ich ich dort zwar aller hand einstellen kann aber wenn ich eine bestimmte OU angebe erscheint halt nix.
Mitglied: BigWim
BigWim 26.01.2011 um 10:38:40 Uhr
Goto Top
Zitat von @ooAlbert:
Ich hab mal das Skript ausprobiert da kommt auch was raus aber nicht das was ich wollte face-smile

Weil da eine Fehlermeldung erscheint? Oder ist das Ergebnis verfälscht? Oder funktionieren die Befehlszeilen so nicht mehr?

Markus
Mitglied: ooAlbert
ooAlbert 26.01.2011 um 11:39:21 Uhr
Goto Top
Das Skript läuft zwar aber es werden keine OUs ausgegeben und damit auch nur ein kleiner Teil des ADs, wobei ich eh nur eine ganz bestimmte OU und deren Gruppen/MItglieder bräuchte. Wo würde man denn da überhaupt eine OU angeben, so kalr ist mir das nicht mit den Variablen face-smile

Ich hab mal das Konsolenlog durchgescrollt und es kam folgendes:
dsget Fehler: Für den Verzeichnisdienst wurde keine Übergeordnete Referenz konfiguriert. Der Verzeichnisdienst kann deshalb keine Verweise auf Objekte außerhalb der Gesamtstruktur ausgeben.
Mitglied: BigWim
BigWim 26.01.2011 um 11:53:59 Uhr
Goto Top
Das Script sorgt einfach '"nur" für ein "schöneren" Aufbau der Logdatei. Ich kann mir nicht vorstellen, dass das unter W2K8 nicht mehr funktionieren soll.

Dann probier doch noch einmal folgendes:

In die DOS-Box kopierst Du folgende Zeile (OU-Angabe entsprechend anpassen!)

dsquery group ou=sicherheitseinstellungen,ou=benutzergruppen,....
Das liefert Dir alle Gruppen in einer OU

Und die Mitglieder aller OU's werden so ermittelt
dsquery group ou=sicherheitseinstellungen,ou=benutzergruppen,....  | dsget group -members

Das ganze für die Weiterverarbeitung in Excel in eine Datei umleiten ein
dsquery group ou=sicherheitseinstellungen,ou=benutzergruppen,....  | dsget group -members >MeineLogdatei.csv

Ich hoffe, jetzt sind die richtigen Ansätze dabei, ansonsten muß ich mangels W2K8-Server / -domäne passen ...

Markus
Mitglied: ooAlbert
ooAlbert 26.01.2011 um 12:24:33 Uhr
Goto Top
Hm, es kommt die selbe Fehlermeldung, nur wüsste ich nicht was die Fehlermeldung genau bedeutet, bzw. auf was die einen hinweisen soll.
Mitglied: BigWim
BigWim 26.01.2011 um 13:10:46 Uhr
Goto Top
Und Du bist Dir sicher, dass es nicht doch an der Schreibweise liegt?

Poste doch mal Deine Eingabe.

Markus
Mitglied: ooAlbert
ooAlbert 26.01.2011 um 13:19:32 Uhr
Goto Top
Also ich öfnne die Konsole als Administrator auf dem DC und tippe folgendes:

dsquery group "ou=sharepoint groups"

Dann kommt sofort die beschreibene Fehlermeldung.
Mitglied: BigWim
BigWim 26.01.2011 um 14:08:11 Uhr
Goto Top
Ach nee, das ist bestimmt zu wenig. Die OU-Angabe ist, sagen wir vereinfacht, vollqualifiziert ähnlich einer Pfadangabe.

Wenn ich die hosts editieren will, muß ich ja auch den vollen Pfad angeben bzw. dahinhüpfen (notepad c:\WINDOWS\system32\drivers\etc\hosts)

Entweder Du suchst Dir mit dem MS-Tool "Active Directory Benutzer und Computer" den Pfad oder Du gibst in der Konsole folgendes ein:

dsquery group domainroot -name "<Name einer Gruppe>"  

Als Ausgabe bekommst Du den Pfad (einige OU's und (evtl. einige) DC). Den mußt Du natürlich genauso verwenden.

Markus


Bei mir kommt z. B. so etwas heraus
"CN=<Name der Gruppe>,OU=Terminalserver,OU=Ressourcen,OU=Gruppen,DC=dpk1,DC=intern"
Mitglied: ooAlbert
ooAlbert 26.01.2011 um 16:13:47 Uhr
Goto Top
Ich hab nochmal rumprobiert und es kam jetzt was:

dsquery ou domainroot -name share*

Das brachte mir eine Zeile die ich dann mit:

dsquery group ou=sicherheitseinstellungen,ou=benutzergruppen,.... | dsget group -members >MeineLogdatei.csv

kombiniert habe. Irgendwie ist wohl das Limit 100 Einträge meinte die Konsole. Wobei ich mir jetzt nicht ganz sicher bin ob nun auch die Mitglieder der Gruppen aufgelistetw erden, ich seh aber zumindestens die Gruppennamen, das ging vorher ja überhaupt nicht.

Edit:
Ich glaube das Pipe Zeichen wird nicht korrekt verwertet. Ich bekomme jetzt die Nutzer, das müsste auch stimmen aber die Gruppen namen fehlen. Deshalb sah das o eigenartig aus, wobei immer Freizeilen entstehen wenn wohl eine Gruppe fertig ist.
Mitglied: BigWim
BigWim 27.01.2011 um 10:06:13 Uhr
Goto Top
Moin,

Irgendwie ist wohl das Limit 100 Einträge meinte die Konsole.
Die Konsolenbefehle habe viele interessante Parameter, die Du Dir mit dsquery group /? bzw mit dsget group /? .
Und einer davon ist -limit 0 face-wink

Ich glaube das Pipe Zeichen wird nicht korrekt verwertet. Ich bekomme jetzt die Nutzer, das müsste auch stimmen aber die
Gruppen namen fehlen. Deshalb sah das o eigenartig aus, wobei immer Freizeilen entstehen wenn wohl eine Gruppe fertig ist.
Genau dafür baut man sich ein kleines Script, um dieses beide getrennten Informationen zusammenzuführen ...

Markus
Mitglied: BigWim
BigWim 27.01.2011 um 10:17:34 Uhr
Goto Top
Habe das Script entsprechend angepaßt - heißt, einfach die Bedingungen gedreht.

Du mußt nur in Zeile 3 die richtige OU eintragen!


@echo off & setlocal

Set MyOU="OU=Sicherheitseinstellungen,OU=Benutzergruppen,..."  
Set Logfile=%~n0.log

echo *** >%Logfile%
echo *** START am %date% um %time% >>%Logfile%
echo *** >>%Logfile%
echo. >>%Logfile%
echo. >>%Logfile%

:GetGruppe
for /f %%a in ('dsquery group %MyOU%') do call :GetUser %%a  


echo *** >>%Logfile%
echo *** ENDE am %date% um %time% >>%Logfile%
echo *** >>%Logfile%
echo. >>%Logfile%
echo. >>%Logfile%
goto :eof

:GetUser
Set Gruppe=%1
echo Bin bei Gruppe %Gruppe%
echo # Gruppe %Gruppe% hat diese Mitglieder:  >>%Logfile%
dsget group %Gruppe% -members >>%Logfile%
goto :eof

Markus


Edit:
hatte den Parameter Limit vergessen

for /f %%a in ('dsquery group %MyOU% -limit 0') do call :GetUser %%a  
Mitglied: ooAlbert
ooAlbert 27.01.2011 um 10:48:23 Uhr
Goto Top
Hi,

ich habs direkt ausprobiert aber ich bekomme in der Konsole folgenden Fehler angezeigt:

dsquery Fehler:Eine Referenzauswertung wurde vom Server zurückgesendet.

Wobei ich das ganze schon mit erhöhten Rechten ausführe, also mehr ginge dann nicht mehr. Durch den Fehler steht dann auch nichts in der Log Datei.
Mitglied: BigWim
BigWim 27.01.2011 um 11:29:13 Uhr
Goto Top
Moin,

Wobei ich das ganze schon mit erhöhten Rechten ausführe
m. E. nicht notwendig, da "nur" ein lesender Zugriff erfolgt.

Und da es ja grundsätzlich (lt. Konsole) funktioniert, tippe ich auf einen Schreibfehler - vermutlich bei der OU-Angabe ?!

Poste bitte mal Deinen Anpassungen

Markus
Mitglied: ooAlbert
ooAlbert 27.01.2011 um 13:27:28 Uhr
Goto Top
Vielleicht blicke ich ja auch die Struktur nicht richtig face-smile

Also der Pfad sieht so aus:

Domaine.net > Domain_Groups > SharePoint Groups

Set MyOU="OU=Sharepoint Groups,OU=Domain_Groups,dc=Domain,DC=net"

Dann rattert der auch los und zeigt in der Konsole was an aber wirft gleichzeitig bei jeder Ausgabe wieder die Meldung mit der
"Übergeordneten Referenz" :/

Ich hab auch mal bisschen mit der Powershell probiert aber das war auch nur teilweise erfolgreich:

Get-ADObject -filter {name -like "sp*"} -SearchBase "ou=Domain_groups,dc=Domain,dc=net"

Das Zeigt mir alle Gruppen an die mit SP anfangen die Nutzer natürlich nicht, dafür gibts vermutlich auch was seperates.

Ich hab auch nochmal das hier Probiert:
dsquery group "OU=Sharepoint Groups,OU=Domain_Groups,dc=Domain,DC=net" -limit 0 | dsget group -members -expand > log3.txt

Das Bringt mir alle Gruppen und alle Nutzer aber anstatt pro Gruppe die Personen anzuzeigen habe ich dann Gruppen die ähnlich heißen aufgezählt und dann alle PErsonen der aufgezählten Gruppen untereinander. Ich weiß jetzt nicht ob es ein Problem ist, das es unter den "SharePoint_Groups" noch weitere OUs gibt in denen dann die Gruppen zu finden sind.
Mitglied: BigWim
BigWim 27.01.2011 um 14:05:08 Uhr
Goto Top
Dann probier doch bitte noch einmal das. Statt der drei Fragezeichen trägst Du nach CN= den Namen einer beliebigen Sicherheitsgruppe ein.

dsget group "CN=???,OU=Sharepoint Groups,OU=Domain_Groups,dc=Domain,DC=net" -members  
Jetzt sollten die Mitglieder der Gruppe aufgelistet werden.


dsquery group "OU=Sharepoint Groups,OU=Domain_Groups,dc=Domain,DC=net"  
Jetzt sollten alle Gruppen der OU aufgelistet werden.


Wenn beides funktioniert, muß es irgendwo noch an der Schreibweise liegen. Aber Helfen kann ich dann nicht mehr - mangels Plattform ....

Markus
Mitglied: ooAlbert
ooAlbert 27.01.2011 um 15:52:29 Uhr
Goto Top
Ich hab jetzt folgendes gemacht:

dsget group "cn=Gruppen_name,ou=Webseiten,ou=sharepoint groups,ou=Domain_groups,dc=Domain,dc=net" -members -expand

Jetzt habe ich auch eine die Mitglieder der Gruppe ohne das eine Fehler auftrat. Jetzt frag ich mich natürlich wieso das mit der anderen Methode nicht geht, da es ja eigentlich blödsinn ist jedes mal alle OUs anzugeben bis zu einer Gruppe. Ich möchte ja eine Liste aller Gruppen mit den Mitgliedern aus der OU Sharepoint Groups.
Mitglied: BigWim
BigWim 27.01.2011 um 16:28:40 Uhr
Goto Top
Jetzt frag ich mich natürlich wieso das mit der anderen Methode nicht geht
Wenn die zwei obigen Beispiele in der Konsole die Ausgaben bringen, kann ich es Dir nicht erklären

Ich möchte ja eine Liste aller Gruppen mit den Mitgliedern aus der OU Sharepoint Groups.
Das macht ja das Script für Dich.

dsget group "cn=Gruppen_name,ou=Webseiten,ou=sharepoint groups,ou=Domain_groups,dc=Domain,dc=net" -members -expand
Vom Prinzip mußt Du so jede einzelne Gruppe manuell in eine Datei umleiten, um Deine Informationen zu bekommen

Mit dem dsquery group und der Pipe (|) benutzt Du die Ausgabe von dsquery group als Eingabe für dsget group. Hat aber den Nachteil, dass der Gruppenname nicht gesondert ausgeworfen wird.

Das Script "simuliert" nur die jeweils manuelle einzelne Angabe von dsget Group. Dafür ist aber genaue Einstiegspunkt der Gruppe (CN=...,OU=....) notwendig.

Markus
Mitglied: ooAlbert
ooAlbert 27.01.2011 um 17:04:46 Uhr
Goto Top
Ich nochmal ich hab jetzt eine Lösung, das es irgendwie so Kompliziert ist hätte ich nicht gedacht aber seis drum:

$gruppe = dsquery group "ou=sharepoint groups,ou=Domain_groups,dc=Domain,dc=net" -name sp* -limit 0

foreach ($element in $gruppe)
{
Echo GRUPPE $element! >>log.txt
dsget group $element -members -expand >>log.txt
}

Als erstes suche ich nach allen Gruppen die mit SP anfangen, das speicher ich dann in eine Variable, die ich danach über die ForEach Schleiche Positionsweise abrufe und an dsget weitergebe, das mir dann die Mitglieder zu den Gruppen ausgibt.

Das einzige was irgendwie nicht klappt ist, das mir der aktuelle von der variable Element mit an die Textdatei ausgegeben wird und das ich irgendwie die überflüssigen Informationen wegblenden lasse, da ich eigentlich nur die Namen der Mitglieder brauche.

Aber immerhin 425 Gruppen ;)
Mitglied: BigWim
BigWim 27.01.2011 um 17:14:34 Uhr
Goto Top
Ich vermute, dass scheitert an der Unerfahrenheit in Sachen Batch. Denn das Script macht nichts anderes als Deine Lösung. Ich habe auch noch die Erfahrung, die richtigen Fragen zu stellen bzw. zu vermuten, woran es letztendlich scheitert.

Aber bekanntlich führen viele Wege nach Rom face-wink

Viel Erfolg
Markus

NS: Dann setz noch den Beitrag auf erledigt.