Question [RESOLU]double foreach

Plus d'informations
il y a 12 ans 9 mois #15144 par MCH
[RESOLU]double foreach a été créé par MCH
Bonjour,

Je cherche a faire une double boucle 'foreach'.
Le but du script est de lire un fichier qui contient une liste de compte a ignorer dans le traitement du 'if'.

[code:1]
$ou1 = [ADSI]\"LDAP://ou=1,ou=z-prototype,dc=domaine,dc=dom\"
$ignored1 = Get-Content C:\scripts\ignored1.txt
$userlist = $ou1.Get_Children()

ForEach-Object ($ignoredlist -in $ignored1)
{
ForEach-Object ($user -in $userlist)
{
if ($user.samaccountname -eq $ignoredlist)
{
Write-Output \"Le mot de passe de l'utilisateur $user.name ne sera pas traite\"
}
elseif ($user.Class -eq \"user\" -and $user.samaccounttype -eq \"805306368\"«»)
{
$User.userAccountControl = 512
$User.SetInfo()
$User.pwdLastSet = 0
$User.SetInfo()
}
}
}
[/code:1]

Ce script se contente de s'afficher lorsque je l'execute.
Je ne vois pas ou est le probleme.
Merci d'avance pour votre aide !

Message édité par: MCH, à: 17/06/13 14:28<br><br>Message édité par: MCH, à: 26/07/13 09:16

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 9 mois #15148 par Philippe
Réponse de Philippe sur le sujet Re:double foreach
Bonjour MCH

sans vouloir etre desagreable, pourrait tu utilisé le mode code pour afficher tes scripts, et l'indentation serait aussi un plus pour la lecture (desolé de t'ennuyer avec ca)

n'aurait tu pas des messages erreur ?

ceci dis, peut tester ca chez toi
[code:1]$ou1 = [ADSI]\&quot;LDAP://ou=1,ou=z-prototype,dc=domaine,dc=dom\&quot;
$userlist = $ou1.Get_Children()
ForEach ($user in $userlist)
{
Write-Output \&quot;Le mot de passe de $($user.name) traite\&quot;
}[/code:1]

j'ai enlevé le - du in des forearch car il n'en faut pas.
et j'ai mis $user.name dans $() pour forcer la \&quot;resolution de nom\&quot;
de plus foreach-object ne fonctionne pas alors que sont alias foreach pas de probleme ?!!!
si quelqu'un sait pourquoi .....

dis nous ce que donne les quelques ligne ci-dessus<br><br>Message édité par: 6ratgus, à: 17/06/13 14:11

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 9 mois #15150 par MCH
Réponse de MCH sur le sujet Re:double foreach
Bonjour,

Tout d'abord merci pour ta reponse.
Je viens d'editer mon post pour plus de clarete.
A ma grande stupeur, avec l'usage de la fonction \&quot;foreach\&quot; et non \&quot;ForEach-Object\&quot; ca fonctionne o_O ?!
Je ne comprends pas pourquoi mais qu'importe, j'avance !
A present, j'obtiens ceci apres affichage des resultats a l'aide du script suivant :

[code:1]
$ou1 = [ADSI]\&quot;LDAP://ou=1,ou=z-prototype,dc=domaine,dc=dom\&quot;
$ignored1 = Get-Content C:\scripts\ignored1.txt
$userlist1 = $ou1.Get_Children()

foreach ($ignoredlist in $ignored1)
{
Write-Output \&quot;compte a ignorer en traitement $ignoredlist\&quot;
foreach ($user in $userlist)
{
Write-Output \&quot;compte utilisateur en traitement $user\&quot;
if ($user.samaccountname -eq $ignoredlist)
{
Write-Output \&quot;Le mot de passe de l'utilisateur $user.name ne sera pas traite\&quot;
}
elseif ($user.Class -eq \&quot;user\&quot; -and $user.samaccounttype -eq \&quot;805306368\&quot;«»)
{
$User.userAccountControl = 512
$User.SetInfo()
$User.pwdLastSet = 0
$User.SetInfo()
}
}
}
[/code:1]

Resultat :

compte a ignorer en traitement proto3
compte utilisateur en traitement System.DirectoryServices.DirectoryEntry
compte utilisateur en traitement System.DirectoryServices.DirectoryEntry
compte utilisateur en traitement System.DirectoryServices.DirectoryEntry
compte utilisateur en traitement System.DirectoryServices.DirectoryEntry

<br><br>Message édité par: MCH, à: 17/06/13 14:39

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 9 mois #15151 par Philippe
Réponse de Philippe sur le sujet Re:double foreach
ca avance bien
donc il te reste la derniere modif indiquer !!

et j'ai mis $user.name dans $() pour forcer la \&quot;resolution de nom\&quot;


ca force a powershell de convertir la variable en chaine avant de traiter toute la chaine de caracteres

soit[code:1]Write-Output \&quot;Le mot de passe de l'utilisateur $user.name ne sera pas traite\&quot;
[/code:1]<br><br>Message édité par: 6ratgus, à: 17/06/13 16:04

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 9 mois #15154 par MCH
Réponse de MCH sur le sujet Re:double foreach
Ca progresse mais maintenant j'ai l'impression que les deux boucles 'foreach' ne sont pas \&quot;synchrones\&quot;.
Voici le script actuel :

[code:1]
$ou1 = 0
$ignored1 = 0
$ignoredlist1 = 0
$user = 0
# $ou1 = [ADSI]\&quot;LDAP://ou=1,ou=z-prototype,dc=domaine,dc=dom\&quot;
$ou1 = Get-ADUser -Filter * -SearchBase \&quot;ou=1,ou=z-prototype,dc=domaine,dc=dom\&quot;
$ignored1 = Get-Content C:\scripts\ignored1.txt
# $userlist1 = $ou1.Get_Children()
foreach ($ignoredlist1 in $ignored1)
{
foreach ($user in $ou1)
{
$user.SamAccountName
$user.ObjectClass
$ignoredlist1
if ($user.samaccountname -like $ignoredlist1)
{
Write-Output \&quot;L'utilisateur $('\&quot;'+$user.samaccountname+'\&quot;') fait parti de la liste d'exclusion, le mot de passe n'expire jamais\&quot;
exit
}
elseif ($user.ObjectClass -eq \&quot;user\&quot; -and $user.samaccounttype -eq \&quot;805306368\&quot;«»)
{
$User.userAccountControl = 512
$User.SetInfo()
$User.pwdLastSet = 0
$User.SetInfo()
Write-Output \&quot;L'utilisateur $('\&quot;'+$user.samaccountname+'\&quot;') devra changer de mot de passe\&quot;
}
else {Write-Output \&quot;wtf is this -&gt; $('\&quot;'+$user.samaccountname+'\&quot;')\&quot;}
}
}
[/code:1]

Le resultat :

proto3
user
proto
wtf is this -&gt; \&quot;proto3\&quot;
proto4
user
proto
wtf is this -&gt; \&quot;proto4\&quot;
proto
user
proto
L'utilisateur \&quot;proto\&quot; fait parti de la liste d'exclusion, le mot de passe n'expire jamais


Je precise que ces 3 utilisateurs sont bien dans l'OU et qu'ils sont tous dans le fichier \&quot;ignored1.txt\&quot;.
J'ai aussi ajoute des comptes qui n'existent pas pour verifier si il lit bien tout le fichier.
Je ne comprends pas le resultat car je devrais tous les voir comme \&quot;L'utilisateur \&quot;proto\&quot; fait parti de la liste d'exclusion, le mot de passe n'expire jamais\&quot;.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 9 mois #15157 par Philippe
Réponse de Philippe sur le sujet Re:double foreach
le script fait bien ce que tu lui demande ... B)

rajoute

-Properties sAMAccountType

a ta ligne get-aduser

et retest

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.048 secondes
Propulsé par Kunena