Hostide kättesaadavuse jälgimine Powershellis

Tere kõigile! Soovin jagada lihtsat juhendit 'Kuidas lõpetada kümne hosti käsitsi pingimine. Ilma registreerimise ja SMS-ita!'.

Hostide kättesaadavuse jälgimine PowershellisInternetist

Oluline: ma ei ole programmeerija ega süsteemihaldur, aga pean samal ajal töötama suure hulga serverite teenustega ja selle skripti kirjutasin oma mugavuse huvides.

Kõiki, kellele see võiks olla kasulik, palun, lugege edasi.

Miks PowershellMul on kogemusi lihtsate programmide kirjutamisel Pythonis, kuid see nõuab kas installitud tõlgendajat või õigust .exe käivitamiseks, mis ei ole minu töö raames alati võimalik. Powershelli skripti saab aga sagedamini käivitada.

Kõik ei armasta konsooli/terminaali

Ma arvan, et selles ei ole vastuolu; vastasel juhul kasutaksid kõik endiselt konsooli e-posti klientide kasutamisel ning *nix-süsteemides ei oleks GUI-d.

Kuna mul tuleb igapäevaselt Powershelli kasutada pigem primitiivselt, siis proovisin alguses mõista, kas sellele saaks lisada GUI. Selgub, et saab, ja üsna lihtsalt:

Hostide kättesaadavuse jälgimine Powershellis

Add-Type -assembly System.Windows.Forms #Kutsume raamatukogu
$main_form = New-Object System.Windows.Forms.Form #Loome objekti meie "akna" jaoks

#Seame selle parameetrid
$main_form.Text ='Links up' #Nimi pealkirjas
$main_form.Width = 300 #Akna laius
$main_form.Height = 200 #Akna kõrgus
$main_form.AutoSize = $true #Anname sellele võimaluse vajadusel ise suurust muuta
$main_form.ShowDialog() #Kutsume esile "akna"

Lisame sellele väljundie elemendi ja saame primitiivse Windows-i akna tautoloogia?.

Hostide kättesaadavuse jälgimine Powershellis

Add-Type -assembly System.Windows.Forms #Ühendame raamatukogu

$main_form = New-Object System.Windows.Forms.Form #Loome muutuja meie "akna" jaoks

#Seame selle jaoks parameetrid
$main_form.Text ='Links up' #Nimi pealkirjas
$main_form.Width = 300 #Aknalaulu laius
$main_form.Height = 200 #Aknalaulu kõrgus
$main_form.AutoSize = $true #Anname sellele võimaluse suurust automaatselt muuta, kui vaja

$Label = New-Object System.Windows.Forms.Label #Kõik vormielemendid salvestatakse muutujatesse, kuid tegelikult on need objektid, nagu kõik muud muutujaid Powershellis
$Label.Text = "Tere! Ma olen elementaarne Windowsi aken, aga mida oled saavutanud sina?" #Kuvatud tekst
$Label.Location  = New-Object System.Drawing.Point(10,65) #Objekti asukoht vormis horisontaalselt ja vertikaalselt (x,y)
$Label.AutoSize = $true 

$main_form.Controls.Add($Label) #lisame loodud objekti vormile, et see ei kaoks skripti täitmise ajal

$main_form.ShowDialog() #Kutsume välja elementaarse akna

Lisame dünaamikat

Nii on tööriist, millega ma "pingutasin Yandexit" ja montaasin *.iso, saanud eraldiseisva GUI, kuid seda on vähe. Sel moel on võimalik kuvada teavet kättesaadavuse kohta, kuid jälgimiseks tuleb skripti iga kord uuesti käivitada.

Alustuseks joonistame kaks ikooni ja lisame võimaluse kuvada pilte.

Hostide kättesaadavuse jälgimine Powershellis

$PictureBox = New-Object system.Windows.Forms.PictureBox # Pildihalduri objekt nimetatakse loogiliselt
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)

# Siin liigume edasi, sidudes kuvatava pildi sõlme kättesaadavuse kontrolli tulemusega kasutades cmdlet'i
#<b>test-connection</b>, kus:
#-Count - edastab päringute arvu
#-computer - IP või domeeninimi päringu jaoks
#-quiet - et tagastada ainult Boolean väärtus
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
	$PictureBox.imageLocation = "C:Testyes.png" # Objekt viitab vastavale pildile 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" # Objekt viitab vastavale pildile 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$main_form.Controls.Add($PictureBox)

Meie DNS-id teevad taas nalja...

Hostide kättesaadavuse jälgimine Powershellis
Lisame ka nupu, et oleks võimalik näitude uuendamine.

Hostide kättesaadavuse jälgimine Powershellis

$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 = "Uuenda"

# Seome nupu vajutamise sündmusega iga PictureBox'i vastavalt varem kirjeldatud loogikale
$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)

Hostide kättesaadavuse jälgimine Powershellis

Imeline, nüüd tootmisse!?

Käsitsi kirjutades umbes tosin hosti, sain ma äkki aru ühest asjast — see projekt saab ju otsa, hostid muutuvad ja ma pean iga kord skripti muutma. Ühelt poolt pole hullu, see on ju lahendus enda jaoks. Teiselt poolt, see on lahendus enda jaoks — vaadake, mis tulemuseks saab:

Vaatepilt mitte nõrkadele närvidele

Add-Type -assembly System.Windows.Forms #Importeerime teegi

$main_form = New-Object System.Windows.Forms.Form #Loome muutuja meie "akna" jaoks

#Seame selle omadused parameetrite abil
$main_form.Text ='Links up' #Nimi päises
$main_form.Width = 300 #Akna laius
$main_form.Height = 200 #Akna kõrgus
$main_form.AutoSize = $true #Anname õiguse automaatseks suuruse muutmiseks, kui vajalik

$Label = New-Object System.Windows.Forms.Label #Kuna kõik vormielemendid pannakse muutujatesse, on tegemist objektidega, nagu kõik muud Powershelli muutujad
$Label.Text = "ya.ru		............................" #Kujutatav tekst 
$Label.Location  = New-Object System.Drawing.Point(15,10) #Objekti asukoht vormis horisontaalselt ja vertikaalselt (x,y)
$Label.AutoSize = $true 

$Label1 = New-Object System.Windows.Forms.Label #Kuna kõik vormielemendid pannakse muutujatesse, on tegemist objektidega, nagu kõik muud Powershelli muutujad
$Label1.Text = "8.8.8.8		............................" #Kujutatav tekst Googleski DNS
$Label1.Location  = New-Object System.Drawing.Point(15,30) #Objekti asukoht vormis horisontaalselt ja vertikaalselt (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 #Piltide kuvamise objekt on nime saanud igati loogiliselt
$PictureBox.width = 10
$PictureBox.height = 10

#Siin me liigume edasi ja seome kuvatava pildi sõlme kättesaadavuse kontrollimise tulemusega, kasutades cmdlet'i
#<b>test-connection</b>, kus:
#-Count - edastab päringute arvu
#-computer - IP või domeeninimi päringu jaoks
#-quiet - et me saaksime tagasi ainult bool tüüpi väärtuse
$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 viitab vastavale pildile 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Objekt viitab vastavale pildile 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Objekt piltide kuvamiseks on täiesti loogilises nimega
$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 viitab vastavale pildile 
}
Else {
	$PictureBox1.imageLocation = "C:Testno.png" #Objekt viitab vastavale pildile 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Objekt piltide kuvamiseks on täiesti loogilises nimega
$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 viitab vastavale pildile 
}
Else {
	$PictureBox2.imageLocation = "C:Testno.png" #Objekt viitab vastavale pildile 
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Objekt piltide kuvamiseks on täiesti loogilises nimega
$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 viitab vastavale pildile 
}
Else {
	$PictureBox3.imageLocation = "C:Testno.png" #Objekt viitab vastavale pildile 
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Objekt piltide kuvamiseks on täiesti loogilises nimega
$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 viitab vastavale pildile 
}
Else {
	$PictureBox4.imageLocation = "C:Testno.png" #Objekt viitab vastavale pildile 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Objekt piltide kuvamiseks on täiesti loogilises nimega
$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 viitab vastavale pildile 
	}
Else {
	$PictureBox5.imageLocation = "C:Testno.png" #Objekt viitab vastavale pildile 
	}
$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 = "Taasta"

# Seome nupu vajutusele iga PictureBox'i vastava logikaga
$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) #lisame loodud objekti vormile, et see ei kaoks skripti täitmisel
$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() #Kutsume välja elementaarse dialooge akna

Isegi kui järgida puhtust ja järgida struktuuri, siis perioodiline redigeerimine toob esile mitte kõige meeldivamad tunded.

Esmaltame kontrolli kättesaadavuse eraldiseisvaks funktsiooniks ja katalooge suunava muutujaks:

$script_path	= "C:TestPS ping"

#Liigume funktsiooni, kus on juba loodud PictureBox objekt ja IP-aadress, mida tuleb kontrollida.
#Väljundis muutub see laaditav pilt.
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"} 
	}

Väljastame hosti andmed eraldi faili path.txt, talletades need kujul "ip/host-funktsionaalne-nimi/", ning dokumentis loome nendele massiivid. Teeme samuti Y positsiooni arvutamise automaatsemaks. Kõik see võimaldab meil luua Label`eid ja checkbox`e funktsiooni kutsega:

Hostide kättesaadavuse jälgimine Powershellis

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

Lisame koha viimase kontrolli aja kuvamiseks, kuna see on mugav, ja täiendame veidi ka nuppu vajutades toimuvaid toiminguid.

Hostide kättesaadavuse jälgimine Powershellis

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

Ja liitsin ka väikese funktsiooni-bugi, mis teatas, kui host ei olnud saadaval, mitte ainult indikaatori muutmise kaudu, vaid karjus ka valjusti.

Add-Type -AssemblyName System.Speech
$voice	= New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate	= 5
$voice.Speak("Hoiatus! Hoiatus! Server on rünnaku all!")

Nii et pärast mõningaid ilustusi ja värskendamist, et muuta see loetavamaks ja mugavamaks, näeb see välja selline:

Kogu skripti kood

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

#Liigume juba loodud PictureBox objektiga ja IP-aadressiga, mida tuleb kontrollida.
#Väljundiks muudab see laaditava pildi.
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("Viga! Peremees " + $path_ip + ", ei ole kättesaadav!")
		}
	}

#loome kirjeldava rea, sisse tulevad: Label objekt, IP-aadress, kirjeldus ja Y-telje positsioon
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
	}

#loome indikaatori kirjeldavale reale, sisse tulevad: PictureBox objekt, IP-aadress ja Y-telje positsioon
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 ='Lingid üles' #Pealkiri
$main_form.Width = 300 #Akna laius
$main_form.Height = 200 #Akna kõrgus
$main_form.AutoSize = $true #Anname sellele võimaluse suurust automaatselt muuta, kui vajalik
$main_form.TopMost	= $true #See on väga oluline funktsioon, see võimaldab akent teiste kohal kinni hoida

$line = Get-content -LiteralPath $script_path"path.txt" #saame vajalikud hostid
$len = $line.Length	#arvutame pikkuse, täpsemalt iga rea pikkuse massiivi

$i = 0

#edasi kuulutame massiivid, mis hiljem vajalikud
$ip	= @()	#ip massiiv
$capt	= @()	#kirjelduste massiiv
$Labels	=@()	#Label massiiv
$PictureBoxs	=@()	#PictureBox massiiv

while($i -lt $len){
	$f	= $line[$i].IndexOf("/") #arvutame kirjelduste alguse positsiooni
	$l	= $line[$i].LastIndexOf("/")	#arvutame kirjelduste lõpu positsiooni
	$ip	+= $line[$i].Substring(0,$f)	#saame ip
	$capt	+= $line[$i].Substring($f+1,$l-$f-1)	#saame kirjelduse

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

	$label_from_top	+= 15	#teeme "sammu" Y-teljel

	$Labels	+= $label_obj	#lisame loodud Label üldmassiva
	$PictureBoxs	+= $PictureBox_obj	#lisame loodud PictureBox üldmassiva
	$main_form.Controls.Add($Labels[$i])
	$main_form.Controls.Add($PictureBoxs[$i])
	$i	+=1
}

#see väli viimase kontrollimise aja jaoks
$Label0	= New-Object System.Windows.Forms.Label
$Label0.Text	= Get-Date
$Label0.Location	= New-Object System.Drawing.Point(80,180)
$Label0.AutoSize	= $true


# Seome nuppu hiirekliki sündmusega ning kutsume iga PictureBox nimetatud loogika järgi
$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	= "Uuenda"

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

Järelsõna

Loodan, et see juhend on kellelegi kasulik. Kui olete seda juba väiksest peale teinud, siis õnnitlen, mina ei ole. Kuid olen valmis kuulama teie kommentaare ja ettepanekuid.

Minule endale oli rõõm natuke uurida ja kokku panna selline väike, kuid igapäevaelus kasulik utiliit. Plaanis on ka GUI kaudu sõlmede lisamine ja kustutamine ning automaatsete staatuste uuendamine, et ei peaks nuppu „vajutama” ja mitte segama „powershell.exe”.

Skripti viimane versioon on GitHub

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster