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 :

Test process avec MessageBox et test retour des boutons Yes ou No [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 28
    Points : 26
    Points
    26
    Par défaut Test process avec MessageBox et test retour des boutons Yes ou No
    Bonjour,
    J'essaie de m’initier à Powershell mais j'ai un peu voir beaucoup de mal . J'aimerais savoir si quelqu'un peut m'aider sur mon problème. J'ai une fonction qui permet d'afficher une messageBox avec 2 boutons Oui et Non, je test si un process d'une application est présent (ici pour l'exemple c'est NotePadaMoi) si l'appli (le process) est présente j'affiche une boite de dialogue demandant à la personne si elle veut la fermer en cliquant sur Oui ( je kill le process) et si elle clique sur Non je sort du script. Mon problème c'est que j'ai bien la messageBox qui apparait avec les 2 choix mais mon test sur les boutons ne fonctionne pas cela me kill à chaque fois l'application NotePadaMoi ? Je tourne en rond Je vous met le script pour plus de compréhension .
    Merci d'avance pour votre aide

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    function Show-MessageNotePadaMoi {
     
    param (
        [string]$Message = "Attention NotePadaMoi est ouvert sur votre poste Voulez-vous le fermer ?",
        [string]$Titre = "Disponibilité NotePadaMoi sur Poste",
        [switch]$OKCancel,
        [switch]$AbortRetryIgnore,
        [switch]$YesNoCancel,
        [switch]$YesNo,
        [switch]$RetryCancel,
        [switch]$IconErreur,
        [switch]$IconQuestion,
        [switch]$IconAvertissement,
        [switch]$IconInformation
        )
     
    # Affecter la valeur selon le type de boutons choisis
    if ($OKCancel) { $Btn = 1 }
    elseif ($AbortRetryIgnore) { $Btn = 2 }
    elseif ($YesNoCancel) { $Btn = 3 }
    elseif ($YesNo) { $Btn = 4 }
    elseif ($RetryCancel) { $Btn = 5 }
    else { $Btn = 0 }
     
    # Affecter la valeur pour l'icone 
    if ($IconErreur) {$Icon = 16 }
    elseif ($IconQuestion) {$Icon = 32 }
    elseif ($IconAvertissement) {$Icon = 48 }
    elseif ($IconInformation) {$Icon = 64 }
    else {$Icon = 0 }
     
     
    # Charger la biblithèque d'objets graphiques Windows.Forms
    [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
     
    # Afficher la boite de dialogue et renvoyer la valeur de retour (bouton appuyé)
    $Reponse = [System.Windows.Forms.MessageBox]::Show($Message, $Titre , $Btn, $Icon)
    Return $Reponse
    }
     
    $ProcessPath="$Env:USERPROFILE\AppData\Local\NotePadaMoi"
    $NameOfProcess="NotePadaMoi"
     
     
    if ($_.ProcessName -eq $NameOfProcess) {Show-MessageNotePadaMoi -Message "Attention l'application NotePadaMoi est ouverte sur votre poste, voulez-vous la fermer ?" -Titre "Disponibilité NotePadaMoi sur poste" -YesNo -IconQuestion}
     
    if ($Reponse -eq "Yes") {
                            Get-Process|Where {$_.ProcessName -eq $NameOfProcess}|  Foreach {$_.Kill()}
                            }
    else {
          exit
         }

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, Intune)
    Inscrit en
    juillet 2014
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, Intune)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 2 547
    Points : 4 608
    Points
    4 608
    Par défaut
    Pourquoi n'utilises tu pas les types appropriés dans ta fonction ? C'est beaucoup plus sympa quand tu souhaites appeler la fonction je trouve.
    Voici un exemple avec le test sur la valeur de retour.

    Plus d'info sur la surcharge que tu utilise de "MessageBox.Show" : https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx
    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
    function Show-MessageNotePadaMoi
    {
     
        param (
        [string]$Message = "Message",
        [string]$Titre = "Titre",
        [System.Windows.Forms.MessageBoxButtons]$Buttons = [System.Windows.Forms.MessageBoxButtons]::OK,
        [System.Windows.Forms.MessageBoxIcon]$Icon = [System.Windows.Forms.MessageBoxIcon]::None
        )
     
        # Charger la bibliothèque d'objets graphiques Windows.Forms
        [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
     
        # Afficher la boite de dialogue et renvoi la valeur de retour (de type DialogResult)
        Return [System.Windows.Forms.MessageBox]::Show($Message, $Titre, $Buttons, $Icon)
    }
     
    $reponse = Show-MessageNotePadaMoi "Attention l'application NotePadaMoi est ouverte sur votre poste, voulez-vous la fermer ?" -Titre "Disponibilité NotePadaMoi sur poste" -Buttons YesNo -Icon Question
     
    if($reponse -eq [System.Windows.Forms.DialogResult]::Yes)
    {
        Write-Host "Yes"
    }
    ElseIf($reponse -eq [System.Windows.Forms.DialogResult]::No)
    {
        Write-Host "No"
    }
    Else
    {
        Write-Host "Autre"
    }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Bonsoir,

    Merci pour le coup de main rapide et pour cette méthode qui parait bien plus clair, je vais lire les infos Microsoft (il faut bien que je m’améliore ...) et je vais testé cela demain au boulot

    Si tout est OK je repasse pour mettre en résolu.

    Thx

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Bon j'ai testé la gestion des boutons fonctionne bien, par contre je n'arrive pas à gérer l'affichage de cette messageBox après avoir fait le test sur le process


    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
     
    $ProcessPath="$Env:USERPROFILE\AppData\Local\NotePadaMoi"
    $NameOfProcess="NotePadaMoi"
     
    if ($_.ProcessName -eq $NameOfProcess) {$reponse = Show-MessageNotePadaMoi "Attention l'application NotePadaMoi est ouverte sur votre poste, voulez-vous la fermer ?" -Titre "Disponibilité NotePadaMoi sur poste" -Buttons YesNo -Icon Question}
     
    if($reponse -eq [System.Windows.Forms.DialogResult]::Yes)
    {
        Get-Process|Where {$_.ProcessName -eq $NameOfProcess}| Foreach {$_.Kill()}
    }
    ElseIf($reponse -eq [System.Windows.Forms.DialogResult]::No)
    {
        exit
    }

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, Intune)
    Inscrit en
    juillet 2014
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, Intune)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 2 547
    Points : 4 608
    Points
    4 608
    Par défaut
    "$_.ProcessName" n'existe pas dans ta condition, il manque un bout de code ou une erreur de ta part.

    Merci d'utiliser les balises [CODE=powershell]

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Bonjour,
    Merci de ton aide, du coup j'ai fait plus simple (je ne sais pas si le code est propre mais cela fonctionne bien lorsque le process NotepadaMoi est ouvert je peux le killer ou ne rien faire. Par contre si le process n'est pas actif j'ai quand même le message
    J'ai mis les balises mais je n'ai pas le bon affichage je suis une vrai quiche
    Et encore merci pour l'aide

    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
     
     
    $ProcessPath="$Env:USERPROFILE\AppData\Local\NotePadaMoi"
    $NameOfProcess="NotePadaMoi"
    $Process=Get-Process $NameOfProcess -ea SilentlyContinue
     
    if ($Process = $NameOfProcess) {$reponse = Show-MessageNotePadaMoi "Attention l'application NotePadaMoi est ouverte sur votre poste, voulez-vous la fermer ?" -Titre "Disponibilité NotePadaMoi sur poste" -Buttons YesNo -Icon Question}
     
    if($reponse -eq [System.Windows.Forms.DialogResult]::Yes)
    {
         if ($Process -ne $Null) {Stop-Process -Name $NameOfProcess}
    }
    ElseIf($reponse -eq [System.Windows.Forms.DialogResult]::No)
    {
    exit
    }

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, Intune)
    Inscrit en
    juillet 2014
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, Intune)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 2 547
    Points : 4 608
    Points
    4 608
    Par défaut
    On est tous des quiches, Il faut juste fermer la balise par de code par [/CODE]
    Tu peut générer les balises avec l’icône en haut a droite # mais après il faut ajouter le =powershell

    Voici le code que je te propose. On peux le factoriser encore mais je le laisse comme ça pour plus de lisibilité.
    J'ai supprimé $ProcessPath qui ne sert pas pour l'exemple. Et modifié certaines autres choses.
    Comprend tu ce code ?

    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
    $NameOfProcess = "NotePadaMoi"
     
    function Show-Message
    {
        param (
        [string]$Message = "Message",
        [string]$Titre = "Titre",
        [System.Windows.Forms.MessageBoxButtons]$Buttons = [System.Windows.Forms.MessageBoxButtons]::OK,
        [System.Windows.Forms.MessageBoxIcon]$Icon = [System.Windows.Forms.MessageBoxIcon]::None
        )
     
        # Charger la bibliothèque d'objets graphiques Windows.Forms
        [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
     
        # Afficher la boite de dialogue et renvoi la valeur de retour (de type DialogResult)
        Return [System.Windows.Forms.MessageBox]::Show($Message, $Titre, $Buttons, $Icon)
    }
     
    if (Get-Process -Name $NameOfProcess -ErrorAction SilentlyContinue)
    {
        $reponse = Show-Message "Attention l'application $NameOfProcess est ouverte sur votre poste, voulez-vous la fermer ?" -Titre "Disponibilité $NameOfProcess sur poste" -Buttons YesNo -Icon Question
        if($reponse -eq [System.Windows.Forms.DialogResult]::Yes)
        {
            Stop-Process -Name $NameOfProcess -ErrorAction SilentlyContinue
        }
    }
    exit

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    mai 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2012
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Bonjour.

    Merci pour le coup de main ça marche nickel, je pense comprendre ce code mais comme je l’intègre dans un code plus important, j'ai fait le test sur le bouton Oui (je ferme le process et je continue le script) et Non ( je sort du script) car sinon je sortait systématiquement du script. Je te met le code si tu trouves qu'il n'est pas très présentable n’hésites pas à me corriger

    Encore merci pour tout, je mettrais en résolu un peu plus tard après peut être tes remarques ou pas

    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
     
    $NameOfProcess = "NotePadaMoi"
     
    function Show-Message
    {
        param (
        [string]$Message = "Message",
        [string]$Titre = "Titre",
        [System.Windows.Forms.MessageBoxButtons]$Buttons = [System.Windows.Forms.MessageBoxButtons]::OK,
        [System.Windows.Forms.MessageBoxIcon]$Icon = [System.Windows.Forms.MessageBoxIcon]::None
        )
     
        # Charger la bibliothèque d'objets graphiques Windows.Forms
        [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
     
        # Afficher la boite de dialogue et renvoi la valeur de retour (de type DialogResult)
        Return [System.Windows.Forms.MessageBox]::Show($Message, $Titre, $Buttons, $Icon)
    }
     
    if (Get-Process -Name $NameOfProcess -ErrorAction SilentlyContinue)
    {
        $reponse = Show-Message "Attention l'application $NameOfProcess est ouverte sur votre poste, voulez-vous la fermer ?" -Titre "Disponibilité $NameOfProcess sur poste" -Buttons YesNo -Icon Question
        if($reponse -eq [System.Windows.Forms.DialogResult]::Yes)
        {
            Stop-Process -Name $NameOfProcess -ErrorAction SilentlyContinue
        }
        ElseIf($reponse -eq [System.Windows.Forms.DialogResult]::No)
    {
        exit
    }
    }

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, Intune)
    Inscrit en
    juillet 2014
    Messages
    2 547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, Intune)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 2 547
    Points : 4 608
    Points
    4 608
    Par défaut
    Oui c'est bie,n tu as ajouté le ElseIf{...} avec le exit dedans uniquement ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MessageBox] et traduction libellé des boutons
    Par Droïde Système7 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/08/2010, 19h04
  2. Graphique avec matplotlib, probléme d'affichage des boutons
    Par astragoth dans le forum Général Python
    Réponses: 0
    Dernier message: 08/04/2010, 08h27
  3. Lancer des tests nocturnes avec Maven2
    Par Dev_info dans le forum Maven
    Réponses: 6
    Dernier message: 19/03/2008, 12h11
  4. Tests unitaires avec vbUnit sur des contrôles utilisateurs
    Par Patrick Mortas dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/09/2006, 18h06
  5. Avec quel logiciel libre réaliser des boutons web ?
    Par Jiraiya42 dans le forum Webdesign & Ergonomie
    Réponses: 8
    Dernier message: 25/04/2006, 09h26

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