Bonjour à tous,
Je me permet de creer se post pour regrouper mes avancés sur un projet qui me tiens à cœur,
je tiendrais ce post régulièrement à jour avec les dernière MàJ de mon script.
Objectif :
Utiliser du code généré par KODA (autoit)et le "transformer" en code Powershell/windows.form grace à ce script.
si vous ne connaissez pas KODA : => http://www.autoitscript.com/forum/to...ner-koda-1730/
Besoin Initial :
Creer facilement des interfaces graphique pour scripts powershell.
Quel admin n'a pas eu une fois l'envie de creer une petite interface graphique pour PS ?
certes plusieurs solution s'offre rapidement à nous mais pas forcement des plus pratique :
- VB : oui avec vb et du coups ses outils dédier on retrouve qq editeur de Forms WYSIWYG mais, je suis relativement allergique au VB...
- Hta + Powershell : on peux tjs essayer de bidouiller avec les editeur WYSIWYG online pour générer des HTA mais bon, pas génial non plus.
- AutoIT : jusque là c'est vers cette solution que je me tournais, KODA permet facilement la creation d'un GUI mais en revanche, l'echange de données entre script PS <> et autoit n'est pas tjs des plus évident et demande souvent des traitement de résultat, assez laborieux...
- powershell + Windows Forms : là le résultat est là mais le travail de design est assez laborieux, les outils WYSIWYG sont tous payant (en tout cas ceux que j'ai trouvé comme powershell studio de SAPIEN.)
Donc rien de gratuit et pratique...
mon idée est donc d'attaquer du code que j'aurais généré avec KODA pour générer automatiquement mon interface Windows.form.
exemple de code KODA :
ce code générer en moins de 30 sec sur koda permet de créer une fenetre avec un champs texte, un bouton, et un label.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 156, 236, 192, 124) $Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21) $Button1 = GUICtrlCreateButton("Button1", 32, 32, 75, 25) $Label1 = GUICtrlCreateLabel("Label1", 8, 72, 124, 153) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ###
voici mon script actuel (loin d'etre fini) :
dans ce script, le code générer par KODA est dans un fichier nommer : ".\test2.koda"
Code : 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
53
54
55
56
57
58
59
60
61 function GUICreate ([string]$title , $width , $height , $left , $top) { # Créer la Form $script:Form1 = New-Object System.Windows.Forms.Form # Titre $script:Form1.Text = $title # Définit la taille $script:Form1.Size = New-Object System.Drawing.Size($width,$height) # Emplacement, si -1 -1 = centre sinon <<A FAIRE - emplacement fixe>> if (($left -eq -1) -and $top -eq -1) { $script:Form1.StartPosition = "centerscreen" }} function GUICtrlCreateButton( $label, $left, $top , $width , $height ) { $script:OKButton = New-Object System.Windows.Forms.Button $script:OKButton.Location = New-Object System.Drawing.Size($left,$top) $script:OKButton.Size = New-Object System.Drawing.Size($width,$height) $script:OKButton.Text = $label #$OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close()}) $script:Form1.Controls.Add($script:OKButton) #echo $OKButton.Text } function GUICtrlCreateInput( $text, $left, $top , $width , $height ) { $script:TextBox = New-Object System.Windows.Forms.TextBox $script:TextBox.Location = New-Object System.Drawing.Size($left, $top) $script:TextBox.Size = New-Object System.Drawing.Size($width , $height) $script:TextBox.text = $text $script:Form1.Controls.Add($script:TextBox) } # met la fenetre au premier plan # << A FAIRE - bug en dessous à voir >> #$Form1.Add_Shown({$Form.Activate()}) # affiche Le formulaire $a = Get-Content (".\test2.koda") $a = ($a).Replace(",", " ") $a = ($a).Replace("(", " ") $a = ($a).Replace(")", " ") Foreach ( $line in $a ) { echo $line if ($line -match "guicreate" -or $line -match "GUICtrlCreateButton" -or $line -match "GUISetState" -or $line -match "GUICtrlCreateInput" ) { $line = $line.Split("=")[-1] iex $line }} function GUISetState($a){ $script:Form1.Topmost = $True [void] $script:Form1.ShowDialog() }
Comme vous pourrez le constater, le but est simple : transformer une ligne de type :
$Form1 = GUICreate("Form1", 156, 236, 192, 124)
en
function définit comme suit :
à terme en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part GUICreate "Form1" 156 236 192 124
histoire de gérer la creation de plusieurs objets.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $Form1 = GUICreate "Form1" 156 236 192 124
Voila ce qui m'attend xD
Je ne suis pas sure de m'etre exprimé clairement, pas sure que cela interesse du monde, mais quoi qu'il en soit, je reviendrais souvent pour des question technique en référence à ce script au vue de mon niveau en powershell xD
je reste à votre dispo pour toutes demande d'information, ce script à pour but d'etre une alternative "efficace" ou outils payant et au full scripting.
Etat actuel du script :
Ce qui marche à l'heure actuelle :
GUICreate : Crée l'objet Form au bonne proportion, si les valeur top et left sont à -1 lui donne comme emplacement par defaut le centre de l'ecran.
GUICtrlCreateButton : affiche un bouton au bonne proportions, et au bon emplacement
GUICtrlCreateInput : affiche un champs texte, au bonne proportions, et au bon emplacement
Ce qu'il reste à faire :
Généralité :
- de manière générale, il me faut au sein des diverses fonctions intégrer une variable qui aura pour but de "nommer" le champs creer,
cette variable devra prendre le nom de la valeur présente avant le signe "="
ex : $Form1 = GUICreate("Form1", 156, 236, 192, 124)
- Séléction de la zone à analyser dans le fichier koda :
il faut limiter la zone de traitement entre les limites suivantes :
#Region ### START Koda GUI section ### et #EndRegion ### END Koda GUI section ###- définir les type de variable et les valeurs par défaut.
GUICreate :
- gérer l'emplacement initial de la fenetre s'il il a été définit (autre que -1,-1).
GUICtrlCreateButton :
- Prise en charge de l'action lié.
GUICtrlCreateInput :
GUICtrlCreateLabel :
- à faire
GUICtrlCreateRadio:
- à faire
- gestion des groupes de boutons.
GUICtrlCreateCombo :
- à faire
GUICtrlCreateCheckbox
- à faire
- gestion des groupes de boutons
GUICtrlCreateList
- à faire
bon voilà ou j'en suis... je bosse dessus actuellement et mettrais à jour le scripts ici,
si ce script interesse du monde, n'hésitez pas à me le dire, un peu de motivation en plus ne me fera pas de mal;
si vous désirez bosser un peu dessus ou avoir qq infos dessus n'hésitez pas non plus
ps : merci à ceux qui m'ont deja aider à en arriver ici !
Partager