Question Portée des variables sur un bouton d'une interface

Plus d'informations
il y a 9 ans 8 mois #17891 par Laurent Dardenne
ANTRI Mohamed écrit:

Je trouve qu'en modifiant les portées souvent c'est une galère pour troubleshooter

J'utilise un système de log pour les scripts en prod.
Et les tests remontent souvent ce type de pb.

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 8 mois #17892 par Laurent Dardenne
anonym17 écrit:

tu vois une autre solution à mon problème?

Utiliser Get-Variable, mais pour le moment j'ai un doute.
Il y a peut être un bug sur l'accès à la variable nb déclaré dans l'appelant :
[code:1]
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Drawing')

$form = New-Object System.Windows.Forms.Form
$bouton_passer = New-Object System.Windows.Forms.Button

#$script:nb = 5
$nb = 5
$MyVar = -500

$bouton_passer.Location = New-Object System.Drawing.Point(260, 120)
$bouton_passer.Size = New-Object System.Drawing.Size(90, 50)
$bouton_passer.Text = 'Passer'
$bouton_passer.ImageAlign = 'MiddleCenter'

Function AddClick {
Write-host ('-' * 80)
write-host \"[Func] Before nb=$nb `t v.value=$($v.value)\"
$v.value++
$nb=256
write-host \"[Func] After nb=$nb `t v.value=$($v.value)\"
}#AddClick

$bouton_passer.Add_Click({
Write-host ('*' * 80)
write-host \"Delegate nb = $nb `t MyVar=$MyVar\"
#Renvoie bien la variable $nb déclarée dans la portée de l'appelant
#Get-variable n*|% { Write-host $_.name }
$v=Get-variable nb
write-host \"Before nb=$nb `t v.value=$($v.value) `t MyVar=$MyVar\"
Write-Warning \"nb*2. V contient la valeur d'origine de nb. MyVar+1\"
$nb*=2
$MyVar++
write-host \"Test nb*2= $nb `t v.value=$($v.value) `t MyVar=$MyVar\"
$v.value++
Write-Warning \"nb n'est pas modifié. V+1\"
write-host \"After nb=$nb `t v.value=$($v.value)\"
#write-host ([runspace]::«»DefaultRunspace.InstanceId)
AddClick
})

# Même pb si on utilise $nb
#$bouton_passer.Add_Click( { AddClick} )

$form.Location = New-Object System.Drawing.Point(0,0)
$form.ClientSize = New-Object System.Drawing.Size(1500,632)
$form.BackColor = 'GhostWhite'
$form.Text = 'Quizz Animaux'
$form.StartPosition = 'CenterScreen'
$form.Controls.Add($bouton_passer)
[runspace]::«»DefaultRunspace.InstanceId
$form.ShowDialog()

$nb
$v
$myvar
[/code:1]
Le comportement est bien différent avec la v2, les variables PS $NB et $V pointent bien sur le même objet. Mais pas avec la v3.
Si qq peux tester avec la V4 :P

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 8 mois #17894 par clément
merci pour toute ses réponses et si rapidement :P
effectivement, le fonctionnement de la portée des variables est peu documenté, bien que son fonctionnement soit assez simple.

je n'es malheureusement pas la V4, sinon j'aurai directement tester si le bug avais était corrigé.

Si j'ai une occasion de tester en V4, je ferais le test

Merci en tout cas de tes réponses ;)

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

Plus d'informations
il y a 9 ans 8 mois #17895 par clément
Au final, je me suis installé un PowerShell V4
Le problème est identique à la V3. :ohmy:<br><br>Message édité par: anonym17, à: 5/08/14 10:11

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

Plus d'informations
il y a 9 ans 8 mois #17898 par Laurent Dardenne
anonym17 écrit:

Au final, je me suis installé un PowerShell V4
Le problème est identique à la V3.

:S
Merci.

Il reste à vérifier sur MSConnect si ce pb est référencé, mais pour le moment la recherche n'y est pas opérationnelle.

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 5 mois #18368 par clément
je reviens sur se problème, où la portée de la variable est limité a l'exécution du bouton. la solution est donc de changer la portée de la variable que l'on veut récupérer
.
Maintenant, la même question se pose, mais cette fois pour le les fonctions.
Imaginons, par l'action d'un bouton, celui-ci exécute un fichier PS1 contenant des fonctions afin de les mettre en mémoire.
le problème est le même que pour les variables.
comment faire pour que ma fonction soit accessibles à tout mon script? car je ne pense pas que l'on puisse appliquer de portée sur une fonction à ma connaissance.

merci d'avance ;)

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

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