Question
[RESOLU]double foreach
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 12 ans 9 mois #15173
par Philippe
Réponse de Philippe sur le sujet Re:double foreach
enleve le exit du if $user.samaccountsam....
sinon tu quit le script des la premiere exclusion
sinon tu quit le script des la premiere exclusion
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 12 ans 9 mois #15174
par Philippe
Réponse de Philippe sur le sujet Re:double foreach
enleve le exit du if $user.samaccountsam....
sinon tu quit le script des la premiere exclusion
6ratgus écrit:
De plus moi je travailler sur une version avec mes corrections. Faut que je fasse plus attention !!!!

[code:1]$ou1 = 0
$ignored1 = 0
$ignoredlist1 = 0
$user = 0
$ou1 = Get-ADUser -Filter * -SearchBase \"ou=1,ou=z-prototype,dc=domaine,dc=dom\" -properties samaccounttype
$ignored1 = Get-Content C:\script\ignored1.txt
foreach ($ignoredlist1 in $ignored1)
{
foreach ($user in $ou1)
{
$user.SamAccountName
$user.ObjectClass
$ignoredlist1
if ($user.samaccountname -like $ignoredlist1)
{
Write-Output \"L'utilisateur $('\"'+$user.samaccountname+'\"') fait parti de la liste d'exclusion, le mot de passe n'expire jamais\"
}
elseif ($user.ObjectClass -eq \"user\" -and $user.samaccounttype -eq \"805306368\"«»)
{
set-aduser $user.samaccountname -replace @{userAccountControl = 512; pwdLastSet = 0}
Write-Output \"L'utilisateur $('\"'+$user.samaccountname+'\"') devra changer de mot de passe\"
}
else {Write-Output \"wtf is this -> $('\"'+$user.samaccountname+'\"')\"}
}
}
[/code:1]
sinon tu quit le script des la premiere exclusion
6ratgus écrit:
du coup, ce n’était pas l’erreur(pas tres scientifique comme reponse !!)
De plus moi je travailler sur une version avec mes corrections. Faut que je fasse plus attention !!!!
[code:1]$ou1 = 0
$ignored1 = 0
$ignoredlist1 = 0
$user = 0
$ou1 = Get-ADUser -Filter * -SearchBase \"ou=1,ou=z-prototype,dc=domaine,dc=dom\" -properties samaccounttype
$ignored1 = Get-Content C:\script\ignored1.txt
foreach ($ignoredlist1 in $ignored1)
{
foreach ($user in $ou1)
{
$user.SamAccountName
$user.ObjectClass
$ignoredlist1
if ($user.samaccountname -like $ignoredlist1)
{
Write-Output \"L'utilisateur $('\"'+$user.samaccountname+'\"') fait parti de la liste d'exclusion, le mot de passe n'expire jamais\"
}
elseif ($user.ObjectClass -eq \"user\" -and $user.samaccounttype -eq \"805306368\"«»)
{
set-aduser $user.samaccountname -replace @{userAccountControl = 512; pwdLastSet = 0}
Write-Output \"L'utilisateur $('\"'+$user.samaccountname+'\"') devra changer de mot de passe\"
}
else {Write-Output \"wtf is this -> $('\"'+$user.samaccountname+'\"')\"}
}
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 12 ans 9 mois #15187
par Philippe
Réponse de Philippe sur le sujet Re:double foreach
MCH écrit:
apres relecture et vu le nombre d'utilisateur a gerer (colossal), ton script est bien mais pourrait etre mieux, principalement le test d'exclusion.
moi je modifierais tes boucles pour :
- premiere boucle scanner les utilisateurs de l'AD
- deuxieme boucle comparais les utilisateurs a la liste d'exclusion
- puis faire les actions des if (apres la deuxieme boucle mais dans la premiere)
ca t'eviterais d'affiché x fois les messages pour le meme utilisateur (x = nombre d'utilisateurs de l'ad multiplier par le nombre d'utilisateurs de la liste d'xclusion)
C'est donc un fichier texte avec les 'samaccountname' en colonne, un par ligne.
Bien entendu le vrai est colossal mais il est sur ce model.
apres relecture et vu le nombre d'utilisateur a gerer (colossal), ton script est bien mais pourrait etre mieux, principalement le test d'exclusion.
moi je modifierais tes boucles pour :
- premiere boucle scanner les utilisateurs de l'AD
- deuxieme boucle comparais les utilisateurs a la liste d'exclusion
- puis faire les actions des if (apres la deuxieme boucle mais dans la premiere)
ca t'eviterais d'affiché x fois les messages pour le meme utilisateur (x = nombre d'utilisateurs de l'ad multiplier par le nombre d'utilisateurs de la liste d'xclusion)
Connexion ou Créer un compte pour participer à la conversation.
- MCH
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 12 ans 7 mois #15388
par MCH
Réponse de MCH sur le sujet Re:double foreach
Bonjour,
Désolé pour cette réponse tardive, mais je tenais à apporter le script final.
Je n'ai pas réussi à trouver le pourquoi au fait que mon double 'foreach' ne fonctionne pas, alors j'ai répété mon bloc pour autant d'OU à traiter... Vraiment horrible et treeeeeeees long mais j'ai gagné du temps.
Quoi qu'il en soit encore merci pour l'aide !
[code:1]
$ou3 = Get-ADUser -Filter * -SearchBase \"ou=1,ou=z-prototype,dc=domaine,dc=dom\" -Properties samaccountname,samaccounttype,objectclass
$ignored = Get-Content -Path $bannedfilepath
foreach ($user3 in $ou3)
{
if ($ignored -contains $user3.samaccountname)
{
Write-Output \"L'utilisateur $('\"'+$user3.samaccountname+'\"') fait parti de la liste d'exclusion, le mot de passe n'expire jamais\"
}
elseif ($user3.ObjectClass -eq \"user\" -and $user3.samaccounttype -eq \"805306368\"«»)
{
Set-ADUser -Identity $user3.SamAccountName -PasswordNeverExpires $false -ChangePasswordAtLogon $true
Write-Output \"L'utilisateur $('\"'+$user3.samaccountname+'\"') devra changer de mot de passe\"
}
else {Write-Output \"wtf is this -> $('\"'+$user3.samaccountname+'\"')\"}
}
[/code:1]
Désolé pour cette réponse tardive, mais je tenais à apporter le script final.
Je n'ai pas réussi à trouver le pourquoi au fait que mon double 'foreach' ne fonctionne pas, alors j'ai répété mon bloc pour autant d'OU à traiter... Vraiment horrible et treeeeeeees long mais j'ai gagné du temps.
Quoi qu'il en soit encore merci pour l'aide !
[code:1]
$ou3 = Get-ADUser -Filter * -SearchBase \"ou=1,ou=z-prototype,dc=domaine,dc=dom\" -Properties samaccountname,samaccounttype,objectclass
$ignored = Get-Content -Path $bannedfilepath
foreach ($user3 in $ou3)
{
if ($ignored -contains $user3.samaccountname)
{
Write-Output \"L'utilisateur $('\"'+$user3.samaccountname+'\"') fait parti de la liste d'exclusion, le mot de passe n'expire jamais\"
}
elseif ($user3.ObjectClass -eq \"user\" -and $user3.samaccounttype -eq \"805306368\"«»)
{
Set-ADUser -Identity $user3.SamAccountName -PasswordNeverExpires $false -ChangePasswordAtLogon $true
Write-Output \"L'utilisateur $('\"'+$user3.samaccountname+'\"') devra changer de mot de passe\"
}
else {Write-Output \"wtf is this -> $('\"'+$user3.samaccountname+'\"')\"}
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [RESOLU]double foreach