2014-01-20 11 views
8

Ich bin ziemlich neu PS-Benutzer ... Auf der Suche nach Unterstützung mit einem Powershell-Skript, um eine Liste der Sicherheitsgruppen zu erhalten, der Benutzer angehört.Wie listet die AD-Gruppenmitgliedschaft für AD-Benutzer die Eingabeliste auf?

Um zu beschreiben, was ich brauche:

  • Ich habe Eingabeliste (txt-Datei) mit vielen Benutzern (samaccountnames). Jeder Name steht in einer neuen Zeile.
  • Ich brauche das Skript diese Namen in AD suchen - ganzen Wald, nicht nur eine einzelne Domain
  • Ausgabe wie „samaccountname“ und die Liste der Gruppen dieses Konto Mitglied es in einer Zeile, also kann ich aussehen soll sortieren in Excel

Dies ist das Skript ich habe:

$users = Get-Content C:\users.txt 

ForEach ($User in $users) { 
    $getmembership = Get-ADUser $User.Users -Properties MemberOf | Select -ExpandProperty memberof 
    $getmembership | Out-File -Append c:\membership.txt 
} 

aber es wirft mir einen Fehler:

Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null. Supply a non-null argument and try the command again. 
At line:4 char:28 
+ $getmembership = Get-ADUser <<<< $User.Users -Properties MemberOf | Select -ExpandProperty memberof 
    + CategoryInfo   : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser 

Wie auch immer, dieses Skript würde nicht den gesamten Wald durchsuchen.

Probeneingabeliste:

username1 
username2 
username3 
username4... etc 

Musterausgabeliste

username1;group1;group2;group3 
username2;group1;group2;group3;group4... etc or something similar 

Jede Hilfe wäre sehr dankbar.

Antwort

11

Zuerst: Wie es derzeit steht, hat die $User Variable keine .Users Eigenschaft. In Ihrem Code repräsentiert $User einfach eine Zeile (die "aktuelle" Zeile in der foreach-Schleife) aus der Textdatei.

$getmembership = Get-ADUser $User -Properties MemberOf | Select -ExpandProperty memberof 

Zweitens, ich glaube nicht, dass Sie einen ganzen Wald mit einem Befehl abfragen. Sie werden es brechen in kleinere Stücke nach unten:

  1. Abfrage Wald Liste von Domains
  2. Anruf Get-ADUser für jede Domäne (Sie müssen alternative Anmeldeinformationen über den -Credential Parameter

angeben Drittens, eine Liste der Gruppen zu erhalten, die ein Benutzer ein Mitglied von:

$User = Get-ADUser -Identity trevor -Properties *; 
$GroupMembership = ($user.memberof | % { (Get-ADGroup $_).Name; }) -join ';'; 

# Result: 
Orchestrator Users Group;ConfigMgr Administrators;Service Manager Admins;Domain Admins;Schema Admins 

viertens: Um die endgültige, gewünschte String-Format zu erhalten, fügen Sie einfach den $User.Name, ein Semikolon, und die $GroupMembership aneinanderzureihen:

$User.SamAccountName + ';' + $GroupMembership; 
+1

Vielen Dank, das war hilfreich :) –

+0

Guter Deal! Schön, dass Sie es hilfreich fanden. Könnten Sie die Antwort als angemessen markieren? –

6
Get-ADPrincipalGroupMembership username | select name 

Verstanden von einer anderen Antwort, aber das Skript arbeitet Magie.:)

1

Oder fügen "sort Name"

Get-ADPrincipalGroupMembership username | select name | sort name 
+2

Was ist "das obige"? http://StackOverflow.com/Help/how-to-answer – freshbm

+0

Ich mag das, aber ich kann es nicht zum Laufen bringen, wenn ich -ExpandProperty verwende –

0

Der Code unten alphabetisch auflistet Benutzergruppenmitgliedschaft mit der samaccountname zurückzukehren. Sie können es ändern Eingabe aus einer Datei zu erhalten oder die Abfrage ändern Konten mit nicht ablaufende Passwörter usw.

$location = "c:\temp\Peace2.txt" 
$users = (get-aduser -filter *).samaccountname 
$le = $users.length 
for($i = 0; $i -lt $le; $i++){ 
    $output = (get-aduser $users[$i] | Get-ADPrincipalGroupMembership).name 
    $users[$i] + " " + $output 
    $z = $users[$i] + " " + $output 
    add-content $location $z 
} 

Beispielausgabe zu erhalten:

 
Administrator Domain Users Administrators Schema Admins Enterprise Admins Domain Admins Group Policy Creator Owners 
Guest Domain Guests Guests 
krbtgt Domain Users Denied RODC Password Replication Group 
Redacted Domain Users CompanyUsers Production 
Redacted Domain Users CompanyUsers Production 
Redacted Domain Users CompanyUsers Production 
-2

Alles in einer Zeile:

get-aduser -filter * -Properties memberof | select name, @{ l="GroupMembership"; e={$_.memberof -join ";" } } | export-csv membership.csv 
Verwandte Themen