Question [Résolu] Problème d’incrémentation de variables

Plus d'informations
il y a 8 ans 6 mois #24280 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

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

Plus d'informations
il y a 8 ans 6 mois #24285 par crogiez
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 \&quot;yyyy-MM-dd-HH-mm-ss\&quot;
$llog2=$llog2+\&quot;;\&quot;+$llogf
$llog2
$llog2 &gt;&gt; $pathlog
}

# recup dossier courant
$moninvoc=$MyInvocation.InvocationName
$dosscurrent=(split-path -Path $moninvoc -Parent) + \&quot;\\&quot;
#$moninvoc
$dosscurrent
\&quot;-\&quot;

# calcul du chemin de la log dans profil user temp
# si cest une install user
$dosslog=$env:USERPROFILE+\&quot;\AppData\Local\Temp\\&quot;
# si cest une install system
$dosslog=$dosscurrent
$dosslog=$env:ProgramFiles+\&quot;\Mozilla Firefox\Installer\\&quot;
$release=\&quot;Mozilla_Firefox_53.00.03_W7_X64_R01\&quot;
$filelog=$release+\&quot;_Installer.log\&quot;
$pathlog=$dosslog+$filelog
$tirets=\&quot;\&quot;;1..50 | % {$tirets=$tirets+\&quot;-\&quot;};
#
$dosslog
$pathlog
\&quot;-\&quot;

# 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(\&quot;version powershell utilisee\&quot;)
ecrit_log($env:PROCESSOR_ARCHITECTURE)
$intptr=\&quot;\&quot;
Switch ([intptr]::Size) {4 {$intptr=\&quot;x86\&quot;};8 {$intptr=\&quot;x64\&quot;}}
ecrit_log($intptr)
ecrit_log($tirets)


# FIN
ecrit_log(\&quot;fin\&quot;)
ecrit_log($tirets)

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

Plus d'informations
il y a 8 ans 6 mois #24288 par Philippe
salut clads92

Bonjour à tous (et oui, encore moi désolé )

encore toi ;)

Je soupçonne des problèmes de portée de variable !?!

des messages d'erreurs serais plus simple pour t'aidée

mais j'obtiens des valeurs ne correspondant pas à la réalité et une de mes variables reste vide ($UtilName = $Util.Displayname)

peut etre que si tes variables était initialisé en debut de script tu aurais moins d'aléa, je pense a $compteurActif et $compteurInactif

pour le displayname : par défaut un groupe n'en a pas !!!!
donc soit tu le renseigne pour tous tes groupes :blink:
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 !! B)

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.

Plus d'informations
il y a 8 ans 6 mois #24290 par Pascal
Merci pour vos réponses !

@6ratgus
&amp;#8594; Pas de message d'erreurs à proprement parler, le script se déroule comme il faut, seul le résultat est incohérent

&amp;#8594; Bien vu pour le DisplayName, c'est juste qu'il me le proposait alors j'ai mis ça au lieu de name :side:

&amp;#8594; J'ai sorti le morceau de la boucle :)

&amp;#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.

Plus d'informations
il y a 8 ans 6 mois #24291 par Philippe
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 !! :woohoo:

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.

Plus d'informations
il y a 8 ans 6 mois #24293 par Pascal
B) B)

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 \&quot;Distribution\&quot;} -Properties *

New-Item -Path $env:homepath\desktop\Listedesgroupes.txt -Force -ItemType File
$MonResultat = \&quot;$env:homepath\desktop\Listedesgroupes.txt\&quot;

New-Item -Path $env:homepath\desktop\Listedesgroupes.csv -Force -ItemType File
$MonResultatcsv = \&quot;$env:homepath\desktop\Listedesgroupes.csv\&quot;
Add-Content -LiteralPath $MonResultatcsv '\&quot;NomGroupe\&quot;,\&quot;Nombreuserdetectes\&quot;,\&quot;Actifs\&quot;,\&quot;Inactifs\&quot;,\&quot;Verif\&quot;'

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 (\&quot;Le groupe $UtilName contient $CompteurUser utilisateurs dont $compteurInactif inactifs [Et $compteurActif Actifs]\&quot;«») -Encoding UTF8
Add-Content -LiteralPath $MonResultatcsv -Value \&quot;$utilname,$CompteurUser,$compteurActif,$compteurInactif,$totalUser\&quot;
}[/code:1]

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

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