Monitorovanie dostupnosti hostiteľov na Powershell

Všetkým prajem dobrý deň, chcem sa podeliť o jednoduchý návod „Ako prestať manuálne pingovať desiatky hostiteľov. Bez registrácie a SMS!“.

Monitorovanie dostupnosti hostiteľov na PowershellZ internetových zákutí

Dôležité: nie som programátor ani systémový administrátor, ale musím pracovať s veľkým množstvom serverov a služieb a tento skript som napísal pre vlastné pohodlie.

Všetkých, ktorým to môže byť užitočné, prosím, pod kat.

Prečo PowershellMám skúsenosti s písaním jednoduchých programov v Pythone, ale ten vyžaduje buď nainštalovaný interpretátor, alebo práva na spúšťanie .exe, čo v rámci mojej práce nie vždy je možné. Skript na Powershell však má častejšie možnosť spustenia.

Nie všetci majú radi konzolu/terminál

Myslím, že v tom nie je rozpor, inak by všetci stále používali konzolové poštové klienty a v *nix systémoch by sa nezobrazoval GUI.

Keďže v každodennej práci musím používať Powershell dosť primitívne, najprv som sa pokúsil zistiť, či je možné k nemu pripojiť GUI. Ukázalo sa, že áno, a to dosť jednoducho:

Monitorovanie dostupnosti hostiteľov na Powershell

Add-Type -assembly System.Windows.Forms #Pripojíme knižnicu
$main_form = New-Object System.Windows.Forms.Form #Vytvoríme objekt s naším "oknom"

#Nastavíme mu parametre
$main_form.Text ='Odkazy fungujú' #Názov v hlavičke
$main_form.Width = 300 #Šírka okna
$main_form.Height = 200 #Výška okna
$main_form.AutoSize = $true #Dáme mu možnosť samostatne meniť veľkosť, pri potrebe
$main_form.ShowDialog() #Vyvoláme "okno"

Pridávame k tomu výstupný prvok a získavame elementárne Windows-okno tautológia?.

Monitorovanie dostupnosti hostiteľov na Powershell

Add-Type -assembly System.Windows.Forms #Pripojíme knižnicu

$main_form = New-Object System.Windows.Forms.Form #Vytvoríme premennú s naším "oknom"

#Nastavíme pre neho parametre cez parametre
$main_form.Text ='Odkazy nahor' #Názov v hlavičke
$main_form.Width = 300 #Šírka okna
$main_form.Height = 200 #Výška okna
$main_form.AutoSize = $true #Dáme mu možnosť samostatne meniť veľkosť, ak je to potrebné

$Label = New-Object System.Windows.Forms.Label #Všetky prvky formulára budú vkladané do premenných, ale v skutočnosti sú to objekty, ako akékoľvek iné premenné v PowerShell
$Label.Text = "Ahoj! Som elementárne Windows-okno, a čo si dosiahol ty?" #Zobrazovaný text
$Label.Location  = New-Object System.Drawing.Point(10,65) #Poloha objektu vo formulári horizontálne a vertikálne (x,y)
$Label.AutoSize = $true 

$main_form.Controls.Add($Label) #pridáme vytvorený objekt k formuláru, aby sa nestratil pri vykonávaní skriptu

$main_form.ShowDialog() #Vyvoláme urážlivo elementárne okno

Pridajme dynamiku

Tento nástroj, ktorým som «pingoval Yandex» a montoval *.iso, dostal samostatné GUI, ale to nestačí. Podobným spôsobom je možné zobraziť informácie o dostupnosti, ale na monitorovanie bude potrebné skript zakaždým reštartovať.

Najprv nakreslíme dve ikony a pridáme možnosť zobrazovať obrázky.

Monitorovanie dostupnosti hostiteľov na Powershell

$PictureBox = New-Object system.Windows.Forms.PictureBox # Objekt na zobrazovanie obrázkov sa nazýva celkom logicky
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)

# Tu prechádzame k veci a viažeme zobrazovaný obrázok na výsledok kontroly dostupnosti uzla pomocou cmdletu
#<b>test-connection</b>, kde:
#-Count - odovzdáva počet požiadaviek
#-computer - IP alebo doménové meno pre požiadavku
#-quiet - aby nám vrátilo len Boolean hodnotu
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
	$PictureBox.imageLocation = "C:Testyes.png" # Objekt sa odvoláva na relevantný obrázok 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" # Objekt sa odvoláva na relevantný obrázok 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$main_form.Controls.Add($PictureBox)

Opäť naše DNS-ky šantia…

Monitorovanie dostupnosti hostiteľov na Powershell
A pridáme aj tlačidlo, aby sme mali možnosť obnoviť údaje.

Monitorovanie dostupnosti hostiteľov na 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 = "Obnoviť"

# Pripojíme na udalosť stlačenia tlačidla prístup k každému PictureBox podľa predtým opísanej logiky
$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)

Monitorovanie dostupnosti hostiteľov na Powershell

Skvele, teraz do produkcie!?

Manuálne som zapísal okolo pol tucta hostiteľov a zrazu som si uvedomil jednu vec — ten projekt sa jedného dňa skončí, hostitelia sa zmenia a ja budem musieť každým razom upraviť skript. Z jednej strany to nie je nič hrozné, je to predsa riešenie pre seba. Z druhej strany, pozrite sa, čo sa stáva:

Výjav nie pre slabé povahy

Add-Type -assembly System.Windows.Forms #Pripojíme knižnicu

$main_form = New-Object System.Windows.Forms.Form #Vytvoríme premennú s naším "oknom"

#Nastavíme preň parametre cez parametre
$main_form.Text ='Odkazy hore' #Názov v záhlaví
$main_form.Width = 300 #Šírka okna
$main_form.Height = 200 #Výška okna
$main_form.AutoSize = $true #Dáme mu možnosť samostatne sa meniť, keď je to potrebné

$Label = New-Object System.Windows.Forms.Label #Všetky prvky formy budú zapisované do premenných, ale v skutočnosti sú to objekty, ako ktorékoľvek iné premenné v PowerShell
$Label.Text = "ya.ru		............................" #Zobrazovaný text 
$Label.Location  = New-Object System.Drawing.Point(15,10) #Umiestnenie objektu vo forme horizontálne a vertikálne (x,y)
$Label.AutoSize = $true 

$Label1 = New-Object System.Windows.Forms.Label #Všetky prvky formy budú zapisované do premenných, ale v skutočnosti sú to objekty, ako ktorékoľvek iné premenné v PowerShell
$Label1.Text = "8.8.8.8		............................" #Zobrazovaný text googlovský DNS
$Label1.Location  = New-Object System.Drawing.Point(15,30) #Umiestnenie objektu vo forme horizontálne a vertikálne (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 na zobrazenie obrázkov sa nazýva logicky
$PictureBox.width = 10
$PictureBox.height = 10

#Teraz sa dostaneme k veci, pripájame zobrazený obrázok k výsledku kontroly dostupnosti uzla pomocou príkazu
#<b>test-connection</b>, kde:
#-Count - predáva počet požiadaviek
#-computer - IP alebo názov domény pre požiadavku
#-quiet - pre to, aby nám bolo vrátené len Boolean hodnotu
$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 sa odvoláva na príslušný obrázok 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Objekt sa odvoláva na príslušný obrázok 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Objekt na výstup obrázkov sa volá celkom logicky
$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 sa odvoláva na príslušný obrázok 
}
Else {
	$PictureBox1.imageLocation = "C:Testno.png" #Objekt sa odvoláva na príslušný obrázok 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Objekt na výstup obrázkov sa volá celkom logicky
$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 sa odvoláva na príslušný obrázok 
}
Else {
	$PictureBox2.imageLocation = "C:Testno.png" #Objekt sa odvoláva na príslušný obrázok 
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Objekt na výstup obrázkov sa volá celkom logicky
$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 sa odvoláva na príslušný obrázok 
}
Else {
	$PictureBox3.imageLocation = "C:Testno.png" #Objekt sa odvoláva na príslušný obrázok 
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Objekt na výstup obrázkov sa volá celkom logicky
$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 sa odvoláva na príslušný obrázok 
}
Else {
	$PictureBox4.imageLocation = "C:Testno.png" #Objekt sa odvoláva na príslušný obrázok 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Objekt na výstup obrázkov sa volá celkom logicky
$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 sa odvoláva na príslušný obrázok 
	}
Else {
	$PictureBox5.imageLocation = "C:Testno.png" #Objekt sa odvoláva na príslušný obrázok 
	}
$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 = "Obnoviť"

# Pripojíme na udalosť stlačenia tlačidla požiadavku na každý PictureBox podľa predtým popísanej logiky
$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) #pridáme vytvorený objekt do formulára, aby sa nestratil pri vykonávaní skriptu
$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() #Vyvolávame elementárne okno

Aj keď dodržíte čistotu a dodržiavate štruktúru, občasná editácia spôsobí menej príjemné pocity.

Na začiatok presunieme kontrolu dostupnosti do samostatnej funkcie a cestu k adresáru do samostatnej premennej:

$script_path	= "C:TestPS ping"

#Prechádzame do funkcie už vytvoreného objektu PictureBox a IP adresy, ktorú je potrebné skontrolovať.
#Na výstupe mení nahrávaný obrázok.
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"} 
	}

Presunieme údaje o hostiteľovi do externého súboru path.txt a zapíšeme ich vo formáte „ip/host-funkčné-meno/“, pričom ich v dokumente prijmeme do polí. Taktiež urobíme výpočet pozície Y viac automatizovaným. To všetko nám umožňuje vytvárať Labely a checkboxy volaním funkcie:

Monitorovanie dostupnosti hostiteľov na 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
	}

Pridáme miesto na zobrazenie času poslednej kontroly, pretože je to praktické, a trošku doplníme akciu pri stlačení tlačidla.

Monitorovanie dostupnosti hostiteľov na 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 
	})

Takisto som pripojil malú funkciu, ktorá pri zistení nedostupného hostiteľa informovala nielen zmenou indikátora, ale aj kričaním z reproduktorov.

Add-Type -AssemblyName System.Speech
$voice	= New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate	= 5
$voice.Speak("Varovanie! Varovanie! Služba je pod útokom!")

Takže po niekoľkých úpravách a privedení do čitateľnej podoby to vyzerá takto:

Celý kód skriptu

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

#Presúvame do funkcie už vytvorený objekt PictureBox a IP-adresu, ktorú treba overiť.
#Výstup mení načítaný obrázok.
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("Chyba! Host " + $path_ip + ", nie je dostupný!")
		}
	}

#vytvárame popisnú líniu, na vstup idú: objekt Label, IP-adresa, popis a pozícia na osi 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
	}

#vytvárame indikátor pre popisnú líniu, na vstup idú: objekt PictureBox, IP-adresa a pozícia na osi 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
	}

$main_form	= New-Object System.Windows.Forms.Form
$main_form.Text ='Odkazy aktívne' #Názov v hlavičke
$main_form.Width = 300 #Šírka okna
$main_form.Height = 200 #Výška okna
$main_form.AutoSize = $true #Dovolíme mu samostatne meniť veľkosť, ak je to potrebné
$main_form.TopMost	= $true #Toto je veľmi dôležité, umožňuje to pripnúť okno nad ostatné

$line = Get-content -LiteralPath $script_path"path.txt" #načítame dáta o potrebných hostoch
$len = $line.Length	#vypočítame dĺžku, presnejšie dĺžku poľa každej riadky

$i = 0

#ďalej vyhlasujeme polia, ktoré budeme potrebovať
$ip	= @()	#pole ip
$capt	= @()	#pole popisu
$Labels	=@()	#pole Label
$PictureBoxs	=@()	#pole PictureBox

while($i -lt $len){
	$f	= $line[$i].IndexOf("/") #vypočítame pozíciu začiatku popisu
	$l	= $line[$i].LastIndexOf("/")	#vypočítame pozíciu konca popisu
	$ip	+= $line[$i].Substring(0,$f)	#vytiahneme ip
	$capt	+= $line[$i].Substring($f+1,$l-$f-1)	#vytiahneme popis

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

	$label_from_top	+= 15	#robíme "krok" po osi Y

	$Labels	+= $label_obj	#pridávame vytvorený Label do celkového poľa
	$PictureBoxs	+= $PictureBox_obj	#pridávame vytvorený PictureBox do celkového poľa
	$main_form.Controls.Add($Labels[$i])
	$main_form.Controls.Add($PictureBoxs[$i])
	$i	+=1
}

#toto pole s posledným časom kontroly
$Label0	= New-Object System.Windows.Forms.Label
$Label0.Text	= Get-Date
$Label0.Location	= New-Object System.Drawing.Point(80,180)
$Label0.AutoSize	= $true


# Pripojíme na udalosť stlačenia tlačidla volanie každého PictureBox podľa predtým popísanej logiky
$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	= "Obnoviť"

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

Pósledok

Dúfam, že tento tutoriál bude niekomu užitočný. Ak ste sa týmto zaoberali už od detstva, gratulujem, ja som to nerobil. Som však pripravený vypočuť si vaše komentáre a návrhy.

Pre mňa bolo príjemné nazrieť do toho a zostaviť takúto malú, ale užitočnú utilitu. Plánujem ešte implementovať pridávanie a odstraňovanie uzlov z GUI, ako aj to, čo malo byť prioritne vykonané, automatické aktualizovanie stavov bez potreby 'kliknúť' na tlačidlo a aby nezamŕzal 'powershell.exe'.

Posledná verzia skriptu na GitHub

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster