ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ доступности хостов Π½Π° Powershell

ВсСм Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток, Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ простой инструкциСй «Как ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠΈΠ½Π³ΠΎΠ²Π°Ρ‚ΡŒ дСсяток хостов. Π‘Π΅Π· рСгистрации ΠΈ БМБ!Β».

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ доступности хостов Π½Π° PowershellΠ‘ просторов Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°

Π’Π°ΠΆΠ½ΠΎ: я Π½Π΅ программист ΠΈ Π½Π΅ систСмный администратор, Π½ΠΎ ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с большим Π½Π°Π±ΠΎΡ€ΠΎΠΌ сСрвСров ΠΈ сСрвисов ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ скрипт я написал для собствСнного удобства.

ВсСх ΠΊΠΎΠΌΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ PowershellΠ£ мСня Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ написания простых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Python, Π½ΠΎ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π»ΠΈΠ±ΠΎ установлСнного ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, Π»ΠΈΠ±ΠΎ ΠΏΡ€Π°Π²Π° Π½Π° запуск .exe, Ρ‡Ρ‚ΠΎ, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ всСгда Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. А Π²ΠΎΡ‚ скрипт Π½Π° Powershell Ρ‡Π°Ρ‰Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

НС всС Π»ΡŽΠ±ΡΡ‚ консоль/Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»

Π”ΡƒΠΌΠ°ΡŽ Π² этом Π½Π΅Ρ‚ противорСчия, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС всС Π±Ρ‹ Π΄ΠΎ сих пользовались ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π² *nix-систСмах Π½Π΅ появился GUI.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² повсСднСвности ΠΌΠ½Π΅ приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Powershell достаточно ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎ, Ρ‚ΠΎ для Π½Π°Ρ‡Π°Π»Π° я попытался ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π° ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ 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() #Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ "ΠΎΠΊΠ½ΠΎ"

ДобавляСм ΠΊ этому элСмСнт Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ элСмСнтарноС Windwows-ΠΎΠΊΠ½ΠΎ тавтология?.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ доступности хостов Π½Π° 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() #Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΡΠΊΠΎΡ€Π±ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ элСмСнтарноС ΠΎΠΊΠ½ΠΎ

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ

Π’Π°ΠΊ инструмСнт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я Β«ΠΏΠΈΠ½Π³ΠΎΠ²Π°Π» ЯндСкс» ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» *.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 Π±ΠΎΠ»Π΅Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ. ВсС это Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Label`Ρ‹ ΠΈ checkbox`Ρ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ доступности хостов Π½Π° 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Β».

ПослСдняя вСрсия скрипта Π½Π° GitHub

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com