@BenH et @TheMadTechnician ont été extrêmement utiles pour m'aider avec un script, pour supprimer les listes de distribution (uniquement) des utilisateurs dans des unités d'organisation spécifiques. J'ai oublié d'ajouter un critère nécessaire, donc décidé de publier cela comme une question distincte (thread d'origine here)Cibler tous les utilisateurs dans deux unités d'organisation et supprimer les listes de distribution - Ajouter des critères de date
@ approche de BenH était comme ceci:
$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'
$Users = ForEach ($OU in $OUs) {
Get-ADUser -Filter * -SearchBase $OU
}
ForEach ($User in $Users) {
Get-ADPrincipalGroupMembership -Identity $user |
Where-Object {$_.GroupCategory -eq 0} |
ForEach-Object {
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_
}
}
Ma question - puis-je forcer le script à ne prendre des mesures sur les comptes qui ont expiré il y a plus de 30 jours, en ajoutant une variable et « Where-Object » logique à la première boucle comme ceci ?:
$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'
$30DaysOld = (Get-Date).AddDays(-30)
$Users = ForEach ($OU in $OUs) {
Get-ADUser -Filter * -SearchBase $OU |
Where-Object {$_.AccountExpirationDate -gt $30DaysOld}}
ForEach ($User in $Users) {
Get-ADPrincipalGroupMembership -Identity $user |
Where-Object {$_.GroupCategory -eq 0} |
ForEach-Object {
Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_
}
}
possible? Ou aurais-je besoin de changer le -gt
en un -lt
afin d'obtenir la plage de dates correcte?
Merci de votre visite!
Votre question est "J'ai écrit ce code, est-ce que ça fonctionne"? Eh bien ... ça marche? Est-ce que cela vous donne les comptes que vous attendez? – TessellatingHeckler
Vous voudriez '-lt'. Voici une instruction de comparaison qui devrait illustrer: '(Get-Date) .AddDays (-30) -gt (Obtenir-Date) .AddDays (-40)' est '$ True'. Vous pouvez ajouter '-WhatIf' à votre' Remove-ADPrincipalGroupMembership' pour voir ce que la commande essayera d'exécuter. – BenH
@TessellatingHeckler - point solide, désolé je n'étais pas plus clair. Après examen, ma question n'a pas été très bien formulée. La première boucle ne collecte PAS les utilisateurs corrects; vérifier le contenu de la variable '$ Users', AccountExpirationDate a montré vide. J'ai changé la ligne pour: 'Get-ADUser -Filter * -Properties AccountExpirationDate -SearchBase $ OU' Maintenant, je vois la date d'expiration comme indiqué sur le compte AD, mais en utilisant' -lt' renvoie tous les utilisateurs, avec ou sans date d'expiration dans AD, et '-gt' ne renvoie aucun utilisateur. – 3Jake