Question [Résolu] Récupérer une variable dans un Foreach

Plus d'informations
il y a 9 ans 8 mois #22041 par Virtual76
Bonjour,

J'aimerai savoir comment il est possible de sortir une variable d'un Foreach?
Je m'explique j'ai une boucle Foreach qui permet de faire l'installation d'un logiciel et qui contient une variable $Installation, cette variable contient un code sur le déroulement de l'installation du logiciel (yes, no..) je voudrais récupérer ce code donc la valeur de la variable en dehors de mon Foreach pour faire un log des installations

Malheureusement je n'arrive pas à récupérer ma variable après la fin du Foreach.

Comment puis-je faire pour régler ce problème et récupérer la valeur dans ma variable?

Merci<br><br>Message édité par: Arnaud, à: 31/08/16 15:52

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

Plus d'informations
il y a 9 ans 8 mois #22049 par Virtual76
J'ai essayé de plusieurs manière notamment :

[code:1]
Invoke-command { mon script.... $installation = \&quot;yes\&quot; } -OutVariable $installation
[/code:1]

Mais cela ne fonctionne pas, la variable $installation reste désespérément vide en dehors du invoke

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

Plus d'informations
il y a 9 ans 8 mois #22050 par Laurent Dardenne
Salut,
quelle version de PS utilises-tu ?

Ceci fonctionne dans une console avec la v2 et la v4:
[code:1]
get-variable installation
#erreur
foreach ($i in 1..5) { $installation=$i}
get-variable installation
#5
[/code:1]
mais pas ceci :
[code:1]
rv installation
# nouvelle portée
&amp;{foreach ($i in 1..5) { $installation=$i}}
get-variable installation
[/code:1]
Sans ton code sous les yeux, ce n'est pas facile de t'aider...

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 8 mois #22051 par Virtual76
Merci de ta réponse Laurent

Je suis en Powershell V5.
Mon code n'est en soit pas bien compliqué:

Dans un premier temps je m’identifie sur une machine pour pouvoir lui envoyer du code avec un Invoke.
J'ai un ensemble de fonction qui s’exécute, notamment une pour déterminer l'état de l'installation et qui renvoi une variable $installation avec plusieurs valeurs possibles en fonction du déroulement de l'installation.

[code:1]
Invoke-command { mon script.... $installation = \&quot;yes\&quot; } -Credentials $Creds -OutVariable $installation
[/code:1]

Ensuite, après mon Invoke j'ai un \&quot;if\&quot; qui permet selon le code de retour d'écrire dans un fichier txt
[code:1]
if ($Installation -like \&quot;yes\&quot;«»)
...
elseif ($Installation -like \&quot;no\&quot;«»)
...
else
... ETAT DE L'INSTALLATION INDETERMINE
[/code:1]

Vu que je n'ai aucune valeur qui sort pour ma variable $Installation, j'ai tout le temps marqué dans mon fichier de log que l'état de l'installation est indéterminé (le else)
Je voudrais juste que la valeur de la variable installation sorte du Invoke pour pouvoir appliquer correctement le if ensuite.

J'ai essayé le
[code:1]
Get-Variable Installation
[/code:1]
mais cela ne fonctionne pas :(

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

Plus d'informations
il y a 9 ans 8 mois #22052 par Laurent Dardenne
Là c'est plus parlant :)

Premier soucis, la substitution :
[code:1]
$Installation=\&quot;MonNom\&quot;
Invoke-command { write-output \&quot;yes\&quot; } -OutVariable $installation
#Yes
$Installation
#MonNom
$MonNom
#Yes
Invoke-command { write-output \&quot;yes\&quot; } -OutVariable Installation
[/code:1]
Le second étant d'émettre une valeur dans le pipeline.

Tu peux aussi simplifier et émettre une seule fois la valeur :
[code:1]
rv Installation
$isInstallationReussie=Invoke-command { write-output \&quot;yes\&quot; }
#Yes
$isInstallationReussie=Invoke-command { $result=\&quot;yes\&quot;; $result -eq \&quot;yes\&quot; }

[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 7/07/16 17:16

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 8 mois #22059 par Virtual76
Merci pour ta réponse Laurent,

J'ai du mal à comprendre comment la mettre en place.
Avant le invoke je déclare la variable installation
Ensuite je place un write-out \&quot;yes\&quot; et un -outvariable installation?

Voici ce que j'ai écris:
[code:1]

$installation=\&quot;ind\&quot; #indéterminé
Invoke-Command -ScriptBlock
{
#...
#mon script de 400 lignes
#test de l'installation
if ($installationdulogiciel -like \&quot;ok\&quot;«»)
{
write-output \&quot;yes\&quot;
}
#...

} -OutVariable $installation #fin du invoke

if ($installation -like \&quot;yes\&quot;«»)
{
#...écrire dans un fichier
}
[/code:1]

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

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