Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
Pikus1234

GUI Dialogbox mit Variablen weiterverarbeiten

Empfohlene Beiträge

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?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
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.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×