Monitorimi i disponueshmërisë së hostit në Powershell

Përshëndetje të gjithëve, do të doja të ndaja një udhëzues të thjeshtë: "Si të ndaloni pingimin manual të dhjetëra hosteve. Nuk kërkohet regjistrim ose SMS!"

Monitorimi i disponueshmërisë së hostit në PowershellNga pafundësia e internetit

Është e rëndësishmeUnë nuk jam programues ose administrator sistemi, por më duhet të punoj me një grup të madh serverat dhe shërbime dhe e shkrova këtë skenar për lehtësinë time.

Kushdo që mund ta gjejë këtë të dobishme ose kurioz, ju lutemi ta lexoni më tej.

Pse Powershell?Kam përvojë në shkrimin e programeve të thjeshta Python, por kjo kërkon ose një interpretues të instaluar ose leje për të ekzekutuar skedarin .exe, gjë që nuk është gjithmonë e mundur në punën time. Megjithatë, një skript PowerShell është më shpesh i aftë të ekzekutohet.

Jo të gjithëve u pëlqen konzola/terminali

Nuk mendoj se ka ndonjë kontradiktë këtu, përndryshe të gjithë do të përdornin ende klientët e email-it të konsolës dhe ndërfaqet grafike (GUI) nuk do të ishin shfaqur në sistemet *nix.

Meqenëse e përdor PowerShell në një mënyrë mjaft bazike në punën time të përditshme, së pari u përpoqa të kuptoja nëse ishte e mundur t'i shtoja një GUI. Rezulton se është e mundur dhe mjaft e thjeshtë gjithashtu:

Monitorimi i disponueshmërisë së hostit në Powershell

Add-Type -assembly System.Windows.Forms #Подключим библиотеку
$main_form = New-Object System.Windows.Forms.Form #Создаем объект с нашим "окном"

#Задаем для него параметры
$main_form.Text ='Links up' #Имя в заголовке
$main_form.Width = 300 #Ширина окна
$main_form.Height = 200 #Высота окна
$main_form.AutoSize = $true #Даем ему возможность самостоятельно изменять размер, при необходимости
$main_form.ShowDialog() #Вызываем "окно"

Shtojini kësaj elementin e daljes dhe marrim një dritare elementare të Windows - një tautologji?

Monitorimi i disponueshmërisë së hostit në Powershell

Add-Type -assembly System.Windows.Forms #Подключим библиотеку

$main_form = New-Object System.Windows.Forms.Form #Создаем переменную с нашим "окном"

#Задаем для него параметры через параметры
$main_form.Text ='Links up' #Имя в заголовке
$main_form.Width = 300 #Ширина окна
$main_form.Height = 200 #Высота окна
$main_form.AutoSize = $true #Даем ему возможность самостоятельно изменять размер, при необходимости

$Label = New-Object System.Windows.Forms.Label #Все элементы формы будут заноситься в переменные, но по факту это объекты, как любые другие переменные в Powershell
$Label.Text = "Привет! Я элементарное Windows-окно, а чего добился ты?" #Выводимый текст
$Label.Location  = New-Object System.Drawing.Point(10,65) #Расположение объекта внутри формы по горизонтали и вертикали (x,y)
$Label.AutoSize = $true 

$main_form.Controls.Add($Label) #добавляем созданный объект к форме, чтобы он не потерялся при выполнении скрипта

$main_form.ShowDialog() #Вызываем оскорбительно элементарное окно

Le të shtojmë pak dinamikë

Pra, mjeti që përdora për të "pinguar Yandex" dhe për të montuar skedarët *.iso tani ka një GUI të dedikuar, por kjo nuk mjafton. Mund të shfaqësh informacionin e disponueshmërisë në një mënyrë të ngjashme, por monitorimi kërkon rinisjen e skriptit çdo herë.

Për të filluar, le të vizatojmë dy ikona dhe të shtojmë mundësinë për të shfaqur imazhe.

Monitorimi i disponueshmërisë së hostit në Powershell

$PictureBox = New-Object system.Windows.Forms.PictureBox #Объект для вывода изображений называется вполне логично
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)

#Вот тут мы переходим к делу привязываем выводимую картинку к результату проверки доступности узла используя командлет
#<b>test-connection</b>, где:
#-Count - передает кол-во запросов
#-computer - IP или доменное имя для запроса
#-quiet - для того чтобы нам вернулось только Boolean значение
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
	$PictureBox.imageLocation = "C:Testyes.png" #Объект обращается к соответствующей картинке 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Объект обращается к соответствующей картинке 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$main_form.Controls.Add($PictureBox)

DNS-i ynë po funksionon përsëri keq...

Monitorimi i disponueshmërisë së hostit në Powershell
Gjithashtu do të shtojmë një buton për të bërë të mundur përditësimin e leximeve.

Monitorimi i disponueshmërisë së hostit në 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 = "Reload"

# Вешаем на событие нажатия кнопки обращение каждого PictureBox согласно ранее описанной логике
$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)

Monitorimi i disponueshmërisë së hostit në Powershell

Shkëlqyeshëm, tani në prodhim!?

Pasi futa manualisht rreth gjysmë duzine hostesh, papritmas kuptova një gjë: ky projekt do të mbarojë, hostet do të ndryshojnë dhe do të më duhet ta modifikoj skriptin çdo herë. Nga njëra anë, nuk është ndonjë gjë e madhe; është thjesht një vendim personal. Nga ana tjetër, është një vendim personal - shikoni rezultatin:

Spektakli nuk është për ata që kanë probleme me zemrën.

Add-Type -assembly System.Windows.Forms #Подключим библиотеку

$main_form = New-Object System.Windows.Forms.Form #Создаем переменную с нашим "окном"

#Задаем для него параметры через параметры
$main_form.Text ='Links up' #Имя в заголовке
$main_form.Width = 300 #Ширина окна
$main_form.Height = 200 #Высота окна
$main_form.AutoSize = $true #Даем ему возможность самостоятельно изменять размер, при необходимости

$Label = New-Object System.Windows.Forms.Label #Все элементы формы будут заноситься в переменные, но по факту это объекты, как любые другие переменные в Powershell
$Label.Text = "ya.ru		............................" #Выводимый текст 
$Label.Location  = New-Object System.Drawing.Point(15,10) #Расположение объекта внутри формы по горизонтали и вертикали (x,y)
$Label.AutoSize = $true 

$Label1 = New-Object System.Windows.Forms.Label #Все элементы формы будут заноситься в переменные, но по факту это объекты, как любые другие переменные в Powershell
$Label1.Text = "8.8.8.8		............................" #Выводимый текст googl-овский DNS-ник
$Label1.Location  = New-Object System.Drawing.Point(15,30) #Расположение объекта внутри формы по горизонтали и вертикали (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 #Объект для вывода изображений называется вполне логично
$PictureBox.width = 10
$PictureBox.height = 10

#Вот тут мы переходим к делу привязываем выводимую картинку к результату проверки доступности узла используя командлет
#<b>test-connection</b>, где:
#-Count - передает кол-во запросов
#-computer - IP или доменное имя для запроса
#-quiet - для того чтобы нам вернулось только Boolean значение
$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" #Объект обращается к соответствующей картинке 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Объект обращается к соответствующей картинке 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Объект для вывода изображений называется вполне логично
$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" #Объект обращается к соответствующей картинке 
}
Else {
	$PictureBox1.imageLocation = "C:Testno.png" #Объект обращается к соответствующей картинке 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Объект для вывода изображений называется вполне логично
$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" #Объект обращается к соответствующей картинке 
}
Else {
	$PictureBox2.imageLocation = "C:Testno.png" #Объект обращается к соответствующей картинке 
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Объект для вывода изображений называется вполне логично
$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" #Объект обращается к соответствующей картинке 
}
Else {
	$PictureBox3.imageLocation = "C:Testno.png" #Объект обращается к соответствующей картинке 
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Объект для вывода изображений называется вполне логично
$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" #Объект обращается к соответствующей картинке 
}
Else {
	$PictureBox4.imageLocation = "C:Testno.png" #Объект обращается к соответствующей картинке 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Объект для вывода изображений называется вполне логично
$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" #Объект обращается к соответствующей картинке 
	}
Else {
	$PictureBox5.imageLocation = "C:Testno.png" #Объект обращается к соответствующей картинке 
	}
$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 = "Reload"

# Вешаем на событие нажатия кнопки обращение каждого PictureBox согласно ранее описанной логике
$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) #добавляем созданный объект к форме, чтобы он не потерялся при выполнении скрипта
$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() #Вызываем оскорбительно элементарное окно

Edhe nëse e mbani të pastër dhe i përmbaheni strukturës, redaktimi periodik nuk do të jetë përvoja më e këndshme.

Për të filluar, ne e zhvendosim kontrollin e disponueshmërisë në një funksion të veçantë dhe shtegun e direktorisë në një variabël të veçantë:

$script_path	= "C:TestPS ping"

#Переезжаем в финкцию уже созданный объект PictureBox и IP-адресс который нужно проверить.
#На выходе оно меняет подгружаемую картинку.
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"} 
	}

Do t'i eksportojmë të dhënat e hostit në një skedar të jashtëm, path.txt, duke përdorur formatin "ip/host-functional-name/" dhe pastaj do t'i ruajmë në vargje brenda dokumentit. Gjithashtu do ta bëjmë llogaritjen e pozicionit Y më të automatizuar. Kjo na lejon të krijojmë Etiketa dhe Kuti Kontrolli duke thirrur një funksion:

Monitorimi i disponueshmërisë së hostit në 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
	}

Le të shtojmë një vend për të shfaqur kohën e kontrollit të fundit, sepse është i përshtatshëm, dhe do ta plotësojmë pak veprimin kur klikojmë butonin.

Monitorimi i disponueshmërisë së hostit në 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 
	})

Gjithashtu shtova një defekt të vogël që, kur zbulonte një host të padisponueshëm, jo ​​vetëm që e tregonte duke ndryshuar treguesin, por edhe duke bërtitur nga altoparlantët.

Add-Type -AssemblyName System.Speech
$voice	= New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate	= 5
$voice.Speak("Ворнинг! Ворнинг! Байз из андер аттак!")

Pra, pas disa zbukurimeve dhe sjelljes në një formë të lexueshme që ishte e përshtatshme për mua, ja si doli:

Kodi i plotë i skriptit

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

#Переезжаем в финкцию уже созданный объект PictureBox и IP-адресс который нужно проверить.
#На выходе оно меняет подгружаемую картинку.
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("Ошибка! Хост " + $path_ip + ", недоступен!")
		}
	}

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

$main_form	= New-Object System.Windows.Forms.Form
$main_form.Text ='Links up' #Имя в заголовке
$main_form.Width = 300 #Ширина окна
$main_form.Height = 200 #Высота окна
$main_form.AutoSize = $true #Даем ему возможность самостоятельно изменять размер, при необходимости
$main_form.TopMost	= $true #Это очень важная штука, она дает возможность закрепить окно поверх других

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

#это поле с последним временем проверки
$Label0	= New-Object System.Windows.Forms.Label
$Label0.Text	= Get-Date
$Label0.Location	= New-Object System.Drawing.Point(80,180)
$Label0.AutoSize	= $true


# Вешаем на событие нажатия кнопки обращение каждого PictureBox согласно ранее описанной логике
$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	= "Reload"

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

pasthënje

Shpresoj që ky tutorial do t'i jetë i dobishëm dikujt. Nëse e keni bërë këtë që kur ishit foshnjë, urime. Unë nuk e kam bërë. Por jam i hapur për komentet dhe sugjerimet tuaja.

Personalisht, më pëlqeu shumë të gërmoja dhe të krijoja këtë program të vogël, por të dobishëm. Planet e mia përfshijnë gjithashtu shtimin dhe fshirjen e nyjeve nga ndërfaqja grafike (GUI), si dhe zbatimin e asaj që duhej të zbatohej që në fillim: përditësime automatike të statusit pa pasur nevojë të klikosh një buton dhe parandalimin e rrëzimit të "powershell.exe".

Versioni më i fundit i skriptit është aktiv GitHub

Burimi: www.habr.com

Bleni një host të besueshëm për faqet me mbrojtje DDoS, serverë VPS VDS 🔥 Bleni hosting të besueshëm të faqeve të internetit me mbrojtje DDoS, servera VPS VDS | ProHoster