IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Erreur syntaxe appel fonction depuis bouton


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 66
    Points : 54
    Points
    54
    Par défaut Erreur syntaxe appel fonction depuis bouton
    Bonjour,

    J'ai un problème de syntaxe mais je ne vois ce qui cloche, même après avoir cherché sur le net...

    le problème se situe lorsque le user quitte la textbox tBoxcomp (contenant un nom d'ordi) rien ne se passe et pas d'erreur affichée. Logiquement il a renseigné le nom d'un ordi et le fait de quitter la case appelle la function Testping qui doit m'afficher si le poste répond ou pas, j'ai essayé une autre syntaxe avec une function Ecrit mais pas mieux....

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Add-Type –AssemblyName System.Windows.Forms
       Add-Type -AssemblyName System.Drawing
     
       $MainForm = New-Object System.Windows.Forms.Form
       $MainForm.Text="PrinterInstaller"
       $MainForm.StartPosition =  "CenterScreen"
       $MainForm.Width = 500
       $MainForm.Height = 500
       $MainForm.TopMost = $True 
       $MainForm.Add_Shown({$tBoxcomp.Select()})
     
     
       Function Testping {
       Param($Computername)
        if (Test-Connection -$Computername -Quiet) {write 'ok'} else {write 'nok'}
     
     
                         }
     
    Function Ecrit ($nom)
      {Write-Host $nom}
     
     
       $labelordi = New-Object System.Windows.Forms.Label
       $labelordi.Location = New-Object System.Drawing.Point(10,20)
       $labelordi.Size = New-Object System.Drawing.Size(120,20)
       $labelordi.Text = 'Nom de l''ordinateur :'
       $MainForm.Controls.Add($labelordi)
     
       $tBoxcomp = New-Object System.Windows.Forms.TextBox
       $tBoxcomp.Location = New-Object System.Drawing.Point(10,40)
       $tBoxcomp.Size = New-Object System.Drawing.Size(100,20)
       $Comp=$tBoxcomp.text
       $tBoxcomp.add_Leave({Ecrit $Comp})
       $tBoxcomp.add_Leave({Testping $Comp})
       $MainForm.Controls.Add($tBoxcomp)
     
     
     
     
     $MainForm.ShowDialog()

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    tu as un problème de portée, essaie ceci
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       $tBoxcomp.add_Leave(
         {
           $Comp=$tBoxcomp.text
           Ecrit $Comp
         }
        )
       $tBoxcomp.add_Leave(
           {
              $Comp=$tBoxcomp.text
             Testping $Comp
           }
        )
    Et place des traces dans ton code cela permet de voir ce que tu manipules :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function Ecrit{
        param($nom)
     Write-Host "Nom='$nom'"
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    Salut Laurent,

    Merci de ta réponse ça fonctionne avec ma fonction "bidon" Ecrit mais pas avec la fonction Testping. Du coup j'ai essayé comme ça mais pas mieux. c'est un peu incompréhensible étant donné que la valeur est bien chargée dans la variable $nom puisqu'elle s'affiche et d'un autre côté si je teste Test-Connection directement dans la console avec cette syntaxe minimaliste ça fonctionne, mais pas au sein d'une fonction appelé depuis un événement...

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function Ecrit{
        param($nom)
     Write-Host "Nom='$nom'"
     (Test-Connection $nom -Quiet) #{write 'ok'} else {write 'nok'}
    }


    Qu'entends tu par laisser des traces? mettre des #annotations dans le code ou mettre les }) sur des lignes différentes? Question de débutant

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par riko60
    Du coup j'ai essayé comme ça mais pas mieux.
    Quelle version de Powershell utilises-tu ? Je t'ai testé rapido le code sous PS v5.1 W10 1803
    Essaie en ne déclarant qu'un seul appel:
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       $tBoxcomp.add_Leave(
         {
           $Comp=$tBoxcomp.text
           Ecrit $Comp
           Testping $Comp
         }
       )
    Tu peux également ajouter un bouton pour déclencher ton traitement, l'event leave n'est pas spécialement fait pour cela, si je parcourt tous les composant avec la touche Tab je déclencherai le traitement à chaque passage, même si la valeur est identique.
    Citation Envoyé par riko60
    D'un autre côté si je teste Test-Connection directement dans la console avec cette syntaxe minimaliste ça fonctionne, mais pas au sein d'une fonction appelé depuis un événement...
    Normal que cela soit différent ce n'est pas le même contexte d'exécution. Du coup les 2 deux contexte doivent pouvoir partager des données. La porté script se charge de cela. Je retesterais demain si j'ai le temps...
    Citation Envoyé par riko60
    Qu'entends tu par laisser des traces?
    Placer des affichage de debug, on peut utiliser ceci :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    Write-Debug "Nom='$nom'"
    Mon usage de write-host c'était à l'arrache ;-)

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    Laurent Dardenne;10914547]Quelle version de Powershell utilises-tu ? Je t'ai testé rapido le code sous PS v5.1 W10 1803
    Tout pareil chez moi.

    Avec un seul appel idem, affichage nom ok puis semble réfléchir et au final rien, ça peut pas être un problème d'output de la commande Test-connection dans le contexte d'une fonction? J'espère ne pas écrire de grosses conneries

    La solution du bouton n'est pas top, je reproduit un soft déjà existant sous python qui a une bonne ergonomie d'utilisation. Lidée au final c'est de rentrer un nom d'ordi et en quittant la textbox si le poste répond la couleur du fond devient verte à contrario rouge, ensuite idem pour le nom de l'imprimante renseignée dans un autre champ. Reste plus qu'à sélectionner les drivers et à cliquer sur l'unique bouton installer. Moi je le refais en Powershell car il a besoin d'être mis à jour et je veux apprendre à maitriser PS.

    Je ferai d'autres tests aussi, si j'ai le temps demain. Merci de ton aide.

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2017
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    J'ai trouvé la solution en m'inspirant de ce site.

    https://social.technet.microsoft.com...rverpowershell


    Je referai des tests pour voir ce que cela donne, quand je repasse le test-connection dans une fonction.

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $tBoxcomp = New-Object System.Windows.Forms.TextBox
       $tBoxcomp.Location = New-Object System.Drawing.Point(10,40)
       $tBoxcomp.Size = New-Object System.Drawing.Size(100,20)
       $Comp=$tBoxcomp.text
       $tBoxcomp.add_Leave({
               $Comp=$tBoxcomp.text
    	if (Test-Connection $Comp -Quiet -Count 1)		{
    		$tBoxcomp.backcolor= 'green'
    	}else{
    		$tBoxcomp.backcolor= 'red'
       }
       })

Discussions similaires

  1. [syntaxe] appel fonction pour cacher un formulaire
    Par helene38250 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/11/2008, 11h58
  2. Erreur sur appel fonction par Input/onclick
    Par heberco dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/09/2008, 19h46
  3. [PHP-JS] appel fonction par bouton
    Par dimi2 dans le forum Langage
    Réponses: 16
    Dernier message: 01/07/2008, 20h30
  4. Pb syntaxe appel fonction DLL
    Par kimlee dans le forum C++
    Réponses: 4
    Dernier message: 04/10/2007, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo