Question [résolu]condition if

Plus d'informations
il y a 10 ans 3 mois #16679 par lege
Réponse de lege sur le sujet Re:condition if
j'ai testé commme ça :

[code:1]
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \"Nothing\"«»)]
param (
#Traitments
[Parameter(ParameterSetName=\"Normalisation\"«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\"PostInstallation\"«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)

$PSCmdlet.WriteDebug(\"Traitement à effectuer : $($PsCmdlet.ParameterSetName)\"«»)
if ($PsCmdlet.ParameterSetName -ne 'Nothing')
{
if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \"Veuillez spécifier une cible et une seule.\" }

if ($WindowsSeven)
{Write-host \"$($PsCmdlet.ParameterSetName) sur WindowsSeven\"}
elseif ($Windows2008)
{ Write-host \"$($PsCmdlet.ParameterSetName) sur Windows2008\" }
else
{ }
}
else
{Throw \"Aucun paramètrage. Veuillez spécifier un traitement et une cible.\"}
}
test-param -Normalisation -Windows2008

{
$user = [adsi]\"WinNT://$env:computername/administrateur\"
$user.UserFlags.value = $user.UserFlags.value -bor 0x0002
$user.CommitChanges()
}
[/code:1]

mais ca ne change pas les paramètre pour le compte admnistrateur

pourrais tu m'aiguiller stp

merci

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

Plus d'informations
il y a 10 ans 3 mois #16681 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:condition if
Concernant le code de désactivation celui-ci doit se placer dans le corps de la fonction, mais quelles conditions déclenchent son appel ?
Seule la présence des paramètres -Normalisation -Windows2008 la déclenche ou il y a d'autres cas ?

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 3 mois #16682 par lege
Réponse de lege sur le sujet Re:condition if
conditions pour que le test soit validé

if (((normalisation -eq 1 -or postinstallation -eq 1) -and (windows2008 -eq 1))

faut il au préalable exécuter le script avant de faire l'appel ?<br><br>Message édité par: arsoul, à: 20/12/13 13:12

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

Plus d'informations
il y a 10 ans 3 mois #16683 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:condition if
arsoul écrit:

faut il au préalable exécuter le script avant de faire l'appel ?

Mauvaise formulation de ma part, on exécute le script et le déclenchement se fait selon la présence du paramètre attendu :
[code:1]
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \&quot;Nothing\&quot;«»)]
param (
#Traitements
[Parameter(ParameterSetName=\&quot;Normalisation\&quot;«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\&quot;PostInstallation\&quot;«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)

$PSCmdlet.WriteDebug(\&quot;Traitement à effectuer : $($PsCmdlet.ParameterSetName)\&quot;«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \&quot;Aucun paramètrage. Veuillez spécifier un traitement et une cible.\&quot;}

if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \&quot;Veuillez spécifier une cible et une seule.\&quot; }

if ($WindowsSeven)
{
$PSCmdlet.Debug \&quot;$($PsCmdlet.ParameterSetName) sur WindowsSeven\&quot;
$PSCmdlet.Debug \&quot;Ne désactive pas le compte administrateur\&quot;
}
elseif ($Windows2008)
{
$PSCmdlet.Debug \&quot;$($PsCmdlet.ParameterSetName) sur Windows2008\&quot;
$PSCmdlet.Debug \&quot;Désactive le compte administrateur\&quot;
$user = [adsi]\&quot;WinNT://$env:computername/administrateur\&quot;
$user.UserFlags.value = $user.UserFlags.value -bor 0x0002
$user.CommitChanges()
}
} #Test-Param

Test-Param -Normalisation -Windows2008
[/code:1]
Ici on utilise un jeux de paramètre, qui permet d'éviter de tester les paramètres -Normalisation et/ou -Postinstallation, car le script fonctionne que si un de ces deux paramètres existe sur la ligne de commande et au moins un des deux. Le seul déclencheur de la désactivation du compteadmin se trouve désormais être la présence du paramètre -Windows2008.

On délègue à cette clause param 'avancé' des règles de gestion qui n'est plus nécessaire de coder dans le corps du script.

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 3 mois #16684 par lege
Réponse de lege sur le sujet Re:condition if
j'aurais souhaité à la base créer un script et que celui ci appelle le script B

en fonction des variables ajoutées par l'utilisateur, le script B exécute ou non certain bloc de commandes

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

Plus d'informations
il y a 10 ans 3 mois #16685 par lege
Réponse de lege sur le sujet Re:condition if
je souhaite savoir si la syntaxe fonctionnerai car j'ai un cahier des charges c'est pour cela

je préfère tester avec un if si les valeurs sont correct pour exécuter le bloc de commandes.

script A (appel le script B)

[code:1]
c:\\users\\toto\\scriptB Test-Param -Normalisation -Windows2008
[/code:1]



[code:1] (script B«»)
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \&quot;Nothing\&quot;«»)]
param (
#Traitements
[Parameter(ParameterSetName=\&quot;Normalisation\&quot;«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\&quot;PostInstallation\&quot;«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)

$PSCmdlet.WriteDebug(\&quot;Traitement à effectuer : $($PsCmdlet.ParameterSetName)\&quot;«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \&quot;Aucun paramètrage. Veuillez spécifier un traitement et une cible.\&quot;}

if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \&quot;Veuillez spécifier une cible et une seule.\&quot; }

if((($Windows2008) -and ($Normalisation -or $PostInstallation)))
{
$user = [adsi]\&quot;WinNT://$env:computername/administrateur\&quot;
$user.UserFlags.value = $user.UserFlags.value -bor 0x0002
$user.CommitChanges()
}
[/code:1]


le code fonctionne :

[code:1]

Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \&quot;Nothing\&quot;«»)]
param (
#Traitements
[Parameter(ParameterSetName=\&quot;Normalisation\&quot;«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\&quot;PostInstallation\&quot;«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)

$PSCmdlet.WriteDebug(\&quot;Traitement à effectuer : $($PsCmdlet.ParameterSetName)\&quot;«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \&quot;Aucun paramètrage. Veuillez spécifier un traitement et une cible.\&quot;}

if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \&quot;Veuillez spécifier une cible et une seule.\&quot; }

if((($Windows2008) -and ($Normalisation -or $PostInstallation)))
{
$user = [adsi]\&quot;WinNT://$env:computername/administrateur\&quot;
$user.UserFlags.value = $user.UserFlags.value -bor 0x0002
$user.CommitChanges()
}

}

Test-Param -Normalisation -Windows2008
[/code:1]<br><br>Message édité par: arsoul, à: 20/12/13 15:53

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

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