Question Script et Variable (Résolu)

Plus d'informations
il y a 16 ans 1 mois #1669 par Frisco
Bonjour tout le monde,

J'ai une question, j'ai fais un script qui compte le nombre de fichiers dans un répertoire jusque là pas de problème ... ça marche

Le truc c'est qu'aucune de mes variables ne sont sauvegardées après l'exécution de mon script, en effet je dois lancer mon script plusieurs fois par jour pour vérifier que le nombre ne fichier n'augmente pas anormalement mais après la première exécution de mon script mes variables disparaissent ... et donc pas moyen de comparer le contenu de plusieurs variables :s ..

Est-ce normal? ou est-ce que c'est moi qui ai oublié quelque chose?


Exemple de script:
[code:1]$year = Get-Date -f \"yyyy\"
$month = Get-Date -f \"MM\"
$day = Get-Date -f \"dd\"[/code:1]

Et bien après exécution du script pas moyen de trouver ces variables ... même get-variable ne me donne rien
D'avance merci

Message édité par: frisco, à: 13/02/08 12:15

Message édité par: frisco, à: 13/02/08 12:15<br><br>Message édité par: Arnaud, à: 16/12/08 21:48

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

Plus d'informations
il y a 16 ans 1 mois #1670 par Lemaire Patrice
Réponse de Lemaire Patrice sur le sujet Re:Script et Variable
Houlà, pas facile à expliquer ca, je vais essayer.

Quand tu ouvre une session Windows sur ton PC, tu créer comme une bulle, autrement appelé environnement d’exécution.
Si dans cette session Windows tu lance une console PowerShell, alors tu créer une bulle plus petite dans la précédente, un nouvel environnement d’exécution restreint.
Si ensuite dans cette console PS tu lance un Script (criez pas encore hein, trop tôt pour le Dot là ^^), tu créer une troisième bulle encore plus petite dans la seconde.

On peu imager cela un peut comme ca, par exemple. J’espère que l’image te parle. Ce qu’il faut savoir c’est qu’une variable disparaît en même temps que la bulle dans laquelle elle a été créée.
Dans ton cas, tu crée ta variable dans l’environnement (bulle) de ton script, du coup, dès que le script s’arrête, son environnement disparaît. Et la bulle de niveau supérieure dans laquelle tu reviens (ta console PS) ne la connaît plus. D’ailleurs elle ne l’a jamais connue, pour être plus précis.

Chaque nouvel environnement qui se crée est capable de « voir » les variables de l’environnement qui l’a engendré (celui de niveau supérieur). Ton Script peu voir les variables créées dans ta console PS. Malheureusement, le contraire n’est pas vrai. Ta console PS ne connaitra jamais les variables que tu crées dans ton script.

Bon voilà j’espère que mon explication n’est pas trop tortueuse ^^. Une bonne image explique parfois bien des choses.
Il est bien évident que ce problème, tout le monde y est confronté ^^. Il existe donc des solutions.
Tu peux par exemple à chaque exécution stocker tes variables dans un fichier, que tu reliras le prochain coup.
Tu peux aussi utiliser les « Variables d’environnement », elles font parties des PSDrive, et on peut en créer au besoin. L’avantage de ces variables est d’exister au niveau de ta session Windows, le niveau le plus haut, la bulle originelle quoi ^^.
Et il en existe surement d’autres en fonction de la problématique précise.
Je pense malgré tout que le stockage en fichier reste le plus simple. Surtout si tu travaille avec des tables de Hachage.
Tu stock dans le fichier des chaines de caractère au format : « NomVar=Valeur »
Ensuite tu récupère le contenu du fichier par un :
[code:1]$Tableau = Get-Content –path Nomfichier.dat[/code:1]
Ensuite tu interroge le contenu du tableau avec :
[code:1] Write-Output $Tableau[« NomVar »] [/code:1]
Ce qui a pour effet de t’afficher : Valeur

Mais bon ce n’est qu’un exemple……..

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

Plus d'informations
il y a 16 ans 1 mois #1671 par Frisco
Réponse de Frisco sur le sujet Re:Script et Variable
Super l'idée du fichier .... merci ca marche d'enfer :D

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

Plus d'informations
il y a 15 ans 3 mois #3403 par sonic
Réponse de sonic sur le sujet Re:Script et Variable
Boujour, ca fait un by que j'étais pas venu poster; mais je passe souvent voir !!!
Je viens pour une éniéme modif de mon script publié sur ce forum .
Alors voila :
Je voudrai tout simplement que mon script aille chercher ses variables dans des fichiers textes . Ceci dans le but de l'executer x fois en changeant à chaque fois les memes variable avec des valeurs diférentes .
En clair dans un fichier texte 1 config, dans le suivant une autre config a transmettre tour a tour au script . Pour cela je comptais faire excatement comme ce qui est dis juste au dessus dans ce post .Pour test j'ai créé un fichier contenant:
$rep1=repertoire1
$fic1=fichier1
$var1=variable1

Je le charge avec :
[code$Tableau = Get-Content –path config.txt][/code]

Et je tente de l'intérroger comme cité, avec:
[code:1]Write-Output $Tableau[« $fic1 »] [/code:1]
Ca me renvois un message d'erreur au lieu (avec ou sans guillemet ) de: \&quot;fichier1\&quot;
La seule chose que je peu en sortir c'est en faisant:
[code:1]Write-Output $Tableau[ 1 ] [/code:1] mais il me renvois toute la ligne au lieu de juste \&quot;fichier1\&quot;

pour contourner je fais :[code:1]$Tableau[\&quot;1\&quot;].Split(\&quot;=\&quot;«»)[1][/code:1] et la bien sur j'ai \&quot;fichier1\&quot; que je peu donc mettre dans une variable .
D'un coté mon fichier config restera clair car je met ce que je veut comme comentaire avant la variable, de l'autre je me demande si on peu pas faire plus propre ? Est ce propre ?

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

Plus d'informations
il y a 15 ans 3 mois #3404 par sonic
Réponse de sonic sur le sujet Re:Script et Variable
Boujour, ca fait un by que j'étais pas venu poster; mais je passe souvent voir !!!
Je viens pour une éniéme modif de mon script publié sur ce forum .
Alors voila :
Je voudrai tout simplement que mon script aille chercher ses variables dans des fichiers textes . Ceci dans le but de l'executer x fois en changeant à chaque fois les memes variable avec des valeurs diférentes .
En clair dans un fichier texte 1 config, dans le suivant une autre config a transmettre tour a tour au script . Pour cela je comptais faire excatement comme ce qui est dis juste au dessus dans ce post .Pour test j'ai créé un fichier contenant:
$rep1=repertoire1
$fic1=fichier1
$var1=variable1

Je le charge avec :
[code$Tableau = Get-Content –path config.txt][/code]

Et je tente de l'intérroger comme cité, avec:
[code:1]Write-Output $Tableau[« $fic1 »] [/code:1]
Ca me renvois un message d'erreur au lieu (avec ou sans guillemet ) de: \&quot;fichier1\&quot;
La seule chose que je peu en sortir c'est en faisant:
[code:1]Write-Output $Tableau[ 1 ] [/code:1] mais il me renvois toute la ligne au lieu de juste \&quot;fichier1\&quot;

pour contourner je fais :[code:1]$Tableau[\&quot;1\&quot;].Split(\&quot;=\&quot;«»)[1][/code:1] et la bien sur j'ai \&quot;fichier1\&quot; que je peu donc mettre dans une variable .
D'un coté mon fichier config restera clair car je met ce que je veut comme comentaire avant la variable, de l'autre je me demande si on peu pas faire plus propre ? Est ce propre ?

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

Plus d'informations
il y a 15 ans 3 mois #3405 par sonic
Réponse de sonic sur le sujet Re:Script et Variable
Boujour, ca fait un by que j'étais pas venu poster; mais je passe souvent voir !!!
Je viens pour une éniéme modif de mon script publié sur ce forum .
Alors voila :
Je voudrai tout simplement que mon script aille chercher ses variables dans des fichiers textes . Ceci dans le but de l'executer x fois en changeant à chaque fois les memes variable avec des valeurs diférentes .
En clair dans un fichier texte 1 config, dans le suivant une autre config a transmettre tour a tour au script . Pour cela je comptais faire excatement comme ce qui est dis juste au dessus dans ce post .Pour test j'ai créé un fichier contenant:
$rep1=repertoire1
$fic1=fichier1
$var1=variable1

Je le charge avec :
[code$Tableau = Get-Content –path config.txt][/code]

Et je tente de l'intérroger comme cité, avec:
[code:1]Write-Output $Tableau[« $fic1 »] [/code:1]
Ca me renvois un message d'erreur au lieu (avec ou sans guillemet ) de: \&quot;fichier1\&quot;
La seule chose que je peu en sortir c'est en faisant:
[code:1]Write-Output $Tableau[ 1 ] [/code:1] mais il me renvois toute la ligne au lieu de juste \&quot;fichier1\&quot;

pour contourner je fais :[code:1]$Tableau[\&quot;1\&quot;].Split(\&quot;=\&quot;«»)[1][/code:1] et la bien sur j'ai \&quot;fichier1\&quot; que je peu donc mettre dans une variable .
D'un coté mon fichier config restera clair car je met ce que je veut comme comentaire avant la variable, de l'autre je me demande si on peu pas faire plus propre ? Est ce propre ?

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

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