Question
[Résolu] Problème d’incrémentation de variables
- Pascal
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 0
il y a 8 ans 6 mois #24280
par Pascal
[Résolu] Problème d’incrémentation de variables a été créé par Pascal
Bonjour à tous (et oui, encore moi désolé
)
Je bloque sur un sript de ma création (surement optimisable mais c'est pas le sujet
)
Le but de ce script est de trouver quels groupes de distribution ne contiennent que des utilisateurs inactifs
Voici le déroulé
1 → Lister les groupes de distributions
2 → Compter le nombres d'utilisateurs par groupe
3 → Compter les nombres d'utilisateurs actifs et inactifs
4 → Fichier de sortie le groupe X contient Y utilisateurs dont Z actifs et Z' inactifs
Pour mon code j'ai fixé mon groupe de distribution manuellement où j'ai 2 users actifs et 2 inactifs mais j'obtiens des valeurs ne correspondant pas à la réalité et une de mes variables reste vide ($UtilName = $Util.Displayname)
Voici le code
[code:1]Import-Module ActiveDirectory
$ListeDesGroupesDistr = Get-ADGroup -Identity \"CN=XXXXXXXX,OU=Groups,OU=HQ,OU=LOCATIONS,DC=XXXX,DC=XXXXXX,DC=XXXX\"
New-Item -Path $env:homepath\desktop\Listedesgroupes.txt -Force -ItemType File
$MonResultat = \"$env:homepath\desktop\Listedesgroupes.txt\"
foreach ($Util in $ListeDesGroupesDistr)
{
$ListeUser = Get-ADGroupMember -Identity $Util.DistinguishedName -Recursive
$CompteurUser = $ListeUser.count
foreach ($user in $ListeUser)
{
$ResActif = 0
$ResInactif = 0
$CurrentUser = $user.DistinguishedName
$IsActif = Get-ADUser -Identity $CurrentUser -Properties Enabled | select Name,Enabled
If ($IsActif.Enabled -eq $true)
{$compteurActif ++}
Else
{$compteurInactif ++}
If ($compteurActif -ge $compteurInactif)
{$ResActif = $compteurActif - $compteurInactif}
Else
{$ResInactif = $compteurInactif - $compteurActif}
}
$UtilName = $Util.Displayname
If ($ResActif -gt 0)
{Add-Content -LiteralPath $MonResultat -Value (\"Le groupe $UtilName contient $CompteurUser utilisateurs dont $ResActif Actifs [Et $ResInactif inactifs]\"«») -Encoding UTF8}
Else
{Add-Content -LiteralPath $MonResultat -Value (\"Le groupe $UtilName contient $CompteurUser utilisateurs dont $ResInactif inactifs [Et $ResActif Actifs]\"«») -Encoding UTF8}
}[/code:1]
Je soupçonne des problèmes de portée de variable !?!
Merci beaucoup à ceux qui prendront le temps de m'aider !
Message édité par: clads92, à: 20/09/17 15:01<br><br>Message édité par: clads92, à: 25/09/17 09:09
Je bloque sur un sript de ma création (surement optimisable mais c'est pas le sujet
Le but de ce script est de trouver quels groupes de distribution ne contiennent que des utilisateurs inactifs
Voici le déroulé
1 &#8594; Lister les groupes de distributions
2 &#8594; Compter le nombres d'utilisateurs par groupe
3 &#8594; Compter les nombres d'utilisateurs actifs et inactifs
4 &#8594; Fichier de sortie le groupe X contient Y utilisateurs dont Z actifs et Z' inactifs
Pour mon code j'ai fixé mon groupe de distribution manuellement où j'ai 2 users actifs et 2 inactifs mais j'obtiens des valeurs ne correspondant pas à la réalité et une de mes variables reste vide ($UtilName = $Util.Displayname)
Voici le code
[code:1]Import-Module ActiveDirectory
$ListeDesGroupesDistr = Get-ADGroup -Identity \"CN=XXXXXXXX,OU=Groups,OU=HQ,OU=LOCATIONS,DC=XXXX,DC=XXXXXX,DC=XXXX\"
New-Item -Path $env:homepath\desktop\Listedesgroupes.txt -Force -ItemType File
$MonResultat = \"$env:homepath\desktop\Listedesgroupes.txt\"
foreach ($Util in $ListeDesGroupesDistr)
{
$ListeUser = Get-ADGroupMember -Identity $Util.DistinguishedName -Recursive
$CompteurUser = $ListeUser.count
foreach ($user in $ListeUser)
{
$ResActif = 0
$ResInactif = 0
$CurrentUser = $user.DistinguishedName
$IsActif = Get-ADUser -Identity $CurrentUser -Properties Enabled | select Name,Enabled
If ($IsActif.Enabled -eq $true)
{$compteurActif ++}
Else
{$compteurInactif ++}
If ($compteurActif -ge $compteurInactif)
{$ResActif = $compteurActif - $compteurInactif}
Else
{$ResInactif = $compteurInactif - $compteurActif}
}
$UtilName = $Util.Displayname
If ($ResActif -gt 0)
{Add-Content -LiteralPath $MonResultat -Value (\"Le groupe $UtilName contient $CompteurUser utilisateurs dont $ResActif Actifs [Et $ResInactif inactifs]\"«») -Encoding UTF8}
Else
{Add-Content -LiteralPath $MonResultat -Value (\"Le groupe $UtilName contient $CompteurUser utilisateurs dont $ResInactif inactifs [Et $ResActif Actifs]\"«») -Encoding UTF8}
}[/code:1]
Je soupçonne des problèmes de portée de variable !?!
Merci beaucoup à ceux qui prendront le temps de m'aider !
Message édité par: clads92, à: 20/09/17 15:01<br><br>Message édité par: clads92, à: 25/09/17 09:09
Connexion ou Créer un compte pour participer à la conversation.
- crogiez
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 102
- Remerciements reçus 0
il y a 8 ans 6 mois #24285
par crogiez
Réponse de crogiez sur le sujet Re:Problème d’incrémentation de variables
bonjour
il ne peut ya voir de probleme de portee de variables
car il n'y a pas de fonction
-affiche les valeurs au fur et a mesure
$CurrentUser = $user.DistinguishedName
$CurrentUser
$temp = read-host
-verifie avec la console de users
-ajoute une log
# install_silent.ps1
# 28/08/2017 philippe crogiez creation X86
# 04/09/2017 version X64
function ecrit_log($llogf){
# rem create log
$llog2=get-date -Format \"yyyy-MM-dd-HH-mm-ss\"
$llog2=$llog2+\";\"+$llogf
$llog2
$llog2 >> $pathlog
}
# recup dossier courant
$moninvoc=$MyInvocation.InvocationName
$dosscurrent=(split-path -Path $moninvoc -Parent) + \"\\"
#$moninvoc
$dosscurrent
\"-\"
# calcul du chemin de la log dans profil user temp
# si cest une install user
$dosslog=$env:USERPROFILE+\"\AppData\Local\Temp\\"
# si cest une install system
$dosslog=$dosscurrent
$dosslog=$env:ProgramFiles+\"\Mozilla Firefox\Installer\\"
$release=\"Mozilla_Firefox_53.00.03_W7_X64_R01\"
$filelog=$release+\"_Installer.log\"
$pathlog=$dosslog+$filelog
$tirets=\"\";1..50 | % {$tirets=$tirets+\"-\"};
#
$dosslog
$pathlog
\"-\"
# supprime la log si elle existe deja
Remove-Item -Path $pathlog -ErrorAction SilentlyContinue
ecrit_log($tirets)
ecrit_log($dosslog)
ecrit_log($filelog)
ecrit_log($tirets)
# ecrit la version de powershell utilisée
ecrit_log(\"version powershell utilisee\")
ecrit_log($env:PROCESSOR_ARCHITECTURE)
$intptr=\"\"
Switch ([intptr]::Size) {4 {$intptr=\"x86\"};8 {$intptr=\"x64\"}}
ecrit_log($intptr)
ecrit_log($tirets)
# FIN
ecrit_log(\"fin\")
ecrit_log($tirets)
il ne peut ya voir de probleme de portee de variables
car il n'y a pas de fonction
-affiche les valeurs au fur et a mesure
$CurrentUser = $user.DistinguishedName
$CurrentUser
$temp = read-host
-verifie avec la console de users
-ajoute une log
# install_silent.ps1
# 28/08/2017 philippe crogiez creation X86
# 04/09/2017 version X64
function ecrit_log($llogf){
# rem create log
$llog2=get-date -Format \"yyyy-MM-dd-HH-mm-ss\"
$llog2=$llog2+\";\"+$llogf
$llog2
$llog2 >> $pathlog
}
# recup dossier courant
$moninvoc=$MyInvocation.InvocationName
$dosscurrent=(split-path -Path $moninvoc -Parent) + \"\\"
#$moninvoc
$dosscurrent
\"-\"
# calcul du chemin de la log dans profil user temp
# si cest une install user
$dosslog=$env:USERPROFILE+\"\AppData\Local\Temp\\"
# si cest une install system
$dosslog=$dosscurrent
$dosslog=$env:ProgramFiles+\"\Mozilla Firefox\Installer\\"
$release=\"Mozilla_Firefox_53.00.03_W7_X64_R01\"
$filelog=$release+\"_Installer.log\"
$pathlog=$dosslog+$filelog
$tirets=\"\";1..50 | % {$tirets=$tirets+\"-\"};
#
$dosslog
$pathlog
\"-\"
# supprime la log si elle existe deja
Remove-Item -Path $pathlog -ErrorAction SilentlyContinue
ecrit_log($tirets)
ecrit_log($dosslog)
ecrit_log($filelog)
ecrit_log($tirets)
# ecrit la version de powershell utilisée
ecrit_log(\"version powershell utilisee\")
ecrit_log($env:PROCESSOR_ARCHITECTURE)
$intptr=\"\"
Switch ([intptr]::Size) {4 {$intptr=\"x86\"};8 {$intptr=\"x64\"}}
ecrit_log($intptr)
ecrit_log($tirets)
# FIN
ecrit_log(\"fin\")
ecrit_log($tirets)
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 8 ans 6 mois #24288
par Philippe
Réponse de Philippe sur le sujet Re:Problème d’incrémentation de variables
salut clads92

pour le displayname : par défaut un groupe n'en a pas !!!!
donc soit tu le renseigne pour tous tes groupes
soit tu utilise le name !!
dernier détail qui ne pose pas de problème :
[code:1] If ($compteurActif -ge $compteurInactif)
{$ResActif = $compteurActif - $compteurInactif}
Else
{$ResInactif = $compteurInactif - $compteurActif}
[/code:1]
sort ce code de ta boucle ListeUser,
il est inutile de recalculer le total après chaque utilisateur d'un groupe, tu ralenti ton script pour rien
voilà pour aujourd'hui !!
Message édité par: 6ratgus, à: 21/09/17 11:50<br><br>Message édité par: 6ratgus, à: 21/09/17 11:52
encore toiBonjour à tous (et oui, encore moi désolé )
des messages d'erreurs serais plus simple pour t'aidéeJe soupçonne des problèmes de portée de variable !?!
peut etre que si tes variables était initialisé en debut de script tu aurais moins d'aléa, je pense a $compteurActif et $compteurInactifmais j'obtiens des valeurs ne correspondant pas à la réalité et une de mes variables reste vide ($UtilName = $Util.Displayname)
pour le displayname : par défaut un groupe n'en a pas !!!!
donc soit tu le renseigne pour tous tes groupes
soit tu utilise le name !!
dernier détail qui ne pose pas de problème :
[code:1] If ($compteurActif -ge $compteurInactif)
{$ResActif = $compteurActif - $compteurInactif}
Else
{$ResInactif = $compteurInactif - $compteurActif}
[/code:1]
sort ce code de ta boucle ListeUser,
il est inutile de recalculer le total après chaque utilisateur d'un groupe, tu ralenti ton script pour rien
voilà pour aujourd'hui !!
Message édité par: 6ratgus, à: 21/09/17 11:50<br><br>Message édité par: 6ratgus, à: 21/09/17 11:52
Connexion ou Créer un compte pour participer à la conversation.
- Pascal
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 0
il y a 8 ans 6 mois #24290
par Pascal
Réponse de Pascal sur le sujet Re:Problème d’incrémentation de variables
Merci pour vos réponses !
@6ratgus
&#8594; Pas de message d'erreurs à proprement parler, le script se déroule comme il faut, seul le résultat est incohérent
&#8594; Bien vu pour le DisplayName, c'est juste qu'il me le proposait alors j'ai mis ça au lieu de name
&#8594; J'ai sorti le morceau de la boucle
&#9658; Pour les incohérence, en gros j'ai le même résultat pour chaque groupe :
à chaque fois j'ai 1 (in)actif et la partie entre crochets reste à 0
je planche sur ça.
Encore merci pour toute l'aide apporté ! C'est super cool
@6ratgus
&#8594; Pas de message d'erreurs à proprement parler, le script se déroule comme il faut, seul le résultat est incohérent
&#8594; Bien vu pour le DisplayName, c'est juste qu'il me le proposait alors j'ai mis ça au lieu de name
&#8594; J'ai sorti le morceau de la boucle
&#9658; Pour les incohérence, en gros j'ai le même résultat pour chaque groupe :
Le groupe XXX contient 3 utilisateurs dont 1 Actifs [Et 0 inactifs]
à chaque fois j'ai 1 (in)actif et la partie entre crochets reste à 0
je planche sur ça.
Encore merci pour toute l'aide apporté ! C'est super cool
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 8 ans 6 mois #24291
par Philippe
Réponse de Philippe sur le sujet Re:Problème d’incrémentation de variables
peut être que c'est un problème de math !!
si ta deux actifs et deux inactifs
2 - 2 = 0
$compteurActif - $compteurInactif = 0
donc $ResActif = 0
faut revoir ça :
[code:1] If ($compteurActif -ge $compteurInactif)
{$ResActif = $compteurActif - $compteurInactif}
Else
{$ResInactif = $compteurInactif - $compteurActif}
[/code:1]
avec $CompteurUser tu devrais avoir de meilleur resultat !!
ce qui est bizarre c'est que tu compte les actifs et inactifs (compteurActif et compteurInactif)
et après tu recalcule leur nombre ($ResActif et $ResInactif) ???
.<br><br>Message édité par: 6ratgus, à: 21/09/17 18:50
si ta deux actifs et deux inactifs
2 - 2 = 0
$compteurActif - $compteurInactif = 0
donc $ResActif = 0
faut revoir ça :
[code:1] If ($compteurActif -ge $compteurInactif)
{$ResActif = $compteurActif - $compteurInactif}
Else
{$ResInactif = $compteurInactif - $compteurActif}
[/code:1]
avec $CompteurUser tu devrais avoir de meilleur resultat !!
ce qui est bizarre c'est que tu compte les actifs et inactifs (compteurActif et compteurInactif)
et après tu recalcule leur nombre ($ResActif et $ResInactif) ???
.<br><br>Message édité par: 6ratgus, à: 21/09/17 18:50
Connexion ou Créer un compte pour participer à la conversation.
- Pascal
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 26
- Remerciements reçus 0
il y a 8 ans 6 mois #24293
par Pascal

J'ai remis les choses à plat, il y avait 2/3 problèmes d'incohérences mathématique, et 2 ou 3 bêtises de script mais tout fonctionne maintenant, merci !
Je pose quand même le code ICI où ça aide quelqu'un
[code:1]Import-Module ActiveDirectory
$ListeDesGroupesDistr = Get-ADGroup -Filter {GroupCategory -eq \"Distribution\"} -Properties *
New-Item -Path $env:homepath\desktop\Listedesgroupes.txt -Force -ItemType File
$MonResultat = \"$env:homepath\desktop\Listedesgroupes.txt\"
New-Item -Path $env:homepath\desktop\Listedesgroupes.csv -Force -ItemType File
$MonResultatcsv = \"$env:homepath\desktop\Listedesgroupes.csv\"
Add-Content -LiteralPath $MonResultatcsv '\"NomGroupe\",\"Nombreuserdetectes\",\"Actifs\",\"Inactifs\",\"Verif\"'
foreach ($Util in $ListeDesGroupesDistr)
{
$ListeUser = Get-ADGroupMember -Identity $Util.DistinguishedName -Recursive
$CompteurUser = $ListeUser | Measure-Object | Select-Object count
$CompteurUser = $CompteurUser.count
$compteurActif = 0
$compteurInactif = 0
foreach ($user in $ListeUser)
{
$CurrentUser = $user.DistinguishedName
$IsActif = Get-ADUser -Identity $CurrentUser -Properties Enabled | select Name,Enabled
If ($IsActif.Enabled -eq $true)
{$compteurActif ++}
Else
{$compteurInactif ++}
}
$UtilName = $Util.Name
$totalUser = $compteurActif + $compteurInactif
Add-Content -LiteralPath $MonResultat -Value (\"Le groupe $UtilName contient $CompteurUser utilisateurs dont $compteurInactif inactifs [Et $compteurActif Actifs]\"«») -Encoding UTF8
Add-Content -LiteralPath $MonResultatcsv -Value \"$utilname,$CompteurUser,$compteurActif,$compteurInactif,$totalUser\"
}[/code:1]
Réponse de Pascal sur le sujet Re:Problème d’incrémentation de variables
J'ai remis les choses à plat, il y avait 2/3 problèmes d'incohérences mathématique, et 2 ou 3 bêtises de script mais tout fonctionne maintenant, merci !
Je pose quand même le code ICI où ça aide quelqu'un
[code:1]Import-Module ActiveDirectory
$ListeDesGroupesDistr = Get-ADGroup -Filter {GroupCategory -eq \"Distribution\"} -Properties *
New-Item -Path $env:homepath\desktop\Listedesgroupes.txt -Force -ItemType File
$MonResultat = \"$env:homepath\desktop\Listedesgroupes.txt\"
New-Item -Path $env:homepath\desktop\Listedesgroupes.csv -Force -ItemType File
$MonResultatcsv = \"$env:homepath\desktop\Listedesgroupes.csv\"
Add-Content -LiteralPath $MonResultatcsv '\"NomGroupe\",\"Nombreuserdetectes\",\"Actifs\",\"Inactifs\",\"Verif\"'
foreach ($Util in $ListeDesGroupesDistr)
{
$ListeUser = Get-ADGroupMember -Identity $Util.DistinguishedName -Recursive
$CompteurUser = $ListeUser | Measure-Object | Select-Object count
$CompteurUser = $CompteurUser.count
$compteurActif = 0
$compteurInactif = 0
foreach ($user in $ListeUser)
{
$CurrentUser = $user.DistinguishedName
$IsActif = Get-ADUser -Identity $CurrentUser -Properties Enabled | select Name,Enabled
If ($IsActif.Enabled -eq $true)
{$compteurActif ++}
Else
{$compteurInactif ++}
}
$UtilName = $Util.Name
$totalUser = $compteurActif + $compteurInactif
Add-Content -LiteralPath $MonResultat -Value (\"Le groupe $UtilName contient $CompteurUser utilisateurs dont $compteurInactif inactifs [Et $compteurActif Actifs]\"«») -Encoding UTF8
Add-Content -LiteralPath $MonResultatcsv -Value \"$utilname,$CompteurUser,$compteurActif,$compteurInactif,$totalUser\"
}[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.047 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Problème d’incrémentation de variables