Hostu pieejamības uzraudzība PowerShell

Sveiki visiem, vēlos dalīties ar vienkāršu instrukciju "Kā pārstāt manuāli pingot desmit hostus. Bez reģistrācijas un SMS!".

Hostu pieejamības uzraudzība PowerShellNo interneta plašumiem

Svarīgi: es neesmu programmētājs un neesmu sistēmu administrators, bet man vienlaikus nākas strādāt ar lielu skaitu serveriem un pakalpojumiem, un šo skriptu es uzrakstīju savai ērtībai.

Visus, kam tas var būt noderīgi un interesanti, aicinu zem lasīt.

Kāpēc PowershellMan ir pieredze vienkāršu programmu rakstīšanā Python, taču tam ir nepieciešams vai nu instalēts interpreters, vai tiesības palaiest .exe, kas manā darbā ne vienmēr ir iespējams. Bet skriptu Powershell biežāk izdevies palaist.

Ne visi mīl konsoli/termināli

Domāju, ka tajā nav pretrunu, citādi visi vēl joprojām izmantotu konsoles e-pasta klientus, un *nix sistēmās nebūtu parādījies GUI.

Kad ikdienā man bieži jātiek galā ar Powershell diezgan primitīvi, es vispirms mēģināju saprast, vai tam var pievienot GUI. Izrādās, var, un pat diezgan vienkārši:

Hostu pieejamības uzraudzība PowerShell

Add-Type -assembly System.Windows.Forms #Pievienojam bibliotēku
$main_form = New-Object System.Windows.Forms.Form #Izveidojam objektu ar mūsu "logu"

#Iestatām tam parametrus
$main_form.Text ='Links up' #Nosaukums virsrakstā
$main_form.Width = 300 #Loga platums
$main_form.Height = 200 #Loga augstums
$main_form.AutoSize = $true #Dodam tam iespēju mainīt izmēru, ja nepieciešams
$main_form.ShowDialog() #Izsaucam "logu"

Pievienojam tam izvades elementu un iegūstam elementāru Windows logu, vai ne?

Hostu pieejamības uzraudzība PowerShell

Add-Type -assembly System.Windows.Forms #Pievienosim bibliotēku

$main_form = New-Object System.Windows.Forms.Form #Izveidojam mainīgo ar mūsu "logu"

#Nosakām tam parametrus caur parametriem
$main_form.Text ='Links up' #Virsma nosaukums
$main_form.Width = 300 #Loga platums
$main_form.Height = 200 #Loga augstums
$main_form.AutoSize = $true #Ļaujam tam mainīt izmēru pašam, ja nepieciešams

$Label = New-Object System.Windows.Forms.Label #Visi formas elementi tiks ievietoti mainīgajos, bet faktiski tie ir objekti, kā jebkuri citi mainīgie PowerShell
$Label.Text = "Sveiki! Es esmu pamata Windows logs, bet ko tu esi sasniedzis?" #Izvade teksts
$Label.Location  = New-Object System.Drawing.Point(10,65) #Objekta novietojums formā pa horizontāli un vertikāli (x,y)
$Label.AutoSize = $true 

$main_form.Controls.Add($Label) #Pievienojam izveidoto objektu formai, lai tas nepazustu skripta izpildes laikā

$main_form.ShowDialog() #Aicinām atvērt pārejošu pamata logu

Pievienosim dinamiku

Tagad instruments, ar kuru es "pingoju Yandex" un montēju *.iso, ir ieguvis atsevišķu GUI, bet tas nav viss. Līdzīgā veidā var izvadīt informāciju par pieejamību, bet monitorēšanai katru reizi būs jāpārstartē skripts.

Vispirms uzmeistarosim divas ikonas un pievienosim iespēju attēlu izvadīšanai.

Hostu pieejamības uzraudzība PowerShell

$PictureBox = New-Object system.Windows.Forms.PictureBox #Objekts attēlu displejam ir saprotams nosaukums
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)

#Šeit mēs pieejam pie lietas, sasaistot attēlu ar rezultātu par pieejamību izmantojot komandu
#<b>test-connection</b>, kur:
#-Count - nosaka pieprasījumu skaitu
#-computer - IP vai domēna vārds pieprasījumam
#-quiet - lai atgrieztu tikai Boolean vērtību
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
	$PictureBox.imageLocation = "C:Testyes.png" #Objekts norāda uz atbilstošo attēlu 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Objekts norāda uz atbilstošo attēlu 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$main_form.Controls.Add($PictureBox)

Atkal mūsu DNS serveri uzvedas dīvaini…

Hostu pieejamības uzraudzība PowerShell
Un vēl pievienosim pogu, lai būtu iespēja atjaunināt rādījumus.

Hostu pieejamības uzraudzība 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"

# Pievienojam pogas nospiešanas notikumam katra PictureBox piekļuvi saskaņā ar iepriekš aprakstīto loģiku
$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)

Hostu pieejamības uzraudzība PowerShell

Brīnišķīgi, tagad ražošana!?

Rokasgrāmatā nosakot apmēram pusduci hostus, es pēkšņi sapratu vienu lietu — ka šis projekts beigsies, hosti mainīsies un man katru reizi būs jāmaina skripts. No vienas puses, nekas briesmīgs, tas ir taču risinājums man pašam. No otras puses, paskatieties, kas sanāk:

Skats nav vājajiem sirdīm

Add-Type -assembly System.Windows.Forms #Pievienojam bibliotēku

$main_form = New-Object System.Windows.Forms.Form #Izveidojam mainīgi ar mūsu "logu"

#Norādām parametru logam
$main_form.Text ='Links up' #Nosaukums virsrakstā
$main_form.Width = 300 #Loga platums
$main_form.Height = 200 #Loga augstums
$main_form.AutoSize = $true #Atļaujam tam automātiski mainīt izmēru, ja nepieciešams

$Label = New-Object System.Windows.Forms.Label #Visi formas elementi tiks piešķirti mainīgajiem, bet patiesībā tie ir objekti, kā jebkuri citi mainīgie PowerShell
$Label.Text = "ya.ru		............................" #Izvērstais teksts 
$Label.Location  = New-Object System.Drawing.Point(15,10) #Objekta novietojums logā horizontāli un vertikāli (x,y)
$Label.AutoSize = $true 

$Label1 = New-Object System.Windows.Forms.Label #Visi formas elementi tiks piešķirti mainīgajiem, bet patiesībā tie ir objekti, kā jebkuri citi mainīgie PowerShell
$Label1.Text = "8.8.8.8		............................" #Izvērstais teksts googl-ovskā DNS
$Label1.Location  = New-Object System.Drawing.Point(15,30) #Objekta novietojums logā horizontāli un vertikāli (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 #Objekts attēlu attēlošanai sauc visai loģiski
$PictureBox.width = 10
$PictureBox.height = 10

#Šeit mēs pievēršamies būtiskajai daļai, piesaistot attēlu, ko atkārtojam pieejamības pārbaudes rezultātu, izmantojot komandu
#<b>test-connection</b>, kur:
#-Count - pārsūta pieprasījumu skaitu
#-computer - IP vai domēna vārds pieprasījumam
#-quiet - lai mums atgrieztos tikai Boolean vērtība
$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" #Objekts attiecas uz attiecīgo attēlu 
}
Else {
	$PictureBox.imageLocation = "C:Testno.png" #Objekts attiecas uz attiecīgo attēlu 
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Objekts attēlu izvietošanai nosaukts pilnīgi loģiski
$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" #Objekts attiecas uz attiecīgo attēlu 
}
Else {
	$PictureBox1.imageLocation = "C:Testno.png" #Objekts attiecas uz attiecīgo attēlu 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Objekts attēlu izvietošanai nosaukts pilnīgi loģiski
$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" #Objekts attiecas uz attiecīgo attēlu 
}
Else {
	$PictureBox2.imageLocation = "C:Testno.png" #Objekts attiecas uz attiecīgo attēlu 
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Objekts attēlu izvietošanai nosaukts pilnīgi loģiski
$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" #Objekts attiecas uz attiecīgo attēlu 
}
Else {
	$PictureBox3.imageLocation = "C:Testno.png" #Objekts attiecas uz attiecīgo attēlu 
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Objekts attēlu izvietošanai nosaukts pilnīgi loģiski
$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" #Objekts attiecas uz attiecīgo attēlu 
}
Else {
	$PictureBox4.imageLocation = "C:Testno.png" #Objekts attiecas uz attiecīgo attēlu 
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom

$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Objekts attēlu izvietošanai nosaukts pilnīgi loģiski
$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" #Objekts attiecas uz attiecīgo attēlu 
	}
Else {
	$PictureBox5.imageLocation = "C:Testno.png" #Objekts attiecas uz attiecīgo attēlu 
	}
$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 = "Pārlādēt"

# Ķēde notikuma aktivizēšanai pogas nospiešanas laikā katram PictureBox saskaņā ar iepriekš aprakstīto loģiku
$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) #pievienojam izveidoto objektu formai, lai tā nepazūd izpildes laikā
$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() #Izsaukt pazemīgu elementu logu

Pat ja ievērojam tīrību un ievērojam struktūru, tad periodiska rediģēšana radīs ne tās patīkamākās sajūtas.

Vispirms izdalām pieejamības pārbaudi atsevišķā funkcijā un ceļu uz katalogu atsevišķā mainīgajā:

$script_path	= "C:TestPS ping"

#Pārejām uz funkciju ar jau izveidoto PictureBox objektu un IP adresi, kuru jāpārbauda.
#Rezultāts maina ielādējamo attēlu.
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"} 
	}

Izdalīsim informāciju par hostu ārējā failā path.txt, ierakstot to formātā "ip/host-funkcionālais-nosaukums/", bet dokumentā pieņemsim tos masīvos. Tāpat automatizēsim Y pozīcijas aprēķinu. Viss šis ļauj mums izveidot Label’ā un checkbox’ā, izmantojot funkciju:

Hostu pieejamības uzraudzība 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
	}

Pievienosim vietu pēdējās pārbaudes laika izvadīšanai, jo tas ir ērti, un nedaudz papildināsim darbību, nospiežot pogu.

Hostu pieejamības uzraudzība 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 
	})

Tāpat es pievienoju mazu funkcionalitāti, kas, atklājot nepieejamu hostu, ziņo ne tikai ar indikatoru, bet arī izsauc no skaļruņiem.

Add-Type -AssemblyName System.Speech
$voice	= New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate	= 5
$voice.Speak("Brīdinājums! Brīdinājums! Bāze tiek uzbrukta!")

Tātad, pēc dažām dekorācijām un pievienošanas lasāmākam izskatam, iznāk tā:

Pilns skripta kods

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

# Mēs pārejam uz funkciju, izmantojot jau izveidoto PictureBox objektu un IP adresi, kuru nepieciešams pārbaudīt.
# Izvade maina ielādēto attēlu.
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("Kļūda! Host " + $path_ip + ", nav pieejams!")
		}
	}

# Izveidojam uzskaitījuma rindu, ieejīgās vērtības: Label objekts, IP adrese, apraksts un Y ass pozīcija
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
	}

# Izveidojam indikatoru aprakstošajai rindai, ieejīgās vērtības: PictureBox objekts, IP adrese un Y ass pozīcija
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 ='Saites augšpusē' # Nosaukums lodziņā
$main_form.Width = 300 # Loga platums
$main_form.Height = 200 # Loga augstums
$main_form.AutoSize = $true # ļauj atbilstoši pielāgot izmēru, ja nepieciešams
$main_form.TopMost	= $true # Šī ir ļoti svarīga funkcija, ļaujot saglabāt logu virs citiem

$line = Get-content -LiteralPath $script_path"path.txt" # iegūstam datus par nepieciešamajiem hostiem
$len = $line.Length	# aprēķinām garumu, t.i., katras rindas garumu masīvā

$i = 0

# Tālāk izsludinām masīvus, kas būs nepieciešami turpmāk
$ip	= @()	# IP masīvs
$capt	= @()	# apraksta masīvs
$Labels	=@()	# Label masīvs
$PictureBoxs	=@()	# PictureBox masīvs

while($i -lt $len){
	$f	= $line[$i].IndexOf("/") # aprēķinām apraksta sākuma pozīciju
	$l	= $line[$i].LastIndexOf("/")	# aprēķinām apraksta beigu pozīciju
	$ip	+= $line[$i].Substring(0,$f)	# iegūstam IP
	$capt	+= $line[$i].Substring($f+1,$l-$f-1)	# iegūstam aprakstu

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

	$label_from_top	+= 15	# palielinām Y ass atzīmi

	$Labels	+= $label_obj	# pievienojam izveidoto Label vispārējam masīvam
	$PictureBoxs	+= $PictureBox_obj	# pievienojam izveidoto PictureBox vispārējam masīvam
	$main_form.Controls.Add($Labels[$i])
	$main_form.Controls.Add($PictureBoxs[$i])
	$i	+=1
}

# Šis ir lauks ar pēdējo pārbaudes laiku
$Label0	= New-Object System.Windows.Forms.Label
$Label0.Text	= Get-Date
$Label0.Location	= New-Object System.Drawing.Point(80,180)
$Label0.AutoSize	= $true


# Piesaistām notikumu, kad tiek nospiests katrs PictureBox, atbilstoši iepriekš aprakstītajai loģikai
$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	= "Pārlādēt"

$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ēcvārds

Ceru, ka šis rokasgrāmata kādam noderēs. Ja jūs to darījāt no bērnības, apsveicu, es to nedarīju. Bet esmu gatavs uzklausīt jūsu komentārus un ieteikumus.

Man pašam bija patīkami pētīt un izveidot šādu nelielu, taču noderīgu utilītu. Plānā vēl ir iekļauts funkciju pievienošana un dzēšana no GUI, kā arī automātiska statusu atjaunināšana bez nepieciešamības "klikšķināt" uz pogas un lai tas nenoslogotu "powershell.exe".

Pēdējā skripta versija uz GitHub

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster