web-dev-qa-db-fra.com

Comment répertorier les membres du groupe AD pour les utilisateurs AD à l'aide de la liste de saisie?

Je suis un nouvel utilisateur de PS ... Je recherche de l'aide sur un script PowerShell pour obtenir la liste des groupes de sécurité dont l'utilisateur est membre.

Pour décrire ce dont j'ai besoin:

  • J'ai la liste d'entrée (fichier txt) avec de nombreux utilisateurs (samaccountnames). Chaque nom est sur une nouvelle ligne.
  • J'ai besoin du script pour rechercher ces noms dans AD - toute la forêt, pas un seul domaine
  • le résultat doit ressembler à "samaccountname" et à la liste des groupes dont ce compte est membre sur une ligne, afin que je puisse le trier dans Excel

C'est le script que j'ai:

$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 
}

mais cela me jette une erreur:

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

Quoi qu'il en soit, ce script ne parcourrait pas toute la forêt.

Exemple de liste d'entrées:

username1
username2
username3
username4... etc

Exemple de liste de sortie

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

Toute aide serait grandement appréciée.

9
Martin_K

First : Dans l'état actuel des choses, la variable $User ne possède pas de propriété .Users. Dans votre code, $User représente simplement une ligne (la ligne "courante" dans la boucle foreach) du fichier texte.

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

Deuxièmement , je ne pense pas que vous puissiez interroger une forêt entière avec une seule commande. Vous devrez le décomposer en morceaux plus petits:

  1. Forêt de requêtes pour la liste des domaines
  2. Appelez Get-ADUser pour chaque domaine (vous devrez peut-être spécifier d'autres informations d'identification via le paramètre -Credential

Troisièmement , pour obtenir la liste des groupes dont un utilisateur est membre:

$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

Quatrièmement : Pour obtenir le format de chaîne final souhaité, ajoutez simplement le $User.Name, un point-virgule et la chaîne $GroupMembership:

$User.SamAccountName + ';' + $GroupMembership;
12
Trevor Sullivan
Get-ADPrincipalGroupMembership username | select name

Cela vient d'une autre réponse, mais le script fonctionne par magie. :)

7
genius_monkey

Ou ajoutez "nom de tri" à la liste par ordre alphabétique

Get-ADPrincipalGroupMembership username | select name | sort name
1
nilz76

Le code ci-dessous renverra l’appartenance au groupe de noms d’utilisateur en utilisant le nom de compte Vous pouvez le modifier pour obtenir l'entrée d'un fichier ou modifier la requête pour obtenir des comptes avec des mots de passe non expirants, etc.

$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
}

Exemple de sortie:

 Administrateur Utilisateurs du domaine Administrateurs Administrateurs du schéma Administrateurs de l'entreprise Administrateurs du domaine Administrateurs du groupe de stratégie de groupe Propriétaires. Production 
 Utilisateurs de domaine expurgés CompanyUsers Production 
0
notforsale