Question
Ma variable s'efface quand je quitte la fonction
- freeman62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 11 ans 7 mois #17899
par freeman62
Ma variable s'efface quand je quitte la fonction a été créé par freeman62
Bonjour,
Ma variable s'efface quand je quitte la fonction.
Peut-être est-ce un comportement normal mais dans ce cas comment la conservée ?
Exemple :
Code :
[code:1]
function cool
{
$var=5
write-host \"fonction ma var = $var\"
return
}
$var=1
write-host \"début du script ma var = $var\"
COOL
write-host \"fin du script ma var = $var\"
[/code:1]
Résultat affiché :
[code:1]
début du script ma var = 1
fonction ma var = 5
fin du script ma var = 1
[/code:1]
Pourquoi il me retourne 1 en fin de script alors que j'aurais souhaité conservé 5 ? A aucun moment je la réinitialise à 1, pour moi il est pas sensé repassé par la case d'init à 1.
Je vous remercie
Ma variable s'efface quand je quitte la fonction.
Peut-être est-ce un comportement normal mais dans ce cas comment la conservée ?
Exemple :
Code :
[code:1]
function cool
{
$var=5
write-host \"fonction ma var = $var\"
return
}
$var=1
write-host \"début du script ma var = $var\"
COOL
write-host \"fin du script ma var = $var\"
[/code:1]
Résultat affiché :
[code:1]
début du script ma var = 1
fonction ma var = 5
fin du script ma var = 1
[/code:1]
Pourquoi il me retourne 1 en fin de script alors que j'aurais souhaité conservé 5 ? A aucun moment je la réinitialise à 1, pour moi il est pas sensé repassé par la case d'init à 1.
Je vous remercie
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 7 mois #17901
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Ma variable s'efface quand je quitte la fonction
Salut,
freeman62 écrit:
Si tu changes l'affichage :
[code:1]
function cool
{
$var=5
write-host \"fonction ma var = $var\"
return
}
function cool2
{
write-host \"fonction2 ma var = $var\"
$var=5
write-host \"New variable : fonction2 ma var = $var\"
return
}
$var=1
write-host \"début du script ma var = $var\"
COOL
write-host \"fin du script ma var = $var\"
write-host \"début du script2 ma var = $var\"
COOL2
write-host \"fin du script2 ma var = $var\"
[/code:1]
Dans ce cas, le premier appel à Write-Host de la fonction Cool2, recherche la variable dans la portée de l’appelant, car var n'existe pas dans le portée courante (la nouvelle, celle de la fonction).
Sous PS,l'instruction $var=5 dans la fonction Cool2 crée une nouvelle variable, celle dans l'appelant existe tjrs.
En fin d'appel de la fonction la variable $var=5 n'existe plus, PS quitte la fonction et se retrouve dans le contexte initiale, $var=1.
On référence bien un même nom de variable, mais elle ne pointe pas sur la même 'adresse mémoire')
Un lien +- lié avec qq schémas :
www.liafa.jussieu.fr/~hf/verif/ens/cours/C++/node17.html
et aussi :
[code:1]Get-Help about_scope|more[/code:1]
freeman62 écrit:
Ta variable est recréée dans la fonction, c'est le comportement des portées (scope) de Powershell.Ma variable s'efface quand je quitte la fonction.
Si tu changes l'affichage :
[code:1]
function cool
{
$var=5
write-host \"fonction ma var = $var\"
return
}
function cool2
{
write-host \"fonction2 ma var = $var\"
$var=5
write-host \"New variable : fonction2 ma var = $var\"
return
}
$var=1
write-host \"début du script ma var = $var\"
COOL
write-host \"fin du script ma var = $var\"
write-host \"début du script2 ma var = $var\"
COOL2
write-host \"fin du script2 ma var = $var\"
[/code:1]
Dans ce cas, le premier appel à Write-Host de la fonction Cool2, recherche la variable dans la portée de l’appelant, car var n'existe pas dans le portée courante (la nouvelle, celle de la fonction).
Sous PS,l'instruction $var=5 dans la fonction Cool2 crée une nouvelle variable, celle dans l'appelant existe tjrs.
En fin d'appel de la fonction la variable $var=5 n'existe plus, PS quitte la fonction et se retrouve dans le contexte initiale, $var=1.
On référence bien un même nom de variable, mais elle ne pointe pas sur la même 'adresse mémoire')
Un lien +- lié avec qq schémas :
www.liafa.jussieu.fr/~hf/verif/ens/cours/C++/node17.html
et aussi :
[code:1]Get-Help about_scope|more[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- freeman62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 11 ans 7 mois #17912
par freeman62
Réponse de freeman62 sur le sujet Re:Ma variable s'efface quand je quitte la fonction
Merci Laurent, grâce à tes explications et la commande que tu m'a fournie, j'ai bien compris le principe !
J'ai donc utilisé ce dont j'avais besoin,
exemple :
[code:1]
$SCRIPT:var=1
[/code:1]
Ainsi ma variable est utilisable dans tout mon script.
Juste une question complémentaire, je n'en n'ai pas besoin mais c'est pour comprendre
J'ai vu qu'il y avait aussi des variables de portées GLOBALES, c'est à dire utilisable dans tout le système.
J'ai voulu en initialiser une, cela fonctionne mais elle n'est pas conservée lorsque je relance un powershell.
Merci encore.
J'ai donc utilisé ce dont j'avais besoin,
exemple :
[code:1]
$SCRIPT:var=1
[/code:1]
Ainsi ma variable est utilisable dans tout mon script.
Juste une question complémentaire, je n'en n'ai pas besoin mais c'est pour comprendre
J'ai vu qu'il y avait aussi des variables de portées GLOBALES, c'est à dire utilisable dans tout le système.
J'ai voulu en initialiser une, cela fonctionne mais elle n'est pas conservée lorsque je relance un powershell.
Merci encore.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 7 mois #17914
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Ma variable s'efface quand je quitte la fonction
freeman62 écrit:
Pour la persistance utilise Export-CliXML & Import-CliXML.
A gérer dans le profile utilisateur par exemple ou dans une clé de registre...
Sa durée de vie est celle de la session.J'ai voulu en initialiser une, cela fonctionne mais elle n'est pas conservée lorsque je relance un powershell.
Pour la persistance utilise Export-CliXML & Import-CliXML.
A gérer dans le profile utilisateur par exemple ou dans une clé de registre...
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- freeman62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 11 ans 7 mois #17932
par freeman62
Réponse de freeman62 sur le sujet Re:Ma variable s'efface quand je quitte la fonction
Ok mais alors quelle est la différence entre une variable de type GLOBAL et une variable de type SCRIPT ?
\"La même session\" c'est un peu la même chose ?
Certainement une nuance qui m'échappe...
Merci
\"La même session\" c'est un peu la même chose ?
Certainement une nuance qui m'échappe...
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 7 mois #17933
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Ma variable s'efface quand je quitte la fonction
freeman62 écrit:
Pour celle Global:, la variable existe tjr une fois le script terminé ou relancé :
[code:1]
#créer un script et y coller ce code
if (-not (test-path Variable:«»script:varScriptScope) )
{$script:varScriptScope=1}
else {$script:varScriptScope++}
if (-not (test-path Variable:global:varGlobalScope) )
{ $global:varGlobalScope=10 }
else { $global:varGlobalScope +=10 }
function inc { $script:varScriptScope++}
function inc2 { $varScriptScope++}
Write-host \"varScriptScope=$script:varScriptScope`t varGlobalScope=$global:varGlobalScope\"
inc
Write-host \"Premier increment : varScriptScope=$script:varScriptScope`t varGlobalScope=$global:varGlobalScope\"
inc2
Write-host \"Second increment : varScriptScope=$script:varScriptScope`t varGlobalScope=$global:varGlobalScope\"
[/code:1]
A la fin de la première exécution du script, varGlobalScope existera tjr dans toutes les portées [code:1]
$varGlobalScope
$global:varGlobalScope
rv varGlobalScope
rv varGlobalScope -Scope global
[/code:1]
Il faut passer un peu de temps sur ce point et construire de nombreux scénarios simple pour comprendre les bases, sinon ce sera séance de Debug à tout heure
Chaque exécution de code (fonction,script,module, scriptblock) créer une nouvelle portée ( dans la même session. Un job crée une autre session PS). Script: est utilisé dans un script afin de préciser que la portée de la variable est celle du script en cours.Certainement une nuance qui m'échappe...
Pour celle Global:, la variable existe tjr une fois le script terminé ou relancé :
[code:1]
#créer un script et y coller ce code
if (-not (test-path Variable:«»script:varScriptScope) )
{$script:varScriptScope=1}
else {$script:varScriptScope++}
if (-not (test-path Variable:global:varGlobalScope) )
{ $global:varGlobalScope=10 }
else { $global:varGlobalScope +=10 }
function inc { $script:varScriptScope++}
function inc2 { $varScriptScope++}
Write-host \"varScriptScope=$script:varScriptScope`t varGlobalScope=$global:varGlobalScope\"
inc
Write-host \"Premier increment : varScriptScope=$script:varScriptScope`t varGlobalScope=$global:varGlobalScope\"
inc2
Write-host \"Second increment : varScriptScope=$script:varScriptScope`t varGlobalScope=$global:varGlobalScope\"
[/code:1]
A la fin de la première exécution du script, varGlobalScope existera tjr dans toutes les portées [code:1]
$varGlobalScope
$global:varGlobalScope
rv varGlobalScope
rv varGlobalScope -Scope global
[/code:1]
Il faut passer un peu de temps sur ce point et construire de nombreux scénarios simple pour comprendre les bases, sinon ce sera séance de Debug à tout heure
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.099 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Ma variable s'efface quand je quitte la fonction