Blog de Augusto Simoes (MVP)

Sharepoint, OCS, Windows Server ...

Augusto Simoes

Consultant Infrastructure & Trainer

Ma mission est de concevoir les architectures de messageries unifiés et collaboratives afin d'accompagner nos clients vers ces nouvelles technologies.

  • Microsoft Certified Trainer
  • Microsoft Certified Systems Engineer
  • Microsoft Certified Technology Specialist :SharePoint, WSS, OCS 2007, Vista, Windows 2008
  • Microsoft Certified Database Administrator SQL 2000, 2005


MVP Logo


MyTag

Mon Profile Chez Microsoft



 

 

RecentComments

Comment RSS

[PowerShell] PowerShell et WPF…… Hyper Cool….

Cela fait plusieurs fois que je publie des scripts basé sur PowerShell, même si je m’attache souvent à en faire un Windows Forms, l’aspect graphique reste un peu… comment dire… plat! Et comme me dit Christopher, il y a un effort à faire au niveau du GUI. Tout à fait d’accord! Alors pourquoi ne pas essayer de rendre ces scripts dans une interface plus sympa en WPF????

Le but dans cet article n’est pas de décrire WPF, il y en a assez aujourd’hui sur Internet, mais de décrire comment je vais utiliser  WPF et récupérer les contôles dans Powershell.

Pour commencer, mettons en place un simple Canvas dans Visual Studio avec une ComboBox et une TextBox. Voila ce que cela donne dans Visual:

wpf

Du côté du code XAML:

<Window 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  Title="WPF Powershell Get-Command" Height="300" Width="500">
<Canvas>
<ComboBox Name="MyDrop" Height="25" Width="200" Canvas.Top="10" Canvas.Left="10" >
</ComboBox>
<TextBox Name="Mytexte" Height="100" Width="480" Canvas.Top="40" Canvas.Left="10" IsReadOnly="True">
 Mon Texte
</TextBox>
</Canvas>
</Window> 

Du côté de PowerShell comment intégrer cette interface plus sympa? En fait c’est assez simple, mais il y a des contraintes, qui sont les suivantes:

Pour faire fonctionner le processus PowerShell en mode STA, il suffit de lancer la commande ‘Powershell.exe –STA’ dans une invite de commande.

Récupérez le code XAML généré dans Visual Studio et l’utiliser comme valeur de variable de type XML dans PowerShell. Voici un script, totalement commenté, PowerShell qui utilise le code XAML généré dans Visual Studio:

#################################################################
# Chargement des Librairies
#################################################################
[Reflection.Assembly]::LoadWithPartialName("PresentationFramework")
[Reflection.Assembly]::LoadWithPartialName("PresentationCore")
[Reflection.Assembly]::LoadWithPartialName("WindowsBase")
#################################################################

#----------------------------------------------------------------
# Simple Get-Command utilisé pour peupler la DropDownBox dans WPF
#---------------------------------------------------------------- 
$My=get-command get-*
#----------------------------------------------------------------

#----------------------------------------------------------------
#Le code XAML envoyé dans une variable PowerShell
#----------------------------------------------------------------
[xml]$xaml = '
<Window 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  Title="WPF Powershell Get-Command" Height="300" Width="500">
<Canvas>
<ComboBox Name="MyDrop" Height="25" Width="200" Canvas.Top="10" Canvas.Left="10" >
</ComboBox>
<TextBox Name="Mytexte" Height="100" Width="480" Canvas.Top="40" Canvas.Left="10" 

IsReadOnly="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" Foreground="Red">
 Mon Texte
</TextBox>
</Canvas>
</Window>
' 
#--------------------------------------------------------------

#--------------------------------------------------------------
#Déclaration du code XML et de la Forms
#--------------------------------------------------------------
$wpf=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $wpf )
#--------------------------------------------------------------

#-------------------------------------------------------------
#Récupération des contrôles WPF dans PowerShell
#-------------------------------------------------------------
$btndrop = $Form.FindName('MyDrop')
$Output = $Form.FindName('Mytexte')
#-------------------------------------------------------------

#-------------------------------------------------------------
#Boucle sur le Get-Command pour chacune des commandes existantes
#Envoi de chacune des commandes dans le DropDownBox
#------------------------------------------------------------- 
foreach ($une in $My)
{
$btnDrop.Items.Add($une)| out-null
} 
#-------------------------------------------------------------

#-------------------------------------------------------------
#Ajustons une propriété du contrôle TextBox
#-------------------------------------------------------------
$btnDrop.ToolTip = "Sélectionnez le DropDownBox"
#-------------------------------------------------------------

#-------------------------------------------------------------
# Recupération de l'événement SelectionChanged du contrôle
#-------------------------------------------------------------
$btnDrop.add_SelectionChanged({$Output.AppendText("Alors! Elles seront plus jolies les interfaces de mes scripts PowerShell maintenant!")})
#-------------------------------------------------------------

$Form.ShowDialog() | out-null

Le résultat en image…

wpf_PowerShell

Dans le controle DropDownBox, se trouve le résultat du ‘Get-Command’ que nous avons envoyé:

WPF_PowerShell DropDownBox

Après plusieurs événements sur le contrôle….

WPF_PowerShell TextBox

Dans PowerShell, le type des contrôles est récupérable, ainsi que les méthodes, les événements est les propriétés:

GetType WPF

 WPF_PowerShell Events

Je vais pouvoir refaire tous mes scripts PowerShell en WPF sous Visual Studio… Euh! Non en fait, je n’aurais jamais le temps de les refaire tous… Vivement les prochaines vacances!

Technorati Tags: ,,,
Posted: Aug 29 2009, 19:28 by collaboration | Comments (3) RSS comment feed |
  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Dotnet-France | PowerShell

Comments

Christopher said:

Ah ben voilà, ils vont être beaux tes scripts maintenant Smile

# August 29 2009, 21:34

Julien Dollon said:

C'est là où on voit que t'es un boss Smile
Tu es le PREMIER admin compétent que je connais qui utilise des technos de développeur Smile
C'est bien continue !

# August 30 2009, 01:28

topsy.com said:

Pingback from topsy.com

Twitter Trackbacks for
        
        Blog de Augusto Simoes (MCT) | [PowerShell] PowerShell et WPF…… Hyper Cool….
        [dotnet-france.com]
        on Topsy.com

# April 11 2010, 13:09