Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici

PowerShell et Windows Forms

Introduction

Lorsque vous administrez des systèmes et postes, il peut être très utile de pouvoir afficher des messages à l’utilisateur, des notifications, etc., pour indiquer un état d’installation ou alerter l’utilisateur.

Cela peut également vous être utile si vous souhaitez créer une application graphique ou un simple script qui doit demander une confirmation ou aller chercher un emplacement particulier sur le disque.

Pour faire cela, nous utiliserons une fonctionnalité native de Windows nommée Windows Forms. Nous verrons dans ce chapitre ce qu’est Windows Forms ainsi que différents cas d’usage.

Forcer l’aspect visuel moderne

Lorsque vous utilisez des composants visuels de Windows Forms, l’affichage s’affiche par défaut avec un aspect un peu désuet :

images/35RI01.png

Pour afficher vos boîtes de dialogue dans un mode un peu plus moderne, il faudra forcer l’affichage en utilisant la commande suivante :

[System.Windows.Forms.Application]::EnableVisualStyles() 

Ci-dessous le nouvel aspect visuel :

images/35RI02.png

Windows Forms

1. De quoi s’agit-il ?

Windows Forms, également nommé WinForms, représente le nom de l’interface graphique incluse dans le framework .NET.

Il s’agit d’une bibliothèque de classes permettant de créer des interfaces graphiques ou GUI (Graphic User Interface) pour donner plus de vie à vos scripts et qui permettra d’interagir avec l’utilisateur final, par exemple. Windows Forms permet de créer aussi bien de simples boîtes de dialogue que des applications ou des interfaces complexes.

2. Comment utiliser Windows Forms ?

Pour utiliser Windows Forms dans un script et afficher par exemple une simple boîte de dialogue, il faudra au préalable l’initialiser, en appelant l’assembly appropriée.

L’assembly concernée se nomme System.Windows.Forms.

Pour l’initialiser dans un script, il faudra utiliser la commande suivante :

Add-Type -AssemblyName System.Windows.Forms 

ou encore celle-ci :

[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') 

En lançant la dernière commande, PowerShell retourne le résultat suivant :

images/RI35_img1.png

Cela nous indique donc que la DLL utilisée pour se servir de Windows Forms est System.Windows.Forms.dll localisée dans le chemin suivant : C:\Windows\Microsoft.Net\assembly.

3. Boîte de dialogue simple

Dans ce premier exemple, nous souhaitons afficher un simple message à l’utilisateur. Si vous avez déjà utilisé VBScript, considérez que nous allons voir l’identique du MsgBox.

La première étape consiste donc à initialiser Windows Forms dans notre script puis à appliquer le style visuel moderne.

Add-Type -AssemblyName System.Windows.Forms 
[System.Windows.Forms.Application]::EnableVisualStyles() 

La seconde étape consiste à utiliser la classe MessageBox dans System.Windows.Forms.

[System.Windows.Forms.MessageBox] 

Nous utiliserons ensuite la méthode Show pour afficher un message....

Notification toast

Dans cette section, nous allons afficher une simple notification Windows.

Il s’agit de notifications que l’on qualifie dans le langage Windows de notifications toast. Vous pouvez les voir généralement lorsque le système vous indique qu’une mise à jour est installée ou qu’une action a été réalisée.

Nous allons configurer notre notification ainsi :

  • Titre : Bienvenue à tous

  • Message : Apprenons PowerShell ensemble

$title = "Bienvenue à tous" 
$message = "Apprenons PowerShell ensemble" 

Procédez comme ci-dessous :

 Chargez l’assembly System.Windows.Forms.

[reflection.assembly]::loadwithpartialname("System.Windows.Forms") 

 Spécifiez l’icône à afficher.

$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path) 

 Créez un objet notifyicon depuis Windows Forms.

$notify = new-object system.windows.forms.notifyicon 

 Intégrez l’icône dans le toast.

$notify.icon = $icon 

 Affichez le toast en mode visible.

$notify.visible = $true 

 Affichez la notification finale.

$notify.showballoontip(10,$title,$Message,[system.windows.forms
.tooltipicon]::info) 

Ci-dessous le code complet :

$title = "Bienvenue à tous" 
$message = "Apprenons PowerShell ensemble" 
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") ...