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:
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.
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:
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;
Get-ADPrincipalGroupMembership username | select name
Cela vient d'une autre réponse, mais le script fonctionne par magie. :)
Ou ajoutez "nom de tri" à la liste par ordre alphabétique
Get-ADPrincipalGroupMembership username | select name | sort name
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