A hosztok elérhetőségének figyelése Powershell segítségével

Mindenkinek jó napot kívánok, szeretném megosztani egy egyszerű útmutatót „Hogyan lehet abbahagyni a tucatnyi hoszt manuális pingelését. Regisztráció és SMS nélkül!”.

A hosztok elérhetőségének figyelése Powershell segítségévelAz Internet világából

Fontos: nem vagyok programozó, és nem rendszergazda, de egyszerre sok szolgáltatással kell dolgoznom szerverek és ezt a scriptet saját kényelmem érdekében írtam.

Mindenkit, akit ez érdekelhet, szeretettel várok.

Miért PowershellVan tapasztalatom egyszerű programok írásában Pythonban, de ez vagy telepített interpretert igényel, vagy jogot a .exe fájlok futtatásához, ami a munkám keretein belül nem mindig lehetséges. Viszont a Powershell scriptet gyakran sikerül futtatni.

Nem mindenki szereti a konzolt/terminált

Szerintem ebben nincs ellentmondás, különben mindenki konzolos levelezőklienseket használna, és a *nix rendszerekben nem jelent volna meg GUI.

Mivel a mindennapi életben elég primitíven használom a Powershell-t, először megpróbáltam megérteni, hogy lehet-e hozzá GUI-t csatolni. Kiderült, hogy lehet, sőt, elég egyszerűen:

A hosztok elérhetőségének figyelése Powershell segítségével

Add-Type -assembly System.Windows.Forms # Könyvtár csatlakoztatása
$main_form = New-Object System.Windows.Forms.Form # Létrehozunk egy objektumot a "ablakunk"-kal

# Beállítjuk a paramétereit
$main_form.Text ='Linkek aktívak' # Cím a fejlécben
$main_form.Width = 300 # Ablak szélessége
$main_form.Height = 200 # Ablak magassága
$main_form.AutoSize = $true # Lehetőséget adunk neki, hogy szükség szerint magától változtassa a méretét
$main_form.ShowDialog() # Meghívjuk az "ablakot"

Ehez adjuk a kimeneti elemet, és kapunk egy elemi Windows-ablakot, tautológia?.

A hosztok elérhetőségének figyelése Powershell segítségével

Add-Type -assembly System.Windows.Forms #Könyvtár csatlakoztatása

$main_form = New-Object System.Windows.Forms.Form #A "bemásolás" ablakunk változójának létrehozása

#Paraméterek megadása
$main_form.Text ='Links up' #Cím a fejlécben
$main_form.Width = 300 #Ablak szélessége
$main_form.Height = 200 #Ablak magassága
$main_form.AutoSize = $true #Automatikus méretváltoztatási lehetőség, ha szükséges

$Label = New-Object System.Windows.Forms.Label #Minden űrlap elem változókba lesz tárolva, de valójában ezek objektumok, mint bármely más Powershell változó
$Label.Text = "Helló! Én egy alap Windows-ablak vagyok, te mit értél el?" #Megjelenítendő szöveg
$Label.Location  = New-Object System.Drawing.Point(10,65) #A objektum elhelyezkedése az űrlapon vízszintesen és függőlegesen (x,y)
$Label.AutoSize = $true 

$main_form.Controls.Add($Label) #Kiegészítjük az újonnan létrehozott objektumot az űrlaphoz, hogy ne vesszen el a script futása közben

$main_form.ShowDialog() #Elindítjuk az egységes ablakot

Adjunk hozzá dinamizmust

Ez az eszköz, amellyel a "Yandexet pingeltem" és *.iso fájlokat csatoltam, most külön GUI-t kapott, de ez még mindig kevés. Hasonló módon információt kaphatunk a hozzáférhetőségről, de a monitorozáshoz minden alkalommal újra kell indítanunk a scriptet.

Kezdésnek rajzoljunk két ikont, és adjunk lehetőséget képek megjelenítésére.

A hosztok elérhetőségének figyelése Powershell segítségével

$PictureBox = New-Object system.Windows.Forms.PictureBox #A képek megjelenítésére szolgáló objektum logikus néven hívják
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)

#Itt jön a lényeg, összekötjük a megjelenítendő képet a csatlakozási ellenőrzés eredményével, használva a parancsmintát
#<b>test-connection</b>, ahol:
#-Count - a kérések számát adja át
#-computer - az IP cím vagy domain név a kéréshez
#-quiet - hogy csak Boolean értéket kapjunk vissza
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
	$PictureBox.imageLocation = "C:Testyes.png" #Az objektum hivatkozik a megfelelő képre
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Az objektum hivatkozik a megfelelő képre
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$main_form.Controls.Add($PictureBox)

Ismét zavarják a DNS bejegyzéseink…

A hosztok elérhetőségének figyelése Powershell segítségével
És még adjunk hozzá egy gombot, hogy legyen lehetőség az adatok frissítésére.

A hosztok elérhetőségének figyelése Powershell segítségével

$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 = "Újratöltés"

# Minden PictureBox eseményére hozzárendeljük a gomb megnyomásakor a korábban leírt logikának megfelelően
$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)

A hosztok elérhetőségének figyelése Powershell segítségével

Csodálatos, most már a gyártásba!?

Kézzel körülbelül fél tucat hostot megadva rájöttem valamire – ennek a projektnek véget kell érnie, a hostok változnak, és minden alkalommal módosítanom kell a scriptet. Egyrészt nem nagy ügy, ez nekem készült. Másrészt nézzük meg, mi is történik:

Látvány nem a gyengéknek

Add-Type -assembly System.Windows.Forms #Csatlakoztatjuk a könyvtárat

$main_form = New-Object System.Windows.Forms.Form #Létrehozunk egy változót a "window"-hoz

#Beállítjuk az ablak paramétereit
$main_form.Text ='Links up' #Cím a fejlécben
$main_form.Width = 300 #Ablak szélessége
$main_form.Height = 200 #Ablak magassága
$main_form.AutoSize = $true #Lehetővé tesszük, hogy szükség esetén automatikusan állítsa be a méretét

$Label = New-Object System.Windows.Forms.Label #Minden elem az űrlapon változókba kerül, de ezek valójában objektumok, mint bármely más változó a Powershell-ben
$Label.Text = "ya.ru		............................" #Kimeneti szöveg 
$Label.Location  = New-Object System.Drawing.Point(15,10) #A címke elhelyezkedése az űrlapon vízszintesen és függőlegesen (x,y)
$Label.AutoSize = $true 

$Label1 = New-Object System.Windows.Forms.Label #Minden elem az űrlapon változókba kerül, de ezek valójában objektumok, mint bármely más változó a Powershell-ben
$Label1.Text = "8.8.8.8		............................" #Kimeneti szöveg a Google DNS szerveréről
$Label1.Location  = New-Object System.Drawing.Point(15,30) #A címke elhelyezkedése az űrlapon vízszintesen és függőlegesen (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 #A kép megjelenítésére szolgáló objektum, amely meglehetősen logikus nevet kapott
$PictureBox.width = 10
$PictureBox.height = 10

#Itt áttérünk a lényegre, összekötjük a megjelenítendő képet a csomópont elérhetőségének ellenőrzési eredményével
#<b>test-connection</b>, ahol:
#-Count - az küldött kérések számát adja meg
#-computer - a kéréshez szükséges IP vagy domain név
#-quiet - hogy csak Boolean értéket kapjunk vissza
$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" #Az objektum a megfelelő képre mutat
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Az objektum a megfelelő képre mutat
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Az objektum neve eléggé logikus a képek megjelenítéséhez
$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" #Az objektum a megfelelő képre mutat
}
Else {
	$PictureBox1.imageLocation = "C:Testno.png" #Az objektum a megfelelő képre mutat
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Az objektum neve eléggé logikus a képek megjelenítéséhez
$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" #Az objektum a megfelelő képre mutat
}
Else {
	$PictureBox2.imageLocation = "C:Testno.png" #Az objektum a megfelelő képre mutat
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Az objektum neve eléggé logikus a képek megjelenítéséhez
$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" #Az objektum a megfelelő képre mutat
}
Else {
	$PictureBox3.imageLocation = "C:Testno.png" #Az objektum a megfelelő képre mutat
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Az objektum neve eléggé logikus a képek megjelenítéséhez
$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" #Az objektum a megfelelő képre mutat
}
Else {
	$PictureBox4.imageLocation = "C:Testno.png" #Az objektum a megfelelő képre mutat
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Az objektum neve eléggé logikus a képek megjelenítéséhez
$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" #Az objektum a megfelelő képre mutat
	}
Else {
	$PictureBox5.imageLocation = "C:Testno.png" #Az objektum a megfelelő képre mutat
	}
$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 = "Újratöltés"

# Az eseményhez rendeljük hozzá a gombnyomáskor minden PictureBox elérhetőségét a korábban leírt logika szerint
$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) #hozzáadjuk a létrehozott objektumot a formhoz, hogy ne vesszen el a szkript végrehajtása során
$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() #Elindítjuk az alapértelmezett ablakot

Még ha meg is tartjuk a tisztaságot, és követjük a struktúrát, a periódikus szerkesztések nem éppen kellemes érzéseket fognak okozni.

Először külön funkcióba emeljük a hozzáférhetőség ellenőrzését, a könyvtár elérési útját pedig külön változóba helyezzük:

$script_path	= "C:TestPS ping"

#Áthelyezzük a funkcióba a már létrehozott PictureBox objektumot és az IP-címet, amelyet ellenőrizni kell.
#A kimenet megváltoztatja a betöltött képet.
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"} 
	}

A hosztra vonatkozó adatokat egy külső path.txt fájlba helyezzük, a következő formátumban: „ip/hostname-funkció/”, és a dokumentumban tömbökben fogjuk azokat tárolni. A Y pozíció kiszámítása is automatizáltabbá válik. Mindez lehetővé teszi számunkra, hogy funkcióhívásokkal hozzunk létre Label-eket és checkbox-okat:

A hosztok elérhetőségének figyelése Powershell segítségével

#создаем описательную линию, на вход идут: объект 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
	}

Hozzáadunk egy helyet az utolsó ellenőrzés idejének megjelenítésére, mert ez hasznos, és egy kicsit kiegészítjük a gomb lenyomásakor végrehajtott műveletet.

A hosztok elérhetőségének figyelése Powershell segítségével

$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 
	})

Ezenkívül csatlakoztattam egy kis funkciót, amely, amikor elérhetetlen hosztot észlel, nemcsak a jelző megváltozásával, hanem a hangszórók zúgásával is figyelmeztet.

Add-Type -AssemblyName System.Speech
$voice	= New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate	= 5
$voice.Speak("Figyelmeztetés! Figyelmeztetés! A rendszer támadás alatt áll!")

Tehát miután néhány díszítést és olvashatóságot igénylő módosítást végeztem, így alakult:

A szkript teljes kódja

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

# A megadott IP-cím státuszának ellenőrzése és a képek frissítése.
# A kimenet az előzőleg betöltött képet változtatja meg.
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("Hiba! A " + $path_ip + " hoszt nem elérhető!")
		}
	}

# Létrehozunk egy leíró sort, bemeneti paraméterek: Label objektum, IP-cím, leírás és Y koordináta
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
	}

# Létrehozunk egy indikátort a leíró sorhoz, bemeneti paraméterek: PictureBox objektum, IP-cím és Y koordináta
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 ='Hidak állapota' #A cím a fejlécben
$main_form.Width = 300 #Az ablak szélessége
$main_form.Height = 200 #Az ablak magassága
$main_form.AutoSize = $true #Lehetővé tesszük, hogy magától változtassa a méretét
$main_form.TopMost	= $true #Ez nagyon fontos, lehetővé teszi az ablak más ablakok fölé rögzítését

$line = Get-content -LiteralPath $script_path"path.txt" #Kiolvassuk a szükséges hosztok adatait
$len = $line.Length	#Kiszámítjuk a hosszát, pontosabban minden sor hosszának tömbét

$i = 0

# Ezután tömböket deklarálunk, amelyek a jövőben szükségesek
$ip	= @()	#IP tömb
$capt	= @()	#leírás tömb
$Labels	=@()	#Label tömb
$PictureBoxs	=@()	#PictureBox tömb

while($i -lt $len){
	$f	= $line[$i].IndexOf("/") #Kiszámítjuk a leírás kezdetének helyét
	$l	= $line[$i].LastIndexOf("/")	#Kiszámítjuk a leírás végét
	$ip	+= $line[$i].Substring(0,$f)	#Kiolvassuk az IP-t
	$capt	+= $line[$i].Substring($f+1,$l-$f-1)	#Kiolvassuk a leírást

	# Létrehozunk egy Label mezőt
	Create_line -label ($label_obj = New-Object System.Windows.Forms.Label) -path_ip $ip[$i] -caption $capt[$i] -top $label_from_top
	# Létrehozunk egy PictureBox mezőt
	Create_link -PictureBox ($PictureBox_obj = New-Object system.Windows.Forms.PictureBox) -path_ip $ip[$i] -top $label_from_top

	$label_from_top	+= 15	# Létrehozzuk a lépést az Y tengelyen

	$Labels	+= $label_obj	# A létrehozott Label-t hozzáfűzzük a közös tömbhöz
	$PictureBoxs	+= $PictureBox_obj	# A létrehozott PictureBox-ot hozzáfűzzük a közös tömbhöz
	$main_form.Controls.Add($Labels[$i])
	$main_form.Controls.Add($PictureBoxs[$i])
	$i	+=1
}

# Ez a mező az utolsó ellenőrzési idővel
$Label0	= New-Object System.Windows.Forms.Label
$Label0.Text	= Get-Date
$Label0.Location	= New-Object System.Drawing.Point(80,180)
$Label0.AutoSize	= $true


# Minden PictureBox-ra nyomógomb eseményt kötünk a korábban leírt logika szerint
$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	= "Újratöltés"

$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()

Utószó

Remélem, valakinek hasznos lesz ez a tutorial. Ha pedig te ezt szinte gyerekként csináltad, akkor gratulálok, én nem csináltam. De szívesen hallgatom a megjegyzéseidet és javaslataidat.

Nekem magamnak is örömet okozott, hogy kicsit turkáljak és összeszedjek egy ilyen kicsi, de a mindennapi életben hasznos eszközt. Terveim között szerepel még a GUI-ból való csomópontok hozzáadása és törlése, valamint a státuszok automatikus frissítése, anélkül hogy "nyomkodni" kellene a gombot, és hogy a "powershell.exe"-t ne akassza meg.

A script legújabb verziója itt található GitHub

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster