Einen guten Tag allerseits, ich möchte eine einfache Anleitung teilen: "Wie man aufhören kann, manuell ein Dutzend Hosts zu pingen. Ohne Registrierung und SMS!".
Aus dem Internet
Wichtig: Ich bin kein Programmierer und kein Systemadministrator, aber ich muss gleichzeitig mit einer großen Anzahl Server von Diensten arbeiten, und dieses Skript habe ich zu meinem eigenen Komfort geschrieben.
Alle, die dies nützlich finden könnten, sind neugierig, ich bitte um mehr Informationen.
Warum PowershellIch habe Erfahrung im Schreiben einfacher Programme in Python, aber es erfordert entweder einen installierten Interpreter oder das Recht, .exe-Dateien auszuführen, was im Rahmen meiner Arbeit nicht immer möglich ist. Ein Skript in Powershell hat jedoch häufig die Möglichkeit, ausgeführt zu werden.
Nicht jeder mag die Konsole/Terminal
Ich denke, darin liegt kein Widerspruch, denn sonst würden alle immer noch Konsolen-E-Mail-Clients nutzen und in *nix-Systemen wäre keine GUI entstanden.
Da ich Powershell in meinem Alltag eher rudimentär nutze, habe ich zunächst versucht zu verstehen, ob man ihm eine GUI hinzufügen kann. Es stellt sich heraus, dass es geht und sogar recht einfach ist:

Add-Type -assembly System.Windows.Forms #Bibliothek einbinden
$main_form = New-Object System.Windows.Forms.Form #Ein Objekt für unser "Fenster" erstellen
#Parameter festlegen
$main_form.Text ='Links up' #Titel
$main_form.Width = 300 #Breite des Fensters
$main_form.Height = 200 #Höhe des Fensters
$main_form.AutoSize = $true #Ermöglichen, dass es sich bei Bedarf selbst anpasst
$main_form.ShowDialog() #"Fenster" öffnen
Fügen Sie diesem Ausgabeelement hinzu und wir erhalten ein elementares Windows-Fenster — ist das eine Tautologie?.

Add-Type -assembly System.Windows.Forms #Verbinden Sie die Bibliothek
$main_form = New-Object System.Windows.Forms.Form #Erstellen wir eine Variable für unser "Fenster"
#Setzen wir die Parameter über Parameter
$main_form.Text ='Links up' #Titel
$main_form.Width = 300 #Fensterbreite
$main_form.Height = 200 #Fensterhöhe
$main_form.AutoSize = $true #Erlauben Sie ihm, die Größe nach Bedarf selbst zu ändern
$Label = New-Object System.Windows.Forms.Label #Alle Formelemente werden in Variablen gespeichert, sind aber eigentlich Objekte, wie alle anderen Variablen in Powershell
$Label.Text = "Hallo! Ich bin ein einfaches Windows-Fenster, was hast du erreicht?" #Auszugebender Text
$Label.Location = New-Object System.Drawing.Point(10,65) #Position des Objekts innerhalb des Formulars in horizontaler und vertikaler Richtung (x,y)
$Label.AutoSize = $true
$main_form.Controls.Add($Label) #Fügen Sie das erstellte Objekt dem Formular hinzu, damit es bei der Ausführung des Skripts nicht verloren geht
$main_form.ShowDialog() #Rufen Sie das einfache Fenster aufLass uns etwas Dynamik hinzufügen
Dieses Tool, mit dem ich "Yandex gepingt" und *.iso gemountet habe, hat eine eigenständige GUI erhalten, aber das ist nicht genug. Auf ähnliche Weise kann man Informationen über die Erreichbarkeit ausgeben, aber um die Überwachung durchzuführen, muss das Skript jedes Mal neu gestartet werden.
Zuerst zeichnen wir zwei Icons und fügen die Möglichkeit hinzu, Bilder anzuzeigen.

$PictureBox = New-Object system.Windows.Forms.PictureBox #Das Objekt zur Anzeige von Bildern wird ganz logisch genannt
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)
#Hier kommen wir zur Sache, wir verknüpfen das anzuzeigende Bild mit dem Ergebnis der Erreichbarkeit des Knotens unter Verwendung des Cmdlets
#<b>test-connection</b>, wobei:
#-Count - die Anzahl der Anfragen übergibt
#-computer - IP oder Domainname für die Anfrage
#-quiet - damit wir nur einen Booleschen Wert zurückbekommen
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)
Wieder haben unsere DNS-Server Probleme…

Und wir fügen einen Knopf hinzu, um die Anzeigen zu aktualisieren.

$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 = "Aktualisieren"
# Setzen Sie Ereignisse zum Drücken der Taste, um auf jedes PictureBox gemäß der zuvor beschriebenen Logik zuzugreifen
$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)

Wunderbar, jetzt in die Produktion!?
Nachdem ich manuell etwa ein halbes Dutzend Hosts eingetragen hatte, wurde mir plötzlich klar — dieses Projekt wird enden, die Hosts werden sich ändern und ich muss das Skript jedes Mal anpassen. Einerseits ist das kein großes Problem, das ist schließlich eine Lösung für mich selbst. Andererseits ist das eine Lösung für mich, schauen Sie sich an, was dabei herauskommt:
Ein Anblick, der nichts für Zartbesaitete ist
Add-Type -assembly System.Windows.Forms #Binde die Bibliothek an
$main_form = New-Object System.Windows.Forms.Form #Erstelle eine Variable für unser "Fenster"
#Setze die Parameter für das Fenster
$main_form.Text ='Links aktiv' #Name im Titel
$main_form.Width = 300 #Breite des Fensters
$main_form.Height = 200 #Höhe des Fensters
$main_form.AutoSize = $true #Gib ihm die Möglichkeit, die Größe bei Bedarf selbst zu ändern
$Label = New-Object System.Windows.Forms.Label #Alle Elemente des Formulars werden in Variablen gespeichert, aber tatsächlich sind es Objekte, wie jede andere Variable in Powershell
$Label.Text = "ya.ru ............................" #Anzuzeigender Text
$Label.Location = New-Object System.Drawing.Point(15,10) #Position des Objekts innerhalb des Fensters in horizontaler und vertikaler Richtung (x,y)
$Label.AutoSize = $true
$Label1 = New-Object System.Windows.Forms.Label #Alle Elemente des Formulars werden in Variablen gespeichert, aber tatsächlich sind es Objekte, wie jede andere Variable in Powershell
$Label1.Text = "8.8.8.8 ............................" #Anzuzeigender Text googl-typischer DNS-Name
$Label1.Location = New-Object System.Drawing.Point(15,30) #Position des Objekts innerhalb des Fensters in horizontaler und vertikaler Richtung (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 #Das Objekt zum Anzeigen von Bildern heißt ganz logisch
$PictureBox.width = 10
$PictureBox.height = 10
#Hier kommen wir zu dem Punkt, an dem wir das anzuzeigende Bild an das Ergebnis der Erreichbarkeit des Knoten anbinden, unter Verwendung des Cmdlets
#<b>test-connection</b>, wo:
#-Count - überträgt die Anzahl der Anfragen
#-computer - IP oder Domänenname für die Anfrage
#-quiet - damit wir nur einen booleschen Wert zurückbekommen
$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" #Das Objekt verweist auf das entsprechende Bild
}
Else {
$PictureBox.imageLocation = "C:Testno.png" #Das Objekt verweist auf das entsprechende Bild
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Das Objekt zum Anzeigen von Bildern ist ziemlich logisch benannt
$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" #Das Objekt verweist auf das entsprechende Bild
}
Else {
$PictureBox1.imageLocation = "C:Testno.png" #Das Objekt verweist auf das entsprechende Bild
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Das Objekt zum Anzeigen von Bildern ist ziemlich logisch benannt
$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" #Das Objekt verweist auf das entsprechende Bild
}
Else {
$PictureBox2.imageLocation = "C:Testno.png" #Das Objekt verweist auf das entsprechende Bild
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Das Objekt zum Anzeigen von Bildern ist ziemlich logisch benannt
$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" #Das Objekt verweist auf das entsprechende Bild
}
Else {
$PictureBox3.imageLocation = "C:Testno.png" #Das Objekt verweist auf das entsprechende Bild
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Das Objekt zum Anzeigen von Bildern ist ziemlich logisch benannt
$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" #Das Objekt verweist auf das entsprechende Bild
}
Else {
$PictureBox4.imageLocation = "C:Testno.png" #Das Objekt verweist auf das entsprechende Bild
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Das Objekt zum Anzeigen von Bildern ist ziemlich logisch benannt
$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" #Das Objekt verweist auf das entsprechende Bild
}
Else {
$PictureBox5.imageLocation = "C:Testno.png" #Das 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"
# Wir verknüpfen das Ereignis des Button-Klicks mit den Anfragen jedes PictureBox gemäß der zuvor beschriebenen Logik
$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 dem Formular hinzu, damit es bei der Ausführung des Skripts 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() #Ein einfaches Fenster wird angezeigt
Selbst wenn man Sauberkeit einhält und sich an die Struktur hält, wird die gelegentliche Bearbeitung nicht die angenehmsten Gefühle hervorrufen.
Zunächst bringen wir die Überprüfung der Verfügbarkeit in eine separate Funktion und den Pfad zum Verzeichnis in eine separate Variable.
$script_path = "C:TestPS ping"
#Wir gehen in die Funktion mit dem bereits erstellten Objekt PictureBox und der IP-Adresse, die überprüft werden muss.
#Als Ausgabe wird das geladene Bild geändert.
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"}
}
Wir werden die Daten zum Host in eine externe Datei path.txt auslagern und im Format „ip/host-funktionaler-name/“ speichern, die wir dann in Arrays im Dokument übernehmen. Ebenso werden wir die Berechnung der Y-Position automatisieren. All dies gibt uns die Möglichkeit, Labels und Checkboxes durch einen Funktionsaufruf zu erstellen:

#создаем описательную линию, на вход идут: объект 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
}
Wir fügen einen Platz für die Anzeige der letzten Überprüfungszeit hinzu, da dies praktisch ist, und ergänzen die Aktion beim Drücken der Taste ein wenig.

$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
})
Ich habe auch eine kleine Funktion hinzugefügt, die bei der Entdeckung eines nicht erreichbaren Hosts nicht nur durch Änderungen am Indikator, sondern auch durch Schreie aus den Lautsprechern alarmiert.
Add-Type -AssemblyName System.Speech
$voice = New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate = 5
$voice.Speak("Warnung! Warnung! Basis wird angegriffen!")
Nach einigen Verzierungen und Anpassungen in eine leserliche Form sieht es so aus:
Der vollständige Code des Skripts
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 wechseln zu einer Funktion, die bereits das PictureBox-Objekt und die zu überprüfende IP-Adresse erstellt hat.
#Am Ende ändert es das eingehende 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!")
}
}
#Wir erstellen eine beschreibende Linie, Inputs: 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
}
#Wir erstellen einen Indikator für die beschreibende Linie, Inputs: 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 ='Links aktiv' #Name im Titel
$main_form.Width = 300 #Fensterbreite
$main_form.Height = 200 #Fensterhöhe
$main_form.AutoSize = $true #Ermöglichen Sie es ihm, die Größe bei Bedarf anzupassen
$main_form.TopMost = $true #Das ist sehr wichtig, es ermöglicht, das Fenster über anderen zu fixieren
$line = Get-content -LiteralPath $script_path"path.txt" #Daten der erforderlichen Hosts abrufen
$len = $line.Length #Berechnen Sie die Länge, genauer gesagt die Länge jedes Zeilen-Arrays
$i = 0
#Nun erklären wir die Arrays, die später benötigt werden
$ip = @() #IP-Array
$capt = @() #Beschreibung-Array
$Labels =@() #Label-Array
$PictureBoxs =@() #PictureBox-Array
while($i -lt $len){
$f = $line[$i].IndexOf("/") #Startposition der Beschreibung berechnen
$l = $line[$i].LastIndexOf("/") #Endposition der Beschreibung berechnen
$ip += $line[$i].Substring(0,$f) #IP extrahieren
$capt += $line[$i].Substring($f+1,$l-$f-1) #Beschreibung extrahieren
#Erstellen Sie ein Label-Feld
Create_line -label ($label_obj = New-Object System.Windows.Forms.Label) -path_ip $ip[$i] -caption $capt[$i] -top $label_from_top
#Erstellen Sie ein PictureBox-Feld
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 #Fügen Sie das erstellte Label dem gemeinsamen Array hinzu
$PictureBoxs += $PictureBox_obj #Fügen Sie das erstellte PictureBox dem gemeinsamen Array hinzu
$main_form.Controls.Add($Labels[$i])
$main_form.Controls.Add($PictureBoxs[$i])
$i +=1
}
#Dieses Feld zeigt die letzte Überprüfungszeit an
$Label0 = New-Object System.Windows.Forms.Label
$Label0.Text = Get-Date
$Label0.Location = New-Object System.Drawing.Point(80,180)
$Label0.AutoSize = $true
#Wir hängen bei Klick auf jeden PictureBox die vorher beschriebene Logik an
$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 = "Aktualisieren"
$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, dass dieses Tutorial für jemanden nützlich sein wird. Falls Sie jedoch solche Sachen von Grund auf gemacht haben, gratuliere ich Ihnen, ich habe es nicht getan. Aber ich bin bereit, Ihre Kommentare und Vorschläge anzuhören.
Es war mir eine Freude, das kleine, aber nützliche Tool zu entwickeln. Ich plane, auch das Hinzufügen und Löschen von Knoten aus der GUI zu implementieren und das, was ursprünglich als automatisches Aktualisieren der Statusanzeigen ohne die Notwendigkeit vorgesehen war, einen Button zu klicken, zu realisieren, ohne dass es 'powershell.exe' aufhängt.
Die letzte Version des Skripts ist auf GitHub
Quelle: habr.com
