Powershellలో హోస్ట్ లభ్యతను పర్యవేక్షిస్తోంది

అందరికీ శుభదినం, నేను ఒక సాధారణ సూచనను పంచుకోవాలనుకుంటున్నాను “మీరు డజను హోస్ట్‌లను మాన్యువల్‌గా పింగ్ చేయడం ఎలా ఆపగలరు. రిజిస్ట్రేషన్ లేదా SMS లేదు!

Powershellలో హోస్ట్ లభ్యతను పర్యవేక్షిస్తోందిఇంటర్నెట్ నుండి

ముఖ్యమైననేను ప్రోగ్రామర్ లేదా సిస్టమ్ అడ్మినిస్ట్రేటర్ కాదు, కానీ నేను పెద్ద సంఖ్యలో వాటితో పని చేయాల్సి ఉంటుంది. సర్వర్లు మరియు సేవలు మరియు నేను ఈ స్క్రిప్ట్‌ను నా స్వంత సౌలభ్యం కోసం రాశాను.

ఇది ఉపయోగకరంగా లేదా ఆసక్తిగా భావించే ఎవరైనా, నేను పిల్లి కింద అడుగుతాను.

పవర్‌షెల్ ఎందుకునాకు పైథాన్‌లో సాధారణ ప్రోగ్రామ్‌లను వ్రాసే అనుభవం ఉంది, కానీ దీనికి ఇన్‌స్టాల్ చేయబడిన ఇంటర్‌ప్రెటర్ లేదా .exeని అమలు చేయడానికి అనుమతి అవసరం, ఇది నా పని పరిధిలో ఎల్లప్పుడూ సాధ్యం కాదు. కానీ పవర్‌షెల్ స్క్రిప్ట్ తరచుగా అమలు చేయడానికి అవకాశాన్ని కనుగొంటుంది.

అందరూ కన్సోల్/టెర్మినల్‌ను ఇష్టపడరు

ఇందులో ఎటువంటి వైరుధ్యం లేదని నేను భావిస్తున్నాను, లేకుంటే ప్రతి ఒక్కరూ ఇప్పటికీ కన్సోల్ ఇమెయిల్ క్లయింట్‌లను ఉపయోగిస్తున్నారు మరియు *nix సిస్టమ్‌లలో GUI కనిపించదు.

రోజువారీ జీవితంలో నేను పవర్‌షెల్‌ను చాలా ప్రాచీనంగా ఉపయోగించాల్సి ఉంటుంది కాబట్టి, దానికి GUIని జోడించడం సాధ్యమేనా అని నేను మొదట అర్థం చేసుకోవడానికి ప్రయత్నించాను. ఇది సాధ్యమేనని మరియు చాలా సులభం అని తేలింది:

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() #Вызываем "окно"

మేము దీనికి అవుట్‌పుట్ మూలకాన్ని జోడించి, ప్రాథమిక Windows-window టాటాలజీని పొందుతాము?.

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() #Вызываем оскорбительно элементарное окно

స్పీకర్లను జోడిద్దాం

కాబట్టి నేను "పింగ్ Yandex" మరియు *.iso మౌంట్ చేసిన సాధనం ప్రత్యేక GUIని పొందింది, కానీ ఇది సరిపోదు. ఇదే విధంగా, మీరు లభ్యత గురించి సమాచారాన్ని ప్రదర్శించవచ్చు, కానీ పర్యవేక్షణ కోసం మీరు ప్రతిసారీ స్క్రిప్ట్‌ను పునఃప్రారంభించవలసి ఉంటుంది.

మొదట, రెండు చిహ్నాలను గీయండి మరియు చిత్రాలను ప్రదర్శించే సామర్థ్యాన్ని జోడిద్దాము.

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 మారుపేర్లు మళ్లీ చిలిపిగా ఆడుతున్నాయి...

Powershellలో హోస్ట్ లభ్యతను పర్యవేక్షిస్తోంది
మరియు రీడింగ్‌లను అప్‌డేట్ చేయడానికి మేము ఒక బటన్‌ను కూడా జోడిస్తాము.

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)

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 = "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() #Вызываем оскорбительно элементарное окно

మీరు దానిని శుభ్రంగా ఉంచి, నిర్మాణానికి కట్టుబడి ఉన్నప్పటికీ, ఆవర్తన సవరణ అత్యంత ఆహ్లాదకరమైన అనుభూతులను కలిగించదు.

ప్రారంభించడానికి, మేము యాక్సెసిబిలిటీ చెక్‌ను ప్రత్యేక ఫంక్షన్‌లోకి మరియు డైరెక్టరీకి పాత్‌ను ప్రత్యేక వేరియబుల్‌లోకి తరలిస్తాము:

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

హోస్ట్ డేటాను బాహ్య ఫైల్ path.txtలో ఉంచి, దానిని "ip/host-functional-name/" రూపంలో వ్రాసి, పత్రంలో మేము దానిని శ్రేణులలో స్వీకరిస్తాము. మేము Y స్థానం యొక్క గణనను మరింత స్వయంచాలకంగా చేస్తాము. ఇవన్నీ ఫంక్షన్‌కి కాల్ చేయడం ద్వారా లేబుల్‌లు మరియు చెక్‌బాక్స్‌లను సృష్టించడానికి మాకు అవకాశాన్ని అందిస్తాయి:

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
	}

చివరి చెక్ యొక్క సమయాన్ని ప్రదర్శించడానికి స్థలాన్ని జోడిద్దాం, ఎందుకంటే ఇది సౌకర్యవంతంగా ఉంటుంది మరియు బటన్ నొక్కినప్పుడు మేము కొంచెం అదనపు చర్యను జోడిస్తాము.

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

నేను ఒక చిన్న ఫీచర్ బగ్‌ని కూడా జోడించాను, ఇది అందుబాటులో లేని హోస్ట్ కనుగొనబడినప్పుడు, సూచికను మార్చడం ద్వారా నివేదించడమే కాకుండా, స్పీకర్ల నుండి కూడా అరిచింది.

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

కాబట్టి కొన్ని అలంకరణలు చేసి, నాకు అనుకూలమైన రీడబుల్ ఫారమ్‌కి తీసుకురావడం తర్వాత, ఇది ఇలా మారింది:

పూర్తి స్క్రిప్ట్ కోడ్

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

తరువాతి మాట

ఈ ట్యుటోరియల్ ఎవరికైనా ఉపయోగకరంగా ఉంటుందని నేను ఆశిస్తున్నాను. మీరు ఊయల నుండి దాదాపుగా దీన్ని చేస్తుంటే, అప్పుడు అభినందనలు, నేను చేయలేదు. అయితే మీ వ్యాఖ్యలు మరియు సూచనలను వినడానికి నేను సిద్ధంగా ఉన్నాను.

నాకు, దైనందిన జీవితంలో ఇంత చిన్నది కాని ఉపయోగకరమైన యుటిలిటీని చుట్టూ త్రవ్వడం మరియు కలపడం చాలా ఆనందంగా ఉంది. ప్లాన్‌లలో GUI నుండి నోడ్‌లను జోడించడం మరియు తొలగించడం, అలాగే మొదటి స్థానంలో అమలు చేయాల్సిన వాటిని చేయడం కూడా ఉన్నాయి - బటన్‌ను “దూర్చాల్సిన” అవసరం లేకుండా స్వయంచాలక స్థితి నవీకరణ మరియు అది “powershell.exe”ని వేలాడదీయదు. .

స్క్రిప్ట్ యొక్క తాజా వెర్షన్ ఆన్ చేయబడింది గ్యాలరీలు

మూలం: www.habr.com

DDoS రక్షణ, VPS VDS సర్వర్‌లతో సైట్‌ల కోసం నమ్మకమైన హోస్టింగ్‌ను కొనుగోలు చేయండి 🔥 DDoS రక్షణతో కూడిన నమ్మకమైన వెబ్‌సైట్ హోస్టింగ్, VPS VDS సర్వర్‌లను కొనండి | ProHoster