Pikus1234 0 Geschrieben 20. Juni 2017 Melden Teilen Geschrieben 20. Juni 2017 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? Zitieren Link zu diesem Kommentar
MurdocX 954 Geschrieben 20. Juni 2017 Melden Teilen Geschrieben 20. Juni 2017 (bearbeitet) 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 20. Juni 2017 von MurdocX Zitieren Link zu diesem Kommentar
Beste Lösung NilsK 2.958 Geschrieben 20. Juni 2017 Beste Lösung Melden Teilen Geschrieben 20. Juni 2017 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.