Zum Inhalt wechseln


Foto

GUI Dialogbox mit Variablen weiterverarbeiten


  • Bitte melde dich an um zu Antworten
2 Antworten in diesem Thema

#1 Pikus1234

Pikus1234

    Newbie

  • 21 Beiträge

 

Geschrieben 20. Juni 2017 - 12:30

Hallo,

 

Ich möchte gern ein Script entwickeln, das über Eingabefelder PC-Namen aufliefert, welche dann weiterverarbeitet werden können.

 

ICh muss dazu sagen, Powershell-Anfänger pur!

 

Die Dialogbox soll eben die Eingabe grafischer darstellen.

 

Die eingegebenen PC-Namen sollen nun auf ihren Online-Status überprüft werden und anschließend entsprechend die Hardware abgefragt werden. 

 

1.) Eingabe der Namen über eine Messagebox

2.) Test auf Online-Status mit Bestätigung (Rücklieferung der IP-Adresse aktuell)

3.) Bei Offlinestatus soll das Script sich beenden bzw. keine weitere Abfrage starten

4.) Bei Onlinestatus dann Abfrage der Hardware incl. Speicherung in einer Excel-Tabelle

 

ICh habe die Hardwareabfrage schon fertig. Die Daten kann ich bereits auslesen.

 

Leider gelingt mir 1 - 3 niocht so richtig.

 

ICh schaffe es nicht die eingegebenen Daten weiter zu verarbeiten, da hab ich wohl einen Denkfehler drin oder komme nicht weiter, da egal welchen Wert ich verwende der Ping nicht läuft.

function button ($title,$PC1, $PC2, $PC3) {

###################Load Assembly for creating form & button######

[void][System.Reflection.Assembly]::LoadWithPartialName( “System.Windows.Forms”)
 [void][System.Reflection.Assembly]::LoadWithPartialName( “Microsoft.VisualBasic”)

#####Define the form size & placement

$form = New-Object “System.Windows.Forms.Form”;
 $form.Width = 500;
 $form.Height = 150;
 $form.Text = $title;
 $form.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen;

##############Define text label1
 $textLabel1 = New-Object “System.Windows.Forms.Label”;
 $textLabel1.Left = 25;
 $textLabel1.Top = 15;

$textLabel1.Text = $PC1;

##############Define text label2

$textLabel2 = New-Object “System.Windows.Forms.Label”;
 $textLabel2.Left = 25;
 $textLabel2.Top = 50;

$textLabel2.Text = $PC2;

##############Define text label3

$textLabel3 = New-Object “System.Windows.Forms.Label”;
 $textLabel3.Left = 25;
 $textLabel3.Top = 85;

$textLabel3.Text = $PC3;

############Define text box1 for input
 $textBox1 = New-Object “System.Windows.Forms.TextBox”;
 $textBox1.Left = 150;
 $textBox1.Top = 10;
 $textBox1.width = 200;

############Define text box2 for input

$textBox2 = New-Object “System.Windows.Forms.TextBox”;
 $textBox2.Left = 150;
 $textBox2.Top = 50;
 $textBox2.width = 200;

############Define text box3 for input

$textBox3 = New-Object “System.Windows.Forms.TextBox”;
 $textBox3.Left = 150;
 $textBox3.Top = 90;
 $textBox3.width = 200;

#############Define default values for the input boxes
 $defaultValue = “”
$textBox1.Text = $defaultValue;
 $textBox2.Text = $defaultValue;
 $textBox3.Text = $defaultValue;

#############define OK button
 $button = New-Object “System.Windows.Forms.Button”;
 $button.Left = 360;
 $button.Top = 80;
 $button.Width = 100;
 $button.Text = “Ok”;

 #############define cancel button
 $button1 = New-Object “System.Windows.Forms.Button”;
 $button1.Left = 360;
 $button1.Top = 15;
 $button1.Width = 100;
 $button1.Text = “cancel”;

############# This is when you have to close the form after getting values
 $eventHandler = [System.EventHandler]{
 $textBox1.Text;
 $textBox2.Text;
 $textBox3.Text;
 $form.Close();};

$button.Add_Click($eventHandler) ;
$button1.Add_Click($eventHandler) ;

#############Add controls to all the above objects defined
 $form.Controls.Add($button);
 $form.Controls.Add($button1);
 $form.Controls.Add($textLabel1);
 $form.Controls.Add($textLabel2);
 $form.Controls.Add($textLabel3);
 $form.Controls.Add($textBox1);
 $form.Controls.Add($textBox2);
 $form.Controls.Add($textBox3);
 $ret = $form.ShowDialog();

#################return values

$textBox1.Text, $textBox2.Text, $textBox3.Text
 }

$return= button “PC Namen mit Suffix eintragen!” “PC Namen 1” “PC Namen 2” “PC Namen 3”

$return[0]
$return[1]
$return[2] 

##############egal was ich beim Ping einsetze, bekomme ich keinen Ping mit den Return-##############Werten hin? 
$ping = Test-Connection ???????? -quiet
foreach($p in $ping)
{ 
   if ($p -eq $false) 
     {
      [System.Windows.Forms.MessageBox]::Show("PC nicht errerichbar!","PC-Status",0)
     }
 }

Viell. könnte jemand hier helfend ein paar Tipps geben?



#2 MurdocX

MurdocX

    Board Veteran

  • 585 Beiträge

 

Geschrieben 20. Juni 2017 - 14:46

Test-Connection

ist hier der Richtige Weg, jedoch solltest du dich bzgl. der Übergabeargumente noch etwas genauer einlesen. "-Quiet" Gibt einen "True" oder "False"-Wert zurück, die du mit einer IF-Schleife abfangen kannst.

 

Test-Connection | MSDN

https://msdn.microso...test-connection

 

 

Warum muss es denn unbedingt "grafisch aufbereitet" sein? Das macht es um einiges komplizierter. Alternativ:

$Ergebnis = Read-Host -Prompt "Dies ist meine Frage"

Bearbeitet von MurdocX, 20. Juni 2017 - 14:48.

Mit freundlicher Unterstützung
Jan


#3 NilsK

NilsK

    Expert Member

  • 12.463 Beiträge

 

Geschrieben 20. Juni 2017 - 15:08   Lösung

Moin,

 

wenn es grafisch sein soll und dein Unternehmen bereit ist, eine geringe Summe für nützliche Tools auszugeben, empfehle ich ISESteroids von Tobias Weltner. Das ist eine Erweiterung, mit der aus der PowerShell ISE eine vollwertige Entwicklungsumgebung wird. Nicht nur, aber eben auch für "echte" grafische PowerShell-Oberflächen.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!