Question mon script ne fonctione pas (fonction + switch)

Plus d'informations
il y a 12 ans 8 mois #15212 par akwell
bonjour,
je ne comprends pas pourquoi mon script ne fonctionne pas , je n'arrive pas a afficher les valeur de Qmail et Qalias
merci pour votre aide


[code:1]function Qalias
{
Write-Host \"[1]- Utilisateur a besoin d'un alias prenom.nom@ulb.ac.be\"
Write-Host \"[2]- Utilisateur a besoin d'un alias net-ID@ulb.ac.be\"
Write-Host \"[3]- Utilisateur n'a pas besoin d'un alias\"
$Qalias = Read-Host \"faites votre choix: 1 - 3 (defaut:1)\"
Switch ($Qalias) {
1 {$Qalias= \"yes-full\"}
2 {$Qalias= \"yes-netid\"}
3 {$Qalias= \"no\"}
default {
$Qmailbox= \"yes\"
Write-Host \"Vous avez choisi le choix par defaut: Utilisateur a besoin d'un alias prenom.nom@ulb.ac.be\" -foregroundcolor red}
}
}

function Qmailbox
{
Write-Host \"[1]- Utilisateur a besoin d'une mailbox\"
Write-Host \"[2]- Utilisateur n'a pas besoin d'une mailbox\"
$Qmailbox = Read-Host \"faites votre choix: 1 ou 2 (defaut:1)\"
Switch ($Qmailbox) {
1 {$Qmailbox= \"yes\"
Qalias
}
2 {$Qmailbox= \"no\"
$Qalias= \"no\"}
default {
$Qmailbox= \"yes\"
Write-Host \"Vous avez choisi le choix par defaut :Utilisateur a besoin d'une mailbox\" -foregroundcolor red}
}
}
Qmailbox

Write-Host $Qmailbox
Write-Host $Qalias
[/code:1]

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

Plus d'informations
il y a 12 ans 8 mois #15214 par Philippe
tu a un probleme de portee des variables. lis ceci ou cella la partie etendue
puis ca

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

Plus d'informations
il y a 12 ans 8 mois #15215 par Philippe
dejas bonjour akwell (j'ai oublier le post avant)

en y regardent a deux fois, tu a deux problemes/alternative :

soit tes variables sont globale
soit tes fonctions renvoie une ou des valeurs

a toi de voir
mais y te faut modifier ton script en fonction de ce choix.

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

Plus d'informations
il y a 12 ans 8 mois #15216 par akwell
ceci semble fonctionner:

[code:1]function Qalias
{
Write-Host \"[1]- Utilisateur a besoin d'un alias prenom.nom@ulb.ac.be\"
Write-Host \"[2]- Utilisateur a besoin d'un alias net-ID@ulb.ac.be\"
Write-Host \"[3]- Utilisateur n'a pas besoin d'un alias\"
$Qalias = Read-Host \"faites votre choix: 1 - 3 (defaut:1)\"
Switch ($Qalias) {
1 {$global:Qalias= \"yes-full\"}
2 {$global:Qalias= \"yes-netid\"}
3 {$global:Qalias= \"no\"}
default {
$golbal:Qmailbox= \"yes\"
Write-Host \"Vous avez choisi le choix par defaut: Utilisateur a besoin d'un alias prenom.nom@ulb.ac.be\" -foregroundcolor red}
}
}

function Qmailbox
{
Write-Host \"[1]- Utilisateur a besoin d'une mailbox\"
Write-Host \"[2]- Utilisateur n'a pas besoin d'une mailbox\"
$Qmailbox = Read-Host \"faites votre choix: 1 ou 2 (defaut:1)\"
Switch ($Qmailbox) {
1 {$global:Qmailbox= \"yes\"
Qalias
}
2 {$global:Qmailbox= \"no\"
$global:Qalias= \"no\"}
default {
$global:Qmailbox= \"yes\"
Write-Host \"Vous avez choisi le choix par defaut :Utilisateur a besoin d'une mailbox\" -foregroundcolor red}
}
}
Qmailbox

Write-Host $Qmailbox
Write-Host $Qalias
[/code:1]

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

Plus d'informations
il y a 12 ans 8 mois #15218 par Philippe
oui c mieu

maintenant attetion au possible bug (c peut etre voulus)

dans ta fonction Qalias tu renseigne la variable Qmailbox pour la reponse par defaut
de plus tu lui donne la valeur \"yes\" au lieu de \"yes-full\"

mais c'est peut etre voulus

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

Plus d'informations
il y a 12 ans 8 mois #15222 par Laurent Dardenne
Salut,
6ratgus écrit:

tu as un problème de portée des variables.

Oui, mais je pense plus à une incompréhension de l'usage et du comportement d'une fonction.
6ratgus écrit:

oui c mieu

Disons que l'accès à la variable dans l'appelant est désormais possible.
Quant au 'mieux', j'ai un doute.
6ratgus écrit:

maintenant attention au possible bug (c peut être voulus)

De coder des bugs volontairement ?

L'usage de globale n'est pas à prescrire, mais à proscrire :-), tant que vous pouvez vous en passer, faîtes-le.

Donc, une autre approche, sans variable globale, une fonction peut renvoyer une valeur :
[code:1]
function Read-MailBoxHost{
Write-Host \"[1]- Utilisateur a besoin d'une mailbox\"
Write-Host \"[2]- Utilisateur n'a pas besoin d'une mailbox\"

$isCreateMailBox=(Read-Host \"faites votre choix : 1 ou 2 (défaut : 1)\"«») -eq 1
if ( $isCreateMailBox )
{
Write-Host \"Vous avez choisi le choix par defaut : Utilisateur a besoin d'une mailbox\" -foregroundcolor red
}
return $isCreateMailBox
}
if ( Read-MailBoxHost )
{
$SelectedAlias=Read-UserAliasHost
Write-Host $SelectedAlias
}
[/code:1]
Ensuite évitez si possible de mélanger des appels de fonction, de ce type là en tout cas.

La fonction Read-MailBoxHost est loin d'être sans défaut, si tu veux qq chose de plus robuste, utilise System.Management.Automation.Host.ChoiceDescription
Quelques fonctions d'exemple liées à la saisie :
[code:1]
#fonction publique, nommage normée
function Clear-KeyboardBuffer {
while ($Host.UI.RawUI.KeyAvailable)
{ $null=$Host.UI.RawUI.ReadKey(\"NoEcho,IncludeKeyDown, IncludeKeyUp\"«»)}
}

#fonction interne, le nommage n'est pas normée
function YesNo{
param(
$Caption,
$Message,
[ValidateSet(\"Oui\",\"Non\"«»)]
$DefaultChoice=\"Oui\"
)
Clear-KeyboardBuffer
$Yes = New-Object System.Management.Automation.Host.ChoiceDescription \"&Oui\"
$No = New-Object System.Management.Automation.Host.ChoiceDescription \"&Non\"
$Choices = [System.Management.Automation.Host.ChoiceDescription[]]($Yes,$No)
$Host.UI.PromptForChoice($Caption,$Message,$Choices,([byte]($DefaultChoice -eq \"non\"«»)))
}

#Nommage comme un 'Mot-clé', utilisez pour le debug
function Pause ($Message=\"Pressez une touche pour continuer...\"«»)
{
Write-Host -NoNewLine $Message
$null = $Host.UI.RawUI.ReadKey(\"NoEcho,IncludeKeyDown\"«»)
Write-Host \"\"
}
[/code:1]

Tutoriels PowerShell

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

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