Question Première form convertie (Résolu)

Plus d'informations
il y a 14 ans 3 mois #1108 par balek
Bonjour

J'ai utiliser votre superscript qui permet de convertir du C# en Powershell.
Ca marche parfaitement.
J'ai tenté de modifé ensuite le script mais j'ai un petit souci :

J'ai un bouton et un label. Comme dans l'un de vos tuto, je voudrais faire apparaitre la reponse dans le label.
La reponse serait le resultat de la commande gwmi win32_computerSystemProduct

Mais bon ca marche pas encore .

Voici le code :

[code:1][void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$button1 = new-object System.Windows.Forms.Button
$label1 = new-object System.Windows.Forms.Label
#
# button1
#
$button1.Location = new-object System.Drawing.Point(158, 366)
$button1.Name = \"button1\"
$button1.Size = new-object System.Drawing.Size(194, 48)
$button1.TabIndex = 0
$button1.Text = \"Test System\"
$button1.UseVisualStyleBackColor = $true
#
# label1
#
$label1.Location = new-object System.Drawing.Point(12, 44)
$label1.Name = \"label1\"
$label1.Size = new-object System.Drawing.Size(488, 270)
$label1.TabIndex = 1
$label1.Text = \"label1\"
#
$Form1 = new-object System.Windows.Forms.form
# Form1
#
$Form1.ClientSize = new-object System.Drawing.Size(512, 440)
$Form1.Controls.Add($label1)
$Form1.Controls.Add($button1)
$Form1.Name = \"Form1\"
$Form1.Text = \"Form1\"
$Form1.ShowDialog()

$sys=get-WmiObject win32_computersystemproduct

$boutton1.add_Click({$label1.text=\"Reponse :\" + $sys})

#$Form1.Add_Shown({$form1.Activate()})
#[void]$form1.showdialog() [/code:1]

Voila,j'ai vraiment pas touché grand chose mais ds Powershellanalyser j'ai :

ERROR: Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
ERROR: Au niveau de ligne : 34 Caractère : 20
ERROR: + $boutton1.add_Click( <<<< {$label1.text=\"Reponse :\" + $sys})


Voilou, merci d'avance pour vos lumieres eclairées ;)

Message édité par: balek, à: 11/10/07 10:23<br><br>Message édité par: Arnaud, à: 16/10/07 13:08

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #1109 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Premiere form
Deux erreurs pour le prix d'une :)

1) Il y a une coquille dans le nom du contrôle: $boutton1 au lieu de $button1.

2) Tu affectes une action au bouton après l'avoir ajouté au formulaire, donc l'action n'est pas prise en compte.

Le script corrigé (avec au passage la simplification de la syntaxe pour la création de la chaîne):

[code:1]
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
$button1 = new-object System.Windows.Forms.Button
$label1 = new-object System.Windows.Forms.Label
#
# button1
#
$button1.Location = new-object System.Drawing.Point(158, 366)
$button1.Name = \&quot;button1\&quot;
$button1.Size = new-object System.Drawing.Size(194, 48)
$button1.TabIndex = 0
$button1.Text = \&quot;Test System\&quot;
$button1.UseVisualStyleBackColor = $true
$button1.add_Click({$label1.text=\&quot;Reponse : $sys\&quot;})
#
# label1
#
$label1.Location = new-object System.Drawing.Point(12, 44)
$label1.Name = \&quot;label1\&quot;
$label1.Size = new-object System.Drawing.Size(488, 270)
$label1.TabIndex = 1
$label1.Text = \&quot;label1\&quot;
#
$Form1 = new-object System.Windows.Forms.form
# Form1
#
$Form1.ClientSize = new-object System.Drawing.Size(512, 440)
$Form1.Controls.Add($label1)
$Form1.Controls.Add($button1)
$Form1.Name = \&quot;Form1\&quot;
$Form1.Text = \&quot;Form1\&quot;
$Form1.ShowDialog()

$sys = get-WmiObject win32_computersystemproduct



#$Form1.Add_Shown({$form1.Activate()})
#[void]$form1.showdialog() [/code:1]
Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #1125 par balek
Réponse de balek sur le sujet Re:Premiere form
Effectivment, deux erreurs grossieres !!

Merci.

Je bloque de nouveaux sur un ptit truc.
J'ai donc repris plus ou moins le tuto du site sur les form et j'ai esseyé de mettre a ma sauce pour m'entrainer :

[code:1][void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
$listBox1 = new-object System.Windows.Forms.ListBox
$button1 = new-object System.Windows.Forms.Button
$button2 = new-object System.Windows.Forms.Button
$button3 = new-object System.Windows.Forms.Button
$label1 = new-object System.Windows.Forms.Label
$label2 = new-object System.Windows.Forms.Label
#
$nom=$listbox1.get_selecteditem()
# listBox1
#
#$listBox1.BackColor = System.Drawing.Color.Silver
$listBox1.FormattingEnabled = $true
$listBox1.Location = new-object System.Drawing.Point(16, 51)
$listBox1.Name = \&quot;listBox1\&quot;
$listBox1.Size = new-object System.Drawing.Size(205, 394)
$listBox1.TabIndex = 0
[void]$listbox1.Items.Add(\&quot;ho-dt-03800\&quot;«»)
[void]$listbox1.Items.Add(\&quot;ho-sv-ad001\&quot;«»)
[void]$listbox1.Items.Add(\&quot;ho-sv-ad002\&quot;«»)
[void]$listbox1.Items.Add(\&quot;europe-sv-ad001\&quot;«»)
#
# button1
#
$button1.Location = new-object System.Drawing.Point(41, 463)
$button1.Name = \&quot;button1\&quot;
$button1.Size = new-object System.Drawing.Size(137, 40)
$button1.TabIndex = 1
$button1.Text = \&quot;button1\&quot;
$button1.UseVisualStyleBackColor = $true
#$button1.add_click{$label1.cl
$button1.add_Click({$nom=$listbox1.get_selecteditem();$label1.text = \&quot;Reponse :\&quot; +$sys})
#$button1.add_Click({$label1.text = \&quot;Reponse : $sys\&quot;})
#

# button2
#
$button2.Location = new-object System.Drawing.Point(267, 463)
$button2.Name = \&quot;button2\&quot;
$button2.Size = new-object System.Drawing.Size(138, 39)
$button2.TabIndex = 2
$button2.Text = \&quot;S/N\&quot;
$button2.UseVisualStyleBackColor = $true
#$button2.add_Click({$label1.text=\&quot;Le numero de séries est : $sys\&quot;})
$button2.add_Click({$label1.text = \&quot;Le numero de séries du pc local est: \&quot; + $sysL})
#
# button3
#
$button3.Location = new-object System.Drawing.Point(489, 463)
$button3.Name = \&quot;button3\&quot;
$button3.Size = new-object System.Drawing.Size(136, 39)
$button3.TabIndex = 3
$button3.Text = \&quot;HDD\&quot;
$button3.UseVisualStyleBackColor = $true
$button3.add_click({$label1.text=\&quot; Le disque fait : $hdd Go\&quot;})
#
# label1
#
#$label1.BackColor = System.Drawing.Color.Silver
$label1.Location = new-object System.Drawing.Point(400, 56)
$label1.Name = \&quot;label1\&quot;
$label1.Size = new-object System.Drawing.Size(443, 389)
$label1.TabIndex = 4
#
# label2
#
$label2.Location = new-object System.Drawing.Point(25, 12)
$label2.Name = \&quot;label2\&quot;
$label2.Size = new-object System.Drawing.Size(195, 27)
$label2.TabIndex = 5
$label2.Text = \&quot;LAN\&quot;
#$label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
#
$Form1 = new-object System.Windows.Forms.form
# Form1
#
$Form1.ClientSize = new-object System.Drawing.Size(900, 537)
$Form1.Controls.Add($label2)
$Form1.Controls.Add($label1)
$Form1.Controls.Add($button3)
$Form1.Controls.Add($button2)
$Form1.Controls.Add($button1)
$Form1.Controls.Add($listBox1)
$Form1.Name = \&quot;Form1\&quot;
$Form1.Text = \&quot;Form1\&quot;
$Form1.ShowDialog()
#
#
$sysL=(Get-WmiObject win32_computersystemproduct).identifyingnumber
$sys= Get-WmiObject -computername $nom win32_computersystemproduct
$hdd=(gwmi Win32_DiskDrive).Size /1073741824[/code:1]

Rien de bien compliquer dans on utilise les converter de C#.

Bref, je voulais utiliser le clic dans la listbox pour selectionner un computer et lancer une commande wmi afin de me recuperer les infos du pc.
Ca fonctionne mais ca garde toujours le meme pc en memoire.

Par exemple, si je ferme en cliquant en dernier sur ho-sv-ad001, lors de la prochaine excution du script, j'aurais un win32_computersystemproduct de ce server.

Vous avez une idee pour ameliorer cela ?

Merci.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #1135 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Premiere form
Le problème vient du fait que tes variables $sys, $sysl et $hdd sont assignées une fois pour toutes (en fin de script qui plus est). Leur valeur ne peut donc pas changer en cours de script selon la sélection de l'utilisateur.

Le plus simple consiste à créer une fonction correspondant à la fonctionnalité proposée par chaque bouton et, dans le Add_Click() du bouton, appeler cette fonction avec le paramètre qui va bien (à savoir le nom du PC sélectionné).

Voici un exemple simplifié qui, au lieu d'interroger des PC, propose de récupérer l'espace libre des disques logiques du PC local. C'est surtout pour te montrer comment coder l'appel à la fonction qui fournira l'info.

[code:1]
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
$listBox1 = new-object System.Windows.Forms.ListBox
$button1 = new-object System.Windows.Forms.Button
$label1 = new-object System.Windows.Forms.Label

# listBox1

$listBox1.FormattingEnabled = $true
$listBox1.Location = new-object System.Drawing.Point(16, 51)
$listBox1.Name = \&quot;listBox1\&quot;
$listBox1.Size = new-object System.Drawing.Size(205, 394)
$listBox1.TabIndex = 0
get-wmiobject win32_logicaldisk | foreach {[void]$listbox1.Items.Add($_.DeviceID)}

# button1

$button1.Location = new-object System.Drawing.Point(41, 463)
$button1.Name = \&quot;button1\&quot;
$button1.Size = new-object System.Drawing.Size(137, 40)
$button1.TabIndex = 1
$button1.Text = \&quot;Espace libre\&quot;
$button1.UseVisualStyleBackColor = $true
$button1.add_Click({
$nom = $listbox1.get_selecteditem()
$label1.Text = \&quot;Espace libre sur $nom : \&quot; + [math]::round((get-freespace $nom)/1GB,2) + \&quot; Go\&quot;
})

function get-freespace ($drive) {
(get-wmiobject win32_logicaldisk -filter \&quot;DeviceID='$drive'\&quot;«»).freespace
}

# label1

$label1.Location = new-object System.Drawing.Point(400, 56)
$label1.Name = \&quot;label1\&quot;
$label1.Size = new-object System.Drawing.Size(443, 389)
$label1.TabIndex = 4

# Form1

$Form1 = new-object System.Windows.Forms.form
$Form1.ClientSize = new-object System.Drawing.Size(900, 537)
$Form1.Controls.Add($label1)
$Form1.Controls.Add($button1)
$Form1.Controls.Add($listBox1)
$Form1.Name = \&quot;Form1\&quot;
$Form1.Text = \&quot;Form1\&quot;
$Form1.ShowDialog()[/code:1]
Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #1162 par balek
Réponse de balek sur le sujet Re:Premiere form
Merci encore !!;)

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.067 secondes
Propulsé par Kunena