scritch
Goto Top

Ausgabe von Powershell durcheinander

Hallo Leute. Ich wollte mir eine Auflistung aller AD-Gruppen meines Standortes und dessen Member ausgeben lassen. Leider ist die Ausgabe nicht wirklich sortiert, sprich, ich kann in dem Zustand nichts damit anfangen. Habe ich etwas verkehrt gemacht? Ich nutze diesen Befehl:

Get-ADGroup -Filter {name -like "standortfilter*"} | Get-ADGroupMember | Select Name

Ich bekomme eine Ausgabe mit den Mitarbeitern und den Gruppen, aber wie gesagt, es ist alles durcheinander und die Mitarbeiter nicht den Gruppen zugeordnet, wo sie eigentlich reing ehören.

Content-ID: 394272

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

Pjordorf
Pjordorf 30.11.2018 um 17:13:38 Uhr
Goto Top
Hallo,

Zitat von @scritch:
ich kann in dem Zustand nichts damit anfangen
Wie genau sollen wir uns dein Chaos genau vorstellen? Taiuchen dort Chinesische Schriftzeichen auf oder was? Entweder die Ausgabe hier (in Code Tags) reinstellen oder du nutzt Bilder.

die Mitarbeiter nicht den Gruppen zugeordnet, wo sie eigentlich reing ehören.
Dann mach mal eine Aufstellung für uns damit wir wiseen welcher Mitarbeiter in welche Gruppe gehört.

Gruß,
Peter
emeriks
emeriks 30.11.2018 aktualisiert um 17:38:21 Uhr
Goto Top
Hi,
eigentlich eine Frage der Logik.
Wenn Du nur
Get-ADGroupMember NameDeinerGruppe
ausführst, dann bekommst Du die einzelnen Mitglieder geliefert. Diese Information nützt Dir aber nur etwas im Zusammenhang mit dem Wissen, welche Gruppe Du abgefragt hast. Sonst ist sie wertlos.

Wenn Du jetzt mit
Get-ADGroup -Filter {name -like "standortfilter*"}  
viele Gruppen geliefert bekommst, und Du diese Ausgabe sofort mit
Get-ADGroup -Filter {name -like "standortfilter*"} | Get-ADGroupMember  
an Get-ADGroupMember weitergibst, dann bekommst Du am Stück viele Gruppenmitglieder geliefert, ohne zu wissen, welches Mitglied noch zu welcher abgefragten Gruppe gehört.
Also musst Du Dir den Namen der Gruppe zwischendurch merken und die Ausgabe von Get-ADGroupMember zusammen mit dem Gruppennamen verarbeiten. Das könnte z.B. so aussehen:
Get-ADGroup -Filter {name -like "standortfilter*"} | %{$GroupName = $_.Name;  Get-ADGroupMember $_ | %{Write-Host "$GroupName  $_.Name" }}  

Vielleicht geht es sogar noch einfacher.

E.
137846
137846 30.11.2018, aktualisiert am 05.12.2018 um 16:33:04 Uhr
Goto Top
AD User auslesen und in Datei mit Logo abspeichern
Usw.
Als Einzeiler
Get-ADGroup -Filter {name -like "standortfilter*"} -PipelineVariable Group | %{Get-ADGroupMember $_.SAMAccountName -Recursive | %{[pscustomobject]@{Gruppe=$group.Name;Member=$_.Name}}}  
Gruß A.
Daemmerung
Daemmerung 30.11.2018 um 21:04:53 Uhr
Goto Top
Vielleicht meinst du sowas hier. Ist übersichtlich und kannst du flexibel verwenden. Du kannst die Ausgabe auch als CSV-Datei exportieren.
$group_filter = "*Standard*";  
$groups = Get-ADGroup -filter { Name -LIKE $group_filter } | Sort-Object Name

$hash = @{};
$objects = @();

Foreach($group IN $groups)
{
	$group_name = $group.Name
	$group_dn = $group.DistinguishedName
	$group_members = Get-ADGroupMember -identity $group_dn | Sort-Object Name
	Foreach($member IN $group_members)
	{
		$member_dn = $member.DistinguishedName
		$member_name = $member.Name
		$hash = @{
			Group_Name=($group_name);
			Group_Member=($member_name);
			Group_Member_DN=($member_dn);
		}
		$objects += New-Object PSObject -properties $hash
	}
}

$objects | Sort-Object Group_Name
Da ich gerade nicht am Arbeitsplatz sitze, konnte ich es nicht testen, sollte aber soweit funktionieren. Du könntest höchstens einen Syntaxfehler bekommen, was ich aber nicht vermute. Melde dich, wenn es Probleme gibt.

Darfst du frei verwenden. face-smile

Grüße und viel Erfolg
agowa338
agowa338 01.12.2018 um 01:38:48 Uhr
Goto Top
`Group-Object ...` und `Sort-Object ...` hast du bereits versucht?

Und hier noch zwei gute Anleitungen zum Umgang mit PowerShell. Das wirst du in Zukunft vermutlich noch viel öfter brauchen^^

https://programminghistorian.org/en/lessons/intro-to-powershell
https://docs.microsoft.com/en-us/powershell/scripting/getting-started/ge ...
http://www.powershelltutorial.net/home/Introduction-to-Powershell

Außerdem würde ich dir empfehlen, gleich mit PowerShell Core/6 anzufangen. Es gab einige breaking changes zwischen 5.1 und 6. Außerdem erlaubt PowerShell Core mehrere installationen in verschiedenen Versionen, wodurch es nicht dazu kommt, dass du auf z. B. Exchange Servern nicht aktualisieren kannst ohne die Management Shell zu killen bzw. Out of support zu sein.
scritch
scritch 05.12.2018 um 16:25:33 Uhr
Goto Top
Hallo Leute. Entschuldigt die späte Rückmeldung und danke für eure Tipps.

@toniho: Das Script wirft leider nur Fehler aus. Der Inhalt ist nur zur Hälfte für mich nachvollziehbar. Könntest du je Zeile bitte kurze Kommentare
hinzufügen?

@emirks: Auch wenn du bereits etwas kommentiert hast, ist für mich nicht alles logisch aus deiner Codezeile. Sie macht im Prinzip das was sie soll, aber ich würde das auch gerne verstehen. Sie gibt mit den Namen der Benutzer auch noch einige andere Infos mit aus, das sollte bitte auch so unterbunden werden, damit nur der Name ausgegeben wird. Was muss ich dafür an dem Code ändern?
emeriks
emeriks 05.12.2018 um 16:32:13 Uhr
Goto Top
Zitat von @scritch:
Sie gibt mit den Namen der Benutzer auch noch einige andere Infos mit aus,
Nein, gibt sie nicht. Da hast Du falsch abgeschrieben.
Kann sein, dass es besser ist, am Ende "$_.Name" nochmal in Klammern zu setzen: "$($_.Name)"
Get-ADGroup -Filter {name -like "standortfilter*"} | %{$GroupName = $_.Name;  Get-ADGroupMember $_ | %{Write-Host "$GroupName  $($_.Name)" }}  
Daemmerung
Daemmerung 06.12.2018 um 19:15:01 Uhr
Goto Top
@toniho: Das Script wirft leider nur Fehler aus. Der Inhalt ist nur zur Hälfte für mich nachvollziehbar. Könntest du je Zeile bitte kurze Kommentare
Ich melde mich morgen bei dir und werde dir das Script nochmal Zeile für Zeile kommentieren.