Question
[résolu]condition if
- lege
- Auteur du sujet
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 80
- Remerciements reçus 0
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
[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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6300
- Remerciements reçus 68
il y a 10 ans 3 mois #16681
par Laurent Dardenne
Tutoriels PowerShell
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 ?
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.
- lege
- Auteur du sujet
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 80
- Remerciements reçus 0
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6300
- Remerciements reçus 68
il y a 10 ans 3 mois #16683
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:condition if
arsoul écrit:
[code:1]
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \"Nothing\"«»)]
param (
#Traitements
[Parameter(ParameterSetName=\"Normalisation\"«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\"PostInstallation\"«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)
$PSCmdlet.WriteDebug(\"Traitement à effectuer : $($PsCmdlet.ParameterSetName)\"«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \"Aucun paramètrage. Veuillez spécifier un traitement et une cible.\"}
if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \"Veuillez spécifier une cible et une seule.\" }
if ($WindowsSeven)
{
$PSCmdlet.Debug \"$($PsCmdlet.ParameterSetName) sur WindowsSeven\"
$PSCmdlet.Debug \"Ne désactive pas le compte administrateur\"
}
elseif ($Windows2008)
{
$PSCmdlet.Debug \"$($PsCmdlet.ParameterSetName) sur Windows2008\"
$PSCmdlet.Debug \"Désactive le compte administrateur\"
$user = [adsi]\"WinNT://$env:computername/administrateur\"
$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.
Mauvaise formulation de ma part, on exécute le script et le déclenchement se fait selon la présence du paramètre attendu :faut il au préalable exécuter le script avant de faire l'appel ?
[code:1]
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \"Nothing\"«»)]
param (
#Traitements
[Parameter(ParameterSetName=\"Normalisation\"«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\"PostInstallation\"«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)
$PSCmdlet.WriteDebug(\"Traitement à effectuer : $($PsCmdlet.ParameterSetName)\"«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \"Aucun paramètrage. Veuillez spécifier un traitement et une cible.\"}
if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \"Veuillez spécifier une cible et une seule.\" }
if ($WindowsSeven)
{
$PSCmdlet.Debug \"$($PsCmdlet.ParameterSetName) sur WindowsSeven\"
$PSCmdlet.Debug \"Ne désactive pas le compte administrateur\"
}
elseif ($Windows2008)
{
$PSCmdlet.Debug \"$($PsCmdlet.ParameterSetName) sur Windows2008\"
$PSCmdlet.Debug \"Désactive le compte administrateur\"
$user = [adsi]\"WinNT://$env:computername/administrateur\"
$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.
- lege
- Auteur du sujet
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 80
- Remerciements reçus 0
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
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.
- lege
- Auteur du sujet
- Hors Ligne
- Membre premium
Réduire
Plus d'informations
- Messages : 80
- Remerciements reçus 0
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
[code:1]
c:\\users\\toto\\scriptB Test-Param -Normalisation -Windows2008
[/code:1]
[code:1] (script B«»)
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \"Nothing\"«»)]
param (
#Traitements
[Parameter(ParameterSetName=\"Normalisation\"«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\"PostInstallation\"«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)
$PSCmdlet.WriteDebug(\"Traitement à effectuer : $($PsCmdlet.ParameterSetName)\"«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \"Aucun paramètrage. Veuillez spécifier un traitement et une cible.\"}
if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \"Veuillez spécifier une cible et une seule.\" }
if((($Windows2008) -and ($Normalisation -or $PostInstallation)))
{
$user = [adsi]\"WinNT://$env:computername/administrateur\"
$user.UserFlags.value = $user.UserFlags.value -bor 0x0002
$user.CommitChanges()
}
[/code:1]
le code fonctionne :
[code:1]
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \"Nothing\"«»)]
param (
#Traitements
[Parameter(ParameterSetName=\"Normalisation\"«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\"PostInstallation\"«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)
$PSCmdlet.WriteDebug(\"Traitement à effectuer : $($PsCmdlet.ParameterSetName)\"«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \"Aucun paramètrage. Veuillez spécifier un traitement et une cible.\"}
if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \"Veuillez spécifier une cible et une seule.\" }
if((($Windows2008) -and ($Normalisation -or $PostInstallation)))
{
$user = [adsi]\"WinNT://$env:computername/administrateur\"
$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
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
[code:1]
c:\\users\\toto\\scriptB Test-Param -Normalisation -Windows2008
[/code:1]
[code:1] (script B«»)
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \"Nothing\"«»)]
param (
#Traitements
[Parameter(ParameterSetName=\"Normalisation\"«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\"PostInstallation\"«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)
$PSCmdlet.WriteDebug(\"Traitement à effectuer : $($PsCmdlet.ParameterSetName)\"«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \"Aucun paramètrage. Veuillez spécifier un traitement et une cible.\"}
if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \"Veuillez spécifier une cible et une seule.\" }
if((($Windows2008) -and ($Normalisation -or $PostInstallation)))
{
$user = [adsi]\"WinNT://$env:computername/administrateur\"
$user.UserFlags.value = $user.UserFlags.value -bor 0x0002
$user.CommitChanges()
}
[/code:1]
le code fonctionne :
[code:1]
Function Test-Param {
[CmdletBinding(DefaultParameterSetName = \"Nothing\"«»)]
param (
#Traitements
[Parameter(ParameterSetName=\"Normalisation\"«»)]
[switch] $Normalisation,
[Parameter(ParameterSetName=\"PostInstallation\"«»)]
[switch] $PostInstallation,
#Cibles
[switch] $WindowsSeven,
[switch] $Windows2008
)
$PSCmdlet.WriteDebug(\"Traitement à effectuer : $($PsCmdlet.ParameterSetName)\"«»)
if ($PsCmdlet.ParameterSetName -eq 'Nothing')
{Throw \"Aucun paramètrage. Veuillez spécifier un traitement et une cible.\"}
if ( ($WindowsSeven -and $Windows2008) -or (-not $WindowsSeven -and -not $Windows2008))
{ Throw \"Veuillez spécifier une cible et une seule.\" }
if((($Windows2008) -and ($Normalisation -or $PostInstallation)))
{
$user = [adsi]\"WinNT://$env:computername/administrateur\"
$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
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- [résolu]condition if