Jump to content

GUI Dialogbox mit Variablen weiterverarbeiten


Direkt zur Lösung Gelöst von NilsK,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

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?

Link zu diesem Kommentar
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
Link zu diesem Kommentar
  • Beste 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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...