Résolu Problème pour récupérer des variables depuis une interface

Plus d'informations
il y a 1 mois 1 semaine - il y a 1 mois 1 semaine #33923 par Matthieu
Bon j'ai pas mal avancé mais j'ai un soucis à la fin de mon script. Mes variables $RemoteComputer$FilePath et $argumentsMSI sont vides...
Pourtant, dans mon script j'ai bien mis :
    $RemoteComputer = $textboxMachineName.Text
    $FilePath = $textboxFilePath.Text
    $argumentsMSI = $textboxArgumentsMSI.Text


et mes variables $textboxMachineName.Text$textboxFilePath.Text et $textboxArgumentsMSI.Text sont bien renseignées avec les valeurs que j'ai saisies dans l'interface graphique...
# Importation de la librairie
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Création de l'objet de formulaire
$form = New-Object System.Windows.Forms.Form
$form.Text = "Télédistribution"
$form.Size = New-Object System.Drawing.Size(600,230)
$form.StartPosition = "CenterScreen"

# Champ pour saisir le nom de la machine
$labelMachineName = New-Object System.Windows.Forms.Label
$labelMachineName.Text = "Nom de la machine ou adresse IP :"
$labelMachineName.Location = New-Object System.Drawing.Point(10,20)
$labelMachineName.AutoSize="$true"
$form.Controls.Add($labelMachineName)

$textboxMachineName = New-Object System.Windows.Forms.TextBox
$textboxMachineName.Location = New-Object System.Drawing.Point(190,15)
$textboxMachineName.Width=380
$form.Controls.Add($textboxMachineName)

# Bouton pour parcourir et sélectionner le fichier MSI
$labelFilePath = New-Object System.Windows.Forms.Label
$labelFilePath.Text = "Fichier MSI :"
$labelFilePath.Location = New-Object System.Drawing.Point(10,50)
$labelFilePath.AutoSize="$true"
$form.Controls.Add($labelFilePath)

$buttonBrowse = New-Object System.Windows.Forms.Button
$buttonBrowse.Text = "Parcourir"
$buttonBrowse.Location = New-Object System.Drawing.Point(190,45)
$buttonBrowse.Add_Click({
    $openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $openFileDialog.Filter = "Fichiers MSI (*.msi)|*.msi|Tous les fichiers (*.*)|*.*"
    $openFileDialog.Title = "Sélectionnez un fichier MSI"

    if ($openFileDialog.ShowDialog() -eq 'OK') {
        $textboxFilePath.Text = $openFileDialog.FileName
    }
})
$form.Controls.Add($buttonBrowse)

$textboxFilePath = New-Object System.Windows.Forms.TextBox
$textboxFilePath.Location = New-Object System.Drawing.Point(190,75)
$textboxFilePath.Width=380
$textboxFilePath.ReadOnly = $true
$form.Controls.Add($textboxFilePath)

# Champ pour saisir des arguments du fichier MSI
$labelArgumentsMSI = New-Object System.Windows.Forms.Label
$labelArgumentsMSI.Text = "Arguments du fichier MSI:"
$labelArgumentsMSI.Location = New-Object System.Drawing.Point(10,110)
$labelArgumentsMSI.AutoSize="$True"
$form.Controls.Add($labelArgumentsMSI)

$textboxArgumentsMSI = New-Object System.Windows.Forms.TextBox
$textboxArgumentsMSI.Location = New-Object System.Drawing.Point(190,105)
$textboxArgumentsMSI.Width=380
$form.Controls.Add($textboxArgumentsMSI)

# Bouton OK pour valider et fermer le formulaire
$buttonOK = New-Object System.Windows.Forms.Button
$buttonOK.Text = "Lancer la télédistribution"
$buttonOK.Location = New-Object System.Drawing.Point(410,145)
$buttonOK.AutoSize="$true"
$buttonOK.Add_Click({
    $RemoteComputer = $textboxMachineName.Text
    $FilePath = $textboxFilePath.Text
    $argumentsMSI = $textboxArgumentsMSI.Text
    $form.Close()
})
$form.Controls.Add($buttonOK)

# Affichage du formulaire
$form.ShowDialog()
Dernière édition: il y a 1 mois 1 semaine par Matthieu.

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

Plus d'informations
il y a 1 mois 1 semaine #33926 par Fabien
Matthieu,

Dans ton script, le problème est la portée de tes variables.
Les variables que tu déclares ont une portée limitée à ton ScriptBlock : $buttonOK.Add_Click({

Pour récupérer tes variables dans ton script, il faut les déclarer sous la forme suivante :
$buttonOK.Add_Click({
    $Script:RemoteComputer = $textboxMachineName.Text
    $Script:FilePath = $textboxFilePath.Text
    $Script:argumentsMSI = $textboxArgumentsMSI.Text
    $form.Close()
})


 

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

Plus d'informations
il y a 1 mois 1 semaine #33927 par Matthieu
Merci ça fonctionne mais je n'ai pas compris...

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

Plus d'informations
il y a 1 mois 1 semaine #33928 par Fabien
Petit Bonus 

Pour ne pas avoir de retour "Cancel" dans ton, il faut mettre ça:
# Affichage du formulaire
$form.ShowDialog() | Out-Null
Les utilisateur(s) suivant ont remercié: Matthieu

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

Plus d'informations
il y a 1 mois 1 semaine #33929 par Fabien
Voici un lien qui t'explique cette notion de portée de variable :
www.varonis.com/fr/blog/portee-variable-powershell
Les utilisateur(s) suivant ont remercié: Matthieu

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

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