Überwachung der Verfügbarkeit von Hosts in PowerShell

Hallo zusammen, ich möchte eine einfache Anleitung teilen: „Wie man das manuelle Pingen von mehreren Hosts einstellen kann. Ohne Registrierung und SMS!“.

Überwachung der Verfügbarkeit von Hosts in PowerShellAus den Weiten des Internets

Wichtig: Ich bin kein Programmierer und kein Systemadministrator, aber ich arbeite gleichzeitig mit einer Vielzahl von Server Diensten, und dieses Skript habe ich zu meinem eigenen Komfort geschrieben.

Wer Interesse hat, ich lade euch ein, weiterzulesen.

Warum Powershell?Ich habe Erfahrung im Schreiben einfacher Programme in Python, aber das erfordert entweder einen installierten Interpreter oder die Berechtigung zum Ausführen von .exe, was in meinem Arbeitsrahmen nicht immer möglich ist. Ein Powershell-Skript findet hingegen oft die Möglichkeit, ausgeführt zu werden.

Nicht jeder mag die Konsole/ das Terminal

Ich denke, das ist nicht widersprüchlich. Andernfalls würden wir alle immer noch Konsolen-Mail-Clients verwenden, und in *nix-Systemen würde kein GUI existieren.

Da ich Powershell in meinem Alltag recht rudimentär verwenden muss, habe ich zunächst versucht zu verstehen, ob man ihm ein GUI hinzufügen kann. Es stellt sich heraus, dass es möglich ist, und das sogar relativ einfach:

Überwachung der Verfügbarkeit von Hosts in PowerShell

Add-Type -assembly System.Windows.Forms #Wir fügen die Bibliothek hinzu
$main_form = New-Object System.Windows.Forms.Form #Wir erstellen ein Objekt für unser "Fenster"

#Wir setzen die Parameter
$main_form.Text ='Links aktiv' #Titel im Header
$main_form.Width = 300 #Breite des Fensters
$main_form.Height = 200 #Höhe des Fensters
$main_form.AutoSize = $true #Wir erlauben es, die Größe bei Bedarf automatisch zu ändern
$main_form.ShowDialog() #Wir rufen das "Fenster" auf

Wir fügen diesem Ausgabe-Element hinzu und erhalten ein einfaches Windows-Fenster. Ist das eine Tautologie?.

Überwachung der Verfügbarkeit von Hosts in PowerShell

Add-Type -assembly System.Windows.Forms #Wir binden die Bibliothek ein

$main_form = New-Object System.Windows.Forms.Form #Wir erstellen eine Variable für unser "Fenster"

#Wir legen die Parameter für das Fenster fest
$main_form.Text ='Links up' #Titel des Fensters
$main_form.Width = 300 #Breite des Fensters
$main_form.Height = 200 #Höhe des Fensters
$main_form.AutoSize = $true #Erlaubt dem Fenster, sich bei Bedarf automatisch anzupassen

$Label = New-Object System.Windows.Forms.Label #Alle Elemente des Formulars werden in Variablen gespeichert, sind aber tatsächlich Objekte, wie jede andere Variable in Powershell
$Label.Text = "Hallo! Ich bin ein einfaches Windows-Fenster, und was hast du erreicht?" #Anzuzeigender Text
$Label.Location  = New-Object System.Drawing.Point(10,65) #Position des Objekts innerhalb des Fensters (x,y)
$Label.AutoSize = $true 

$main_form.Controls.Add($Label) #Wir fügen das erstellte Objekt dem Fenster hinzu, damit es während der Scriptausführung nicht verloren geht

$main_form.ShowDialog() #Wir zeigen das einfache Fenster an

Lass uns Dynamik hinzufügen

So hat das Tool, das ich zum "Pingen von Yandex" benutzt habe und mit dem ich *.iso verbunden habe, eine separate GUI erhalten. Aber das reicht nicht. Auf ähnliche Weise kann man Informationen zur Verfügbarkeit anzeigen, aber um die Überwachung durchzuführen, muss man das Skript jedes Mal neu starten.

Lass uns zunächst zwei Icons zeichnen und die Möglichkeit hinzufügen, Bilder anzuzeigen.

Überwachung der Verfügbarkeit von Hosts in PowerShell

$PictureBox = New-Object system.Windows.Forms.PictureBox #Das Objekt zur Anzeige von Bildern ist recht logisch benannt
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)

#Hier gehen wir zur Sache, indem wir das anzuzeigende Bild mit dem Ergebnis der Erreichbarkeit des Knotens verknüpfen, indem wir das Cmdlet
#<b>test-connection</b>, wo:
#-Count - überträgt die Anzahl der Anfragen
#-computer - IP oder Domainname für die Anfrage
#-quiet - damit uns nur der Boolean-Wert zurückgegeben wird
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
	$PictureBox.imageLocation = "C:Testyes.png" #Das Objekt greift auf das entsprechende Bild zu 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Das Objekt greift auf das entsprechende Bild zu 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$main_form.Controls.Add($PictureBox)

Unsere DNS-Anbieter machen wieder Probleme...

Überwachung der Verfügbarkeit von Hosts in PowerShell
Und wir fügen noch einen Button hinzu, um die Werte aktualisieren zu können.

Überwachung der Verfügbarkeit von Hosts in PowerShell

$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(100,150) 
$Button.Size = New-Object System.Drawing.Size(80,30)
$Button.Text = "Neu laden"

# Wir hängen an das Click-Ereignis des Buttons eine Aktion an, die entsprechend der zuvor beschriebenen Logik auf jedes PictureBox zugreift
$Button.Add_Click({ 
	if ((Test-Connection -Count 1 -computer ya.ru -quiet) -eq $True)
		{$PictureBox.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox.imageLocation	= "C:Testno.png"}
	  
	if ((Test-Connection -Count 1 -computer 8.8.8.8 -quiet) -eq $True)
		{$PictureBox1.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox1.imageLocation	= "C:Testno.png"}
 	})

$main_form.Controls.Add($Button)

Überwachung der Verfügbarkeit von Hosts in PowerShell

Wunderbar, jetzt in die Produktion!?

Nachdem ich manuell etwa ein Dutzend Hosts eingetragen habe, wurde mir plötzlich klar — dieses Projekt wird enden, die Hosts werden sich ändern und ich werde jedes Mal das Skript anpassen müssen. Auf der einen Seite ist das nicht schlimm, es ist schließlich eine Lösung für mich selbst. Auf der anderen Seite, schauen Sie sich an, was dabei herauskommt:

Ein Anblick nicht für schwache Nerven

Add-Type -assembly System.Windows.Forms #Wir binden die Bibliothek ein

$main_form = New-Object System.Windows.Forms.Form #Wir erstellen eine Variable für unser "Fenster"

#Wir setzen die Parameter für das Fenster
$main_form.Text = 'Links online' #Name in der Überschrift
$main_form.Width = 300 #Breite des Fensters
$main_form.Height = 200 #Höhe des Fensters
$main_form.AutoSize = $true #Aktivieren der automatischen Größenanpassung bei Bedarf

$Label = New-Object System.Windows.Forms.Label #Alle Formularelemente werden in Variablen gespeichert, sind aber letztlich Objekte, wie andere Variablen in PowerShell
$Label.Text = "ya.ru		............................" #Anzuzeigender Text
$Label.Location  = New-Object System.Drawing.Point(15,10) #Position des Objekts innerhalb des Fensters (x,y)
$Label.AutoSize = $true 

$Label1 = New-Object System.Windows.Forms.Label #Alle Formularelemente werden in Variablen gespeichert, sind aber letztlich Objekte, wie andere Variablen in PowerShell
$Label1.Text = "8.8.8.8		............................" #Anzuzeigender Text Googles DNS
$Label1.Location  = New-Object System.Drawing.Point(15,30) #Position des Objekts innerhalb des Fensters (x,y)
$Label1.AutoSize = $true 

$Label2 = New-Object System.Windows.Forms.Label
$Label2.Text = "192.168.x.x	............................"
$Label2.Location  = New-Object System.Drawing.Point(15,50)
$Label2.AutoSize = $true

$Label3 = New-Object System.Windows.Forms.Label
$Label3.Text = "192.168.x.x	............................"
$Label3.Location  = New-Object System.Drawing.Point(15,70)
$Label3.AutoSize = $true

$Label4 = New-Object System.Windows.Forms.Label
$Label4.Text = "10.0.x.x	 ............................"
$Label4.Location  = New-Object System.Drawing.Point(15,90)
$Label4.AutoSize = $true

$Label5 = New-Object System.Windows.Forms.Label
$Label5.Text = "162.102.x.x	 ............................"
$Label5.Location  = New-Object System.Drawing.Point(15,110)
$Label5.AutoSize = $true

$PictureBox = New-Object system.Windows.Forms.PictureBox #Objekt zum Anzeigen von Bildern, der Name ist recht logisch
$PictureBox.width = 10
$PictureBox.height = 10

#Hier binden wir das Anzeigen des Bildes an das Ergebnis der Überprüfung der Erreichbarkeit des Knotens mithilfe des Cmdlets
#<b>test-connection</b>, wo:
#-Count - gibt die Anzahl der Anfragen an
#-computer - IP oder Domain-Name für die Anfrage
#-quiet - damit nur ein Boolean-Wert zurückgegeben wird
$PictureBox.location = New-Object System.Drawing.Point(235,12)
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
	$PictureBox.imageLocation = "C:Testyes.png" #Objekt verweist auf das entsprechende Bild 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Objekt verweist auf das entsprechende Bild 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Objekt zur Anzeige von Bildern heißt ganz logisch
$PictureBox1.width = 10
$PictureBox1.height = 10
$PictureBox1.location = New-Object System.Drawing.Point(235,32)
if ((test-connection -Count 1 -computer 8.8.8.8 -quiet) -eq $True) {
	$PictureBox1.imageLocation = "C:Testyes.png" #Objekt verweist auf das entsprechende Bild 
}
Else {
	$PictureBox1.imageLocation = "C:Testno.png" #Objekt verweist auf das entsprechende Bild 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Objekt zur Anzeige von Bildern heißt ganz logisch
$PictureBox2.width = 10
$PictureBox2.height = 10
$PictureBox2.location = New-Object System.Drawing.Point(235,52)
if ((test-connection -Count 1 -computer 192.168.x.x -quiet) -eq $True) {
	$PictureBox2.imageLocation = "C:Testyes.png" #Objekt verweist auf das entsprechende Bild 
}
Else {
	$PictureBox2.imageLocation = "C:Testno.png" #Objekt verweist auf das entsprechende Bild 
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Objekt zur Anzeige von Bildern heißt ganz logisch
$PictureBox3.width = 10
$PictureBox3.height = 10
$PictureBox3.location = New-Object System.Drawing.Point(235,72)
if ((test-connection -Count 1 -computer 192.168.x.x -quiet) -eq $True) {
	$PictureBox3.imageLocation = "C:Testyes.png" #Objekt verweist auf das entsprechende Bild 
}
Else {
	$PictureBox3.imageLocation = "C:Testno.png" #Objekt verweist auf das entsprechende Bild 
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Objekt zur Anzeige von Bildern heißt ganz logisch
$PictureBox4.width = 10
$PictureBox4.height = 10
$PictureBox4.location = New-Object System.Drawing.Point(235,92)
if ((test-connection -Count 1 -computer 10.0.x.x -quiet) -eq $True) {
	$PictureBox4.imageLocation = "C:Testyes.png" #Objekt verweist auf das entsprechende Bild 
}
Else {
	$PictureBox4.imageLocation = "C:Testno.png" #Objekt verweist auf das entsprechende Bild 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Objekt zur Anzeige von Bildern heißt ganz logisch
$PictureBox5.width = 10
$PictureBox5.height = 10
$PictureBox5.location = New-Object System.Drawing.Point(235,112)
if ((test-connection -Count 1 -computer 162.102.x.x -quiet) -eq $True) {
	$PictureBox5.imageLocation = "C:Testyes.png" #Objekt verweist auf das entsprechende Bild 
	}
Else {
	$PictureBox5.imageLocation = "C:Testno.png" #Objekt verweist auf das entsprechende Bild 
	}
$PictureBox5.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(100,150) 
$Button.Size = New-Object System.Drawing.Size(80,30)
$Button.Text = "Neu laden"

# An das Ereignis des Knopfes wird für jedes PictureBox gemäß der zuvor beschriebenen Logik angehängt
$Button.Add_Click({ 
	if ((Test-Connection -Count 1 -computer ya.ru -quiet) -eq $True)
		{$PictureBox.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox.imageLocation	= "C:Testno.png"}
	  
	if ((Test-Connection -Count 1 -computer 8.8.8.8 -quiet) -eq $True)
		{$PictureBox1.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox1.imageLocation	= "C:Testno.png"}

	if ((Test-Connection -Count 1 -computer 192.168.x.x -quiet) -eq $True)
		{$PictureBox2.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox2.imageLocation	= "C:Testno.png"}

	if ((Test-Connection -Count 1 -computer 192.168.x.x -quiet) -eq $True)
		{$PictureBox3.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox3.imageLocation	= "C:Testno.png"}

	if ((Test-Connection -Count 1 -computer 10.0.x.x -quiet) -eq $True)
		{$PictureBox4.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox4.imageLocation	= "C:Testno.png"}

	if ((Test-Connection -Count 1 -computer 162.102.x.x -quiet) -eq $True)
		{$PictureBox5.imageLocation	= "C:Testyes.png"}
	Else {$PictureBox5.imageLocation	= "C:Testno.png"}
	})

$main_form.Controls.Add($Label) #fügen Sie das erstellte Objekt zur Form hinzu, damit es während der Skriptausführung nicht verloren geht
$main_form.Controls.Add($Label1)
$main_form.Controls.Add($Label2)
$main_form.Controls.Add($Label3)
$main_form.Controls.Add($Label4)
$main_form.Controls.Add($Label5)
$main_form.Controls.Add($PictureBox)
$main_form.Controls.Add($PictureBox1)
$main_form.Controls.Add($PictureBox2)
$main_form.Controls.Add($PictureBox3)
$main_form.Controls.Add($PictureBox4)
$main_form.Controls.Add($PictureBox5)
$main_form.Controls.Add($Button)

$main_form.ShowDialog() #Wird die elementarste Dialogbox angezeigt

Selbst wenn man die Sauberkeit einhält und der Struktur folgt, wird die regelmäßige Bearbeitung nicht gerade angenehme Gefühle hervorrufen.

Zuerst bringen wir die Verfügbarkeitsprüfung in eine separate Funktion und den Pfad zum Verzeichnis in eine eigene Variable.

$script_path	= "C:TestPS ping"

#Wir wechseln zur Funktion mit dem bereits erstellten Objekt PictureBox und der IP-Adresse, die überprüft werden soll.
#Ausgabe ändert das geladene Bild.
function get_status($PictureBox,$path_ip) {
	if ((Test-Connection -Count 1 -computer $path_ip -quiet) -eq $True)
		{$PictureBox.imageLocation	= $script_path + "yes.png"}
	Else {$PictureBox.imageLocation	= $script_path + "no.png"} 
	}

Legen wir die Hostdaten in einer externen Datei path.txt ab, im Format „ip/host-funktionaler-name/“, und lesen sie in Dokumenten als Arrays ein. Zudem automatisieren wir die Y-Positionsberechnung etwas mehr. Das ermöglicht uns, Labels und Checkboxen per Funktionsaufruf zu erstellen:

Überwachung der Verfügbarkeit von Hosts in PowerShell

#создаем описательную линию, на вход идут: объект Label, IP-адресс, описание и позиция по оси Y
Function Create_line($label,$path_ip,$caption, $top){ 
	$label.Location = New-Object System.Drawing.Point(1, $top)
	$label.text = $path_ip+$caption
	$label.font = $font
	$Label.AutoSize = $true
	}
#создаем индикатор для описательной линию, на вход идут: объект PictureBox, IP-адресс и позиция по оси Y
Function Create_link($PictureBox,$path_ip, $top){ 
	$PictureBox.width	= 10
	$PictureBox.height	= 10
	$PictureBox.location	= New-Object System.Drawing.Point(210,$top)
	get_status -PictureBox $PictureBox -path_ip $path_ip
	$PictureBox.SizeMode	= [System.Windows.Forms.PictureBoxSizeMode]::zoom
	}

$line = Get-content -LiteralPath $script_path"path.txt" #вытаскиваем данные о необходимых хостах
$len = $line.Length	#вычисляем длину, а точнее массив длин каждой строки

$i = 0

#далее объявляем массивы которые понадобятся дальше
$ip = @()	#массив ip
$capt = @()	#массив описания
$Labels =@()	#массив Label
$PictureBoxs =@()	#массив PictureBox

while($i -lt $len){
	$f = $line[$i].IndexOf("/") #вычисляем позицию начала описания
	$l = $line[$i].LastIndexOf("/")	#вычисляем позицию конца описания
	$ip += $line[$i].Substring(0,$f)	#вытаскиваем ip
	$capt += $line[$i].Substring($f+1,$l-$f-1)	#вытаскиваем описание

	#создаем поле Label
	Create_line -label ($label_obj = New-Object System.Windows.Forms.Label) -path_ip $ip[$i] -caption $capt[$i] -top $label_from_top
	#создаем поле PictureBox
	Create_link -PictureBox ($PictureBox_obj = New-Object system.Windows.Forms.PictureBox) -path_ip $ip[$i] -top $label_from_top

	$label_from_top += 15	#делаем "шаг" по оси Y

	$Labels	+= $label_obj	#вносим созданный Label в общий массив
	$PictureBoxs	+= $PictureBox_obj	#вносим созданный PictureBox в общий массив
	$main_form.Controls.Add($Labels[$i])
	$main_form.Controls.Add($PictureBoxs[$i])
	$i	+=1
	}

Fügen wir einen Platz für die Ausgabe der letzten Prüfzeit hinzu, was praktisch ist, und erweitern wir die Aktion bei einem Button-Klick ein wenig.

Überwachung der Verfügbarkeit von Hosts in PowerShell

$Label0	= New-Object System.Windows.Forms.Label
$Label0.Text	= Get-Date
$Label0.Location	= New-Object System.Drawing.Point(80,180)
$Label0.AutoSize	= $true
$main_form.Controls.Add($Label0)
$Button.Add_Click({ 
	while($i -lt $len){
		get_status -PictureBox $PictureBoxs[$i] -path_ip $ip[$i]
		$i +=1
		}
	$Label0.Text	= Get-Date 
	})

Außerdem habe ich ein kleines Feature hinzugefügt, das bei der Erkennung eines nicht erreichbaren Hosts nicht nur den Statusindikator ändert, sondern auch aus den Lautsprechern warnt.

Add-Type -AssemblyName System.Speech
$voice	= New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate	= 5
$voice.Speak("Warnung! Warnung! Basis ist unter Angriff!")

Nach einigen Anpassungen und einer leserlicheren Formatierung sieht es jetzt so aus:

Vollständiger Code des Scripts

Add-Type -AssemblyName System.Speech
Add-Type -assembly System.Windows.Forms

$script_path	= "C:PS ping"
$label_from_top	= 10
$voice	= New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate	= 5

# Wir übergeben das bereits erstellte PictureBox-Objekt und die IP-Adresse, die überprüft werden soll.
# Am Ende ändert es das angezeigte Bild.
function get_status($PictureBox,$path_ip) {
	if ((Test-Connection -Count 1 -computer $path_ip -quiet) -eq $True) {
		$PictureBox.imageLocation	= $script_path + "yes.png"
		}
	Else {
		$PictureBox.imageLocation	= $script_path + "no.png"
		$voice.Speak("Fehler! Host " + $path_ip + ", nicht erreichbar!")
		}
	}

# Erstellen einer beschreibenden Zeile, Eingänge: Label-Objekt, IP-Adresse, Beschreibung und Y-Position
Function Create_line($label,$path_ip,$caption, $top){ 
	$label.Location	= New-Object System.Drawing.Point(1, $top)
	$label.text	= $path_ip+$caption
	$label.font	= $font
	$Label.AutoSize	= $true
	}

# Erstellen eines Indikators für die beschreibende Zeile, Eingänge: PictureBox-Objekt, IP-Adresse und Y-Position
Function Create_link($PictureBox,$path_ip, $top){ 
	$PictureBox.width	= 10
	$PictureBox.height	= 10
	$PictureBox.location	= New-Object System.Drawing.Point(210,$top)
	get_status -PictureBox $PictureBox -path_ip $path_ip
	$PictureBox.SizeMode	= [System.Windows.Forms.PictureBoxSizeMode]::zoom
	}

$main_form	= New-Object System.Windows.Forms.Form
$main_form.Text ='Verbindungen' #Name im Titel
$main_form.Width = 300 #Fensterbreite
$main_form.Height = 200 #Fensterhöhe
$main_form.AutoSize = $true #Erlauben, dass es sich selbst anpasst, wenn notwendig
$main_form.TopMost	= $true #Dies ist wichtig, es erlaubt das Fenster, über anderen zu bleiben

$line = Get-content -LiteralPath $script_path"path.txt" #Daten über die benötigten Hosts abrufen
$len = $line.Length	#Länge berechnen, genauer gesagt die Längen jedes Strings

$i = 0

#Hier erklären wir Arrays, die wir später benötigen
$ip	= @()	#IP-Array
$capt	= @()	#Beschreibung-Array
$Labels	=@()	#Label-Array
$PictureBoxs	=@()	#PictureBox-Array

while($i -lt $len){
	$f	= $line[$i].IndexOf("/") #Position des Anfangs der Beschreibung finden
	$l	= $line[$i].LastIndexOf("/")	#Position des Endes der Beschreibung finden
	$ip	+= $line[$i].Substring(0,$f)	#IP extrahieren
	$capt	+= $line[$i].Substring($f+1,$l-$f-1)	#Beschreibung extrahieren

	#Label-Feld erstellen
	Create_line -label ($label_obj = New-Object System.Windows.Forms.Label) -path_ip $ip[$i] -caption $capt[$i] -top $label_from_top
	#PictureBox-Feld erstellen
	Create_link -PictureBox ($PictureBox_obj = New-Object system.Windows.Forms.PictureBox) -path_ip $ip[$i] -top $label_from_top

	$label_from_top	+= 15	#„Schritt“ auf der Y-Achse erhöhen

	$Labels	+= $label_obj	#Erstellt Label in das Gesamt-Array einfügen
	$PictureBoxs	+= $PictureBox_obj	#Erstellt PictureBox in das Gesamt-Array einfügen
	$main_form.Controls.Add($Labels[$i])
	$main_form.Controls.Add($PictureBoxs[$i])
	$i	+=1
}

#Feld mit der letzten Überprüfungszeit
$Label0	= New-Object System.Windows.Forms.Label
$Label0.Text	= Get-Date
$Label0.Location	= New-Object System.Drawing.Point(80,180)
$Label0.AutoSize	= $true


# Dem Ereignis eines Button-Klicks den Bezug zu jedem PictureBox gemäß der zuvor beschriebenen Logik zuweisen
$Button	= New-Object System.Windows.Forms.Button
$Button.Location	= New-Object System.Drawing.Size(100,200)
$Button.Size	= New-Object System.Drawing.Size(80,30)
$Button.Text	= "Neu laden"

$Button.Add_Click({ 
	while($i -lt $len){
		get_status -PictureBox $PictureBoxs[$i] -path_ip $ip[$i]
		$i	+=1
		}
	$i	= 0
	$Label0.Text	= Get-Date 
})

$main_form.Controls.Add($Button)
$main_form.Controls.Add($Label0)

$main_form.ShowDialog()

Nachwort

Ich hoffe, dieser Leitfaden ist für jemanden nützlich. Wenn Sie das von Anfang an gemacht haben, herzlichen Glückwunsch, ich habe das nicht. Aber ich bin bereit, Ihre Kommentare und Vorschläge anzuhören.

Es hat mir Spaß gemacht, diese kleine, aber nützliche Dienstprogrammsammlung zusammenzustellen. Zukünftig plane ich, die Möglichkeit hinzuzufügen, Knoten über die GUI zu verwalten, sowie eine automatische Aktualisierung der Statusanzeigen zu implementieren, ohne dass ich auf eine Schaltfläche klicken muss und ohne dass es "powershell.exe" zum Absturz bringt.

Die neueste Version des Skripts finden Sie auf GitHub

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster