Question Manipulations de GPO

Plus d'informations
il y a 17 ans 5 mois #3003 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Manipulations de GPO
Salut,
Nostra écrit:

Je voudrais sortir de la boucle quand $rep=\"o\" ou \"n\"

Essaie ceci :
[code:1]
do{
$rep=read-host \"Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]\"
}
until ($rep -eq \"o\" -or $rep -eq \"n\"«»)

#OU
do{
$rep=read-host \"Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]\"
}

while (!($rep -eq \"o\" -or $rep -eq \"n\"«»))
[/code:1]

Nostra écrit:

c'est pour ça que je comprends pas

Comme te l'a dit Arnaud ton test est tjr vrai :
[code:1]
\"o\" -ne \"o\"
False
\"l\" -ne \"o\"
True
\"o\" -ne \"n\"
True
[/code:1]
Ta construction renvoi tjr vrai, de plus la logique inverse ne facilite pas la relecture mieux vaut énoncer le résultat attendu quitte à l'inverser selon les cas.

Par convention le while devrait être placé en début et until en fin (je suppose que tu connais la différence entre les 2 instructions).

Il existe une construction plus verbeuse mais plus pratique, où tu n'as pas à te préoccuper de tels tests :
www.microsoft.com/technet/scriptcenter/r...jan08/pstip0125.mspx

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 5 mois #3004 par Grégory
Réponse de Grégory sur le sujet Re:Manipulations de GPO
Bonsoir Laurent

J'ai essayé avec le until

[code:1]
do{
$rep=read-host \"Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]\"
}
until ($rep -eq \"o\" -or $rep -eq \"n\"«»)
[/code:1]

je sors bien de la boucle avec o ou n mais avec d'autres valeurs je quitte le script direct et ne boucle pas

j'ai essayé tout les types de boucle et j'ai toujours un problème
je pense que ça vient du -or
vu que quand je mets que while($rep -ne \"o\") ça marche très bien

enfin je reverrai tout ça lundi

Bon dimanche à vous

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

Plus d'informations
il y a 17 ans 5 mois #3005 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Manipulations de GPO
Nostra écrit:

je sors bien de la boucle avec o ou n mais avec d'autres valeurs je quitte le script direct et ne boucle pas

Sur mon poste je n'ai pas ce pb :
[code:1]
PS G:\PS> do{
>> $rep=read-host \"Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]\"
>> }
>> until ($rep -eq \"o\" -or $rep -eq \"n\"«»)
>>
Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]: k
Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]: m
Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]: o
PS G:\PS> do{
>> $rep=read-host \"Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]\"
>> }
>> until ($rep -eq \"o\" -or $rep -eq \"n\"«»)
>>
Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]: rze
Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]: n
PS G:\PS>
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 5 mois #3007 par Grégory
Réponse de Grégory sur le sujet Re:Manipulations de GPO
Bon ben c'est bon :huh:

je comprends pas pourquoi ça marchait pas ...
la seule différence c'est que je mettais le until à la suite de l'accolade :dry:

enfin tout est résolu ;)

Bon ça fait un peu usine à gaz
j'essaierai d'optimiser avec des case

Edit : voici la version avec l'utilisation des switch

[code:1]#Ce script permet de lister toutes les GPO du domaine et affiche celles inactives (partielles ou complètes)
#Ensuite on peut ou non activer/désactiver les GPO
#le paramètre d'entrée est le nom de domaine
param ($procname = \".\"«»)

#On récupère les GPO
$gpm = New-Object -ComObject GPMgmt.GPM
$gpmConstants = $gpm.GetConstants()
$gpmDomain =$gpm.GetDomain($procname, “”, $gpmConstants.UseAnyDC)
$gpmSearchCriteria = $gpm.CreateSearchCriteria()
$gpmAllGpos = $gpmDomain.SearchGPOs($gpmSearchCriteria)

do{
clear
#On affiche les GPO du domaines
write-host \"Liste de toutes les GPO du domaine : \"
write-host\"\"
$gpmallgpos|foreach{$_.displayname}
write-host\"\"
write-host\"\"

#On affiche les GPO inactives
write-host \"GPO inactives ou partiellement inactives : \"
write-host\"\"

$gpmAllGpos|foreach{
If($_.isUserEnabled() -eq \"\" -and $_.iscomputerenabled() -eq \"\"«»)
{
write-host $_.displayname \" est totalement inactive\"
}
}

$gpmAllGpos|foreach{
If($_.isUserEnabled() -eq \"1\" -and $_.iscomputerenabled() -eq \"\"«»)
{
write-host $_.displayname \" est partiellement inactive : configuration ordinateur inactive\"
}
}


$gpmAllGpos|foreach{
If($_.isUserEnabled() -eq \"\" -and $_.iscomputerenabled() -eq \"1\"«»)
{
write-host $_.displayname \" est partiellement inactive : configuration utilisateur inactive\"
}
}

write-host\"\"
write-host\"\"
write-host \"_______________________________________________________________________\"
write-host\"\"


do{
$rep=read-host \"Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]\"
}
until ($rep -eq \"o\" -or $rep -eq \"n\"«»)


if($rep -eq \"o\"«»){
do{
write-host\"\"
$namegpo=read-host \"Entrez le nom de la GPO que vous voulez modifier \"
$namegpo2=$gpmAllGpos|where{$_.displayname -eq $namegpo}
}
until ($namegpo -eq $namegpo2.displayname)


do{
write-host \"\"
write-host \"Voulez-vous :\"
write-host \"1 : Activer la GPO\"
write-host \"2 : Désactiver la GPO\"
$rep1=read-host
write-host\"\"
}
until ($rep1 -eq \"1\" -or $rep1 -eq \"2\"«»)


if($rep1 -eq \"1\"«»)
{$var= \"Activer\"}
else
{$var=\"Désactiver\"}


do{
write-host \"\"
write-host \"Voulez-vous :\"
write-host \"1 : $var complètement la GPO\"
write-host \"2 : $var la configuration ordinateur de la GPO\"
write-host \"3 : $var la configuration utilisateur de la GPO\"
$rep=read-host
}
until ($rep -eq \"1\" -or $rep -eq \"2\" -or $rep -eq \"3\"«»)


if($rep1 -eq \"1\"«»){

switch($rep){
1 {$namegpo2.setuserenabled(\"true\"«»);$namegpo2.setcomputerenabled(\"true\"«»)}
2 {$namegpo2.setcomputerenabled(\"true\"«»)}
3 {$namegpo2.setuserenabled(\"true\"«»)}
}
write-host \"\"
write-host \"Configuration GPO modifiée\"}
else
{
switch($rep){
1 {$namegpo2.setuserenabled(\"\"«»);$namegpo2.setcomputerenabled(\"\"«»)}
2 {$namegpo2.setcomputerenabled(\"\"«»)}
3 {$namegpo2.setuserenabled(\"\"«»)}
}
write-host \"\"
write-host \"Configuration GPO modifiée\"}
}



do{
write-host\"\"
$rep=read-host \"Voulez-vous quitter le script ? [o/n]\"
}
until ($rep -eq \"o\" -or $rep -eq \"n\"«»)

}
until ($rep -eq \"o\"«»)
[/code:1]

Message édité par: Nostra, à: 20/10/08 11:05<br><br>Message édité par: Nostra, à: 20/10/08 11:08

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

Plus d'informations
il y a 17 ans 5 mois #3008 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Manipulations de GPO
Nostra écrit:

Bon ça fait un peu usine à gaz

Non je ne trouve pas, c'est une suite de traitements.
Ensuite d'optimiser le code et de le factoriser, oui on peut le faire :)
[code:1]
$gpmAllGpos|foreach{
if ($_.isUserEnabled -eq $true -and $_.iscomputerenabled -eq $false )
{ $Msg =\&quot;est partiellement inactive : configuration ordinateur inactive\&quot; }

elseif ($_.isUserEnabled -eq $false -and $_.iscomputerenabled -eq $true)
{ $MSg=\&quot;est partiellement inactive : configuration utilisateur inactive\&quot; }
else{ $Msg =\&quot;est totalement inactive\&quot; }

write-host $_.displayname+\&quot; \&quot;+$Msg
}
[/code:1]
Vérifie si isUserEnabled est une méthode ou une propriété. Et mieux vaut tester sur des valeurs de type booléen que de type string.

Ensuite je pense que tu peux faire ceci, à vérifier :
[code:1]
if($rep1 -eq \&quot;1\&quot;«»){
$Value=$True
else $Value=$False
#ou mieux
$Value=$rep1 -eq \&quot;1\&quot;
#Conversion implicite string -&gt;integer
switch($rep){
\&quot;1\&quot; {$namegpo2.setuserenabled($value);$namegpo2.setcomputerenabled($Value)}
\&quot;2\&quot; {$namegpo2.setcomputerenabled($Value)}
\&quot;3\&quot; {$namegpo2.setuserenabled($Value)}
}
write-host \&quot;\&quot;
write-host \&quot;Configuration GPO modifiée\&quot;}
[/code:1]

Et pour les multiples retour chariot :
[code:1]
$CrLF=\&quot;`r`n\&quot;
write-host ($CrLf*3)
write-host ($CrLf*5)

write-host (\&quot;-\&quot; * 80)
#ou
$S=\&quot;-\&quot; * 80
write-host $S
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 5 mois #3009 par Grégory
Réponse de Grégory sur le sujet Re:Manipulations de GPO
Salut Laurent

C'était une usine à gaz avant que je fasse une première optimisation avec les switch et la variable qui prend activer/désactiver

Voilà donc la version améliorée suivant tes remarques pertinentes :

En revanche j'ai été obligé de retoucher ton premier bout de code avec un autre \&quot;si\&quot; puisque ça affichait les totalement actives et inactives, initialiser la variable $msg et la tester


[code:1]#Ce script permet de lister toutes les GPO du domaine et affiche celles inactives (partielles ou complètes)
#Ensuite on peut ou non activer/désactiver les GPO
#le paramètre d'entrée est le nom de domaine
param ($procname = \&quot;.\&quot;«»)

$CrLF=\&quot;`r`n\&quot;

#On récupère les GPO
$gpm = New-Object -ComObject GPMgmt.GPM
$gpmConstants = $gpm.GetConstants()
$gpmDomain =$gpm.GetDomain($procname, “”, $gpmConstants.UseAnyDC)
$gpmSearchCriteria = $gpm.CreateSearchCriteria()
$gpmAllGpos = $gpmDomain.SearchGPOs($gpmSearchCriteria)

do{
clear
#On affiche les GPO du domaines
write-host \&quot;Liste de toutes les GPO du domaine : \&quot;
write-host ($CrLf)
$gpmallgpos|foreach{$_.displayname}
write-host ($CrLf*2)

#On affiche les GPO inactives
write-host \&quot;GPO inactives ou partiellement inactives : \&quot;
write-host ($CrLf)


$gpmAllGpos|foreach{
$msg=\&quot;\&quot;

if ($_.isUserEnabled() -eq $true -and $_.iscomputerenabled() -eq $false)
{$Msg =\&quot;est partiellement inactive : configuration ordinateur inactive\&quot; }
elseif ($_.isUserEnabled() -eq $false -and $_.iscomputerenabled() -eq $true)
{$MSg=\&quot;est partiellement inactive : configuration utilisateur inactive\&quot; }
elseif($_.isUserEnabled() -eq $false -and $_.iscomputerenabled() -eq $false)
{ $Msg =\&quot;est totalement inactive\&quot; }

if ($msg -ne \&quot;\&quot;«»)
{write-host $_.displayname $Msg}
}

write-host ($CrLf*2)
write-host (\&quot;_\&quot; * 80)
write-host ($CrLf)



do{
$rep=read-host \&quot;Voulez-vous modifier les paramètres d'activations d'une des GPO ? [o/n]\&quot;
}
until ($rep -eq \&quot;o\&quot; -or $rep -eq \&quot;n\&quot;«»)


if($rep -eq \&quot;o\&quot;«»){
do{
write-host ($CrLf)
$namegpo=read-host \&quot;Entrez le nom de la GPO que vous voulez modifier \&quot;
$namegpo2=$gpmAllGpos|where{$_.displayname -eq $namegpo}
}
until ($namegpo -eq $namegpo2.displayname)


do{
write-host ($CrLf)
write-host \&quot;Voulez-vous :\&quot;
write-host \&quot;1 : Activer la GPO\&quot;
write-host \&quot;2 : Désactiver la GPO\&quot;
$rep1=read-host
write-host ($CrLf)
}
until ($rep1 -eq \&quot;1\&quot; -or $rep1 -eq \&quot;2\&quot;«»)


if($rep1 -eq \&quot;1\&quot;«»)
{$var= \&quot;Activer\&quot;;$Value=$True}
else
{$var=\&quot;Désactiver\&quot;;$Value=$False}


do{
write-host ($CrLf)
write-host \&quot;Voulez-vous :\&quot;
write-host \&quot;1 : $var complètement la GPO\&quot;
write-host \&quot;2 : $var la configuration ordinateur de la GPO\&quot;
write-host \&quot;3 : $var la configuration utilisateur de la GPO\&quot;
$rep=read-host
}
until ($rep -eq \&quot;1\&quot; -or $rep -eq \&quot;2\&quot; -or $rep -eq \&quot;3\&quot;«»)

switch($rep){
1 {$namegpo2.setuserenabled($value);$namegpo2.setcomputerenabled($value)}
2 {$namegpo2.setcomputerenabled($value)}
3 {$namegpo2.setuserenabled($value)}
}
write-host ($CrLf)
write-host \&quot;Configuration GPO modifiée\&quot;}



do{
write-host ($CrLf)
$rep=read-host \&quot;Voulez-vous quitter le script ? [o/n]\&quot;
}
until ($rep -eq \&quot;o\&quot; -or $rep -eq \&quot;n\&quot;«»)

}
until ($rep -eq \&quot;o\&quot;«»)[/code:1]

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

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