Përshëndetje të gjithëve, dëshiroj të ndaj një udhëzim të thjeshtë "Si të ndaloni së ping-uari manualisht një duzinë hostesh. Pa regjistrim dhe SMS!".
Nga hapësirat e Internetit
Ëhtë e rëndësishme: unë nuk jam programues dhe as administratore sistemesh, por më duhet të punoj njëherësh me një grup të gjerë serverësh edhe shërbimesh dhe këtë skript e kam shkruar për komoditetin tim.
Të gjithëve që mund t'u bëhet e dobishme, ju lutem ndiqni më poshtë.
Pse PowershellKam përvojë në shkruarjen e programeve të thjeshta në Python, por ajo kërkon ose interpretues të instaluar ose të drejta për të ekzekutuar .exe, gjë që, brenda punës time, nuk është gjithmonë e mundur. Ndërsa skripti në Powershell shpesh gjen mundësinë të ekzekutohet.
Nuk të gjithë i pëlqejnë konsolën/terminin
Mendoj se kjo nuk është në kontradiktë, përndryshe të gjithë do të përdornin klientë e postës në konsolë dhe në sistemet *nix nuk do të ishte shfaqur GUI.
Pasi që në jetën e përditshme më duhet të përdor Powershell mjaft primitivisht, për të filluar përpiqem të kuptoj nëse mund t'i bashkëngjitim një GUI. Kaq e thjeshtë është:

Add-Type -assembly System.Windows.Forms #Lidhim bibliotekën
$main_form = New-Object System.Windows.Forms.Form #Krijojmë objektin me "dritaren" tonë
#Vendosim parametrat e saj
$main_form.Text ='Links up' #Emri në titull
$main_form.Width = 300 #Gjerësia e dritares
$main_form.Height = 200 #Lartësia e dritares
$main_form.AutoSize = $true #I japim mundësinë të ndryshojë madhësinë automatikisht, nëse është e nevojshme
$main_form.ShowDialog() #Thërrasim "dritaren"
Shtojmë një element dalës dhe marrim një dritare elementare Windows, tautologji?.

Add-Type -assembly System.Windows.Forms #Do t'i lidhim bibliotekën
$main_form = New-Object System.Windows.Forms.Form #Krijojmë një variabël me "dritaren" tonë
#Vendosim parametrat për të përmes parametrave
$main_form.Text ='Links up' #Emri në titull
$main_form.Width = 300 #Gjerësia e dritares
$main_form.Height = 200 #Lartësia e dritares
$main_form.AutoSize = $true #I japim mundësinë për të ndryshuar madhësinë vetë, nëse është e nevojshme
$Label = New-Object System.Windows.Forms.Label #Të gjitha elementet e formës do të futen në variabla, por në fakt janë objekti, si çdo variablë tjetër në Powershell
$Label.Text = "Përshëndetje! Unë jam një dritare elementare Windows, dhe ti çfarë arriti?" #Teksti i shfaqur
$Label.Location = New-Object System.Drawing.Point(10,65) #Pozita e objektit brenda formës në horizontale dhe vertikale (x,y)
$Label.AutoSize = $true
$main_form.Controls.Add($Label) #shtojmë objektin e krijuar në formë, në mënyrë që të mos humbasë gjatë ekzekutimit të skenarit
$main_form.ShowDialog() #Thërrasim dritaren e thjeshtëLe të shtojmë dinamikë
Ky është instrumenti me të cilin 'pingova Yandex' dhe montova *.iso, tani ka një GUI të veçantë, por kjo është e pamjaftueshme. Në këtë mënyrë mund të nxjerr informacion mbi disponueshmërinë, por për monitorimin do të duhet të rinisim çdo herë skenarin.
Fillimisht, le të vizatojmë dy ikona dhe të shtojmë mundësinë për të shfaqur imazhe.

$PictureBox = New-Object system.Windows.Forms.PictureBox #Objekti për shfaqjen e imazheve quhet mjaft logjikisht
$PictureBox.width = 10
$PictureBox.height = 10
$PictureBox.location = New-Object System.Drawing.Point(178,12)
#Këtu kalojmë në punë, lidhim imazhin që do të shfaqet me rezultatin e kontrollit të disponueshmërisë së hostit duke përdorur komandën
#<b>test-connection</b>, ku:
#-Count - kalon numrin e kërkesave
#-computer - IP ose emri i domain-it për kërkesën
#-quiet - për të na kthyer vetëm vlerën Boolean
if ((test-connection -Count 1 -computer ya.ru -quiet) -eq $True) {
$PictureBox.imageLocation = "C:Testyes.png" #Objekti i referohet imazhit përkatës
}
Else {
$PictureBox.imageLocation = "C:Testno.png" #Objekti i referohet imazhit përkatës
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$main_form.Controls.Add($PictureBox)
Përsëri DNS-të tona po bëjnë grahë...

Dhe le të shtojmë një buton, në mënyrë që të kemi mundësinë për të refresh-im tuaj.

$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 = "Rinovim"
# Ngjitim ngjarjen e klikimit të butonit me çdo PictureBox sipas logjikës së përshkruar më parë
$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)

E shkëlqyeshme, tani në prodhim!?
Duke shkruar manualisht rreth gjashtë hostesh, papritmas kuptova një gjë — ky projekt do të përfundojë, hostet do të ndryshojnë dhe për çdo herë do të duhet të rregulloj skenarin. Nga njëra anë, nuk është ndonjë pasojë e madhe, është një zgjidhje për veten time. Nga ana tjetër, kjo zgjidhje për veten time, shikoni se çfarë po ndodh:
Një pamje jo për ata që janë të ndjeshëm
Add-Type -assembly System.Windows.Forms #Për të lidhur bibliotekën
$main_form = New-Object System.Windows.Forms.Form #Krijojmë një variabël për "dritaren" tonë
#Caktojmë parametrat për atë përmes parametrave
$main_form.Text ='Lidhjet e aktivizuara' #Emri në titull
$main_form.Width = 300 #Gjerësia e dritares
$main_form.Height = 200 #Lartësia e dritares
$main_form.AutoSize = $true #I japim mundësinë të ndryshojë madhësinë vetë, nëse është e nevojshme
$Label = New-Object System.Windows.Forms.Label #Të gjithë elementët e formës do të ruhen në variabla, por në fakt këto janë objekte, si çdo variabël tjetër në Powershell
$Label.Text = "ya.ru ............................" #Teksti i shfaqur
$Label.Location = New-Object System.Drawing.Point(15,10) #Vendosja e objektit brenda formës horizontalisht dhe vertikalisht (x,y)
$Label.AutoSize = $true
$Label1 = New-Object System.Windows.Forms.Label #Të gjithë elementët e formës do të ruhen në variabla, por në fakt këto janë objekte, si çdo variabël tjetër në Powershell
$Label1.Text = "8.8.8.8 ............................" #Teksti i shfaqur nga DNS-i i Google
$Label1.Location = New-Object System.Drawing.Point(15,30) #Vendosja e objektit brenda formës horizontalisht dhe vertikalisht (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 #Objekti për shfaqjen e imazheve quhet në mënyrë logjike
$PictureBox.width = 10
$PictureBox.height = 10
#Këtu ne kalojmë në punë lidhim imazhin e shfaqur me rezultatin e testit të arritshmërisë së nodit duke përdorur komandlet
#<b>test-connection</b>, ku:
#-Count - kalon numrin e kërkesave
#-computer - IP ose emri i domainit për kërkesën
#-quiet - për të na kthyer vetëm vlerën 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" #Objekti i referohet imazhit përkatës
}
Else {
$PictureBox.imageLocation = "C:Testno.png" #Objekti i referohet imazhit përkatës
}
$PictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox1 = New-Object system.Windows.Forms.PictureBox #Objekti për të shfaqur imazhet quhet mjaft logjikisht
$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" #Objekti i referohet imazhit përkatës
}
Else {
$PictureBox1.imageLocation = "C:Testno.png" #Objekti i referohet imazhit përkatës
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox2 = New-Object system.Windows.Forms.PictureBox #Objekti për të shfaqur imazhet quhet mjaft logjikisht
$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" #Objekti i referohet imazhit përkatës
}
Else {
$PictureBox2.imageLocation = "C:Testno.png" #Objekti i referohet imazhit përkatës
}
$PictureBox2.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox3 = New-Object system.Windows.Forms.PictureBox #Objekti për të shfaqur imazhet quhet mjaft logjikisht
$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" #Objekti i referohet imazhit përkatës
}
Else {
$PictureBox3.imageLocation = "C:Testno.png" #Objekti i referohet imazhit përkatës
}
$PictureBox3.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox4 = New-Object system.Windows.Forms.PictureBox #Objekti për të shfaqur imazhet quhet mjaft logjikisht
$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" #Objekti i referohet imazhit përkatës
}
Else {
$PictureBox4.imageLocation = "C:Testno.png" #Objekti i referohet imazhit përkatës
}
$PictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::zoom
$PictureBox5 = New-Object system.Windows.Forms.PictureBox #Objekti për të shfaqur imazhet quhet mjaft logjikisht
$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" #Objekti i referohet imazhit përkatës
}
Else {
$PictureBox5.imageLocation = "C:Testno.png" #Objekti i referohet imazhit përkatës
}
$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 = "Rifresko"
# Ndajmë në ngjarjen e klikimit të butonit thirrjen e çdo PictureBox sipas logjikës së mëparshme
$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) #shtojmë objektin e krijuar në formë që të mos humbitet gjatë ekzekutimit të skriptit
$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() #Thirrim një dritare elementare
Edhe nëse respektohet pastërtia dhe struktura, redaktimi periodic do të shkaktojë ndjenja jo shumë të këndshme.
Fillimi e nxjerrim kontrollin e disponueshmërisë në një funksion të veçantë, dhe rrugën për deri në katalog në një variabël të veçantë:
$script_path = "C:TestPS ping"
# Kalojmë në funksionin e objektit të krijuar PictureBox dhe adresën IP që duhet të kontrollojmë.
# Në përfundim, ndërrohet imazhi që ngarkohet.
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"}
}
Të dhënat për host-in do t'i nxjerrim në një skedë të jashtme path.txt, duke i regjistruar në formatin "ip/host-emri-funksional/", dhe në dokument do t'i pranojmë ato në tabela. Po ashtu, do ta bëjmë llogaritjen e pozicionit në Y më automatizuar. E gjithë kjo na jep mundësinë të krijojmë etiketa dhe kutia kontrolli duke thirrur funksionin:

#создаем описательную линию, на вход идут: объект 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
}
Do të shtojmë një hapësirë për të shfaqur kohën e fundit të kontrollit, sepse kjo është e dobishme, dhe pak do ta plotësojmë veprimin kur të shtypet butoni.

$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, unë kam bashkëngjitur një funksion të vogël që, kur zbulon një host të papasur, njofton jo vetëm me ndryshimin e indikators, por edhe me thirrje nga altoparlantët.
Add-Type -AssemblyName System.Speech
$voice = New-Object System.Speech.Synthesis.SpeechSynthesizer
$voice.Rate = 5
$voice.Speak("Kujdes! Kujdes! Biznesi është nën sulm!")
Pra, pas disa zbukurimeve dhe përshtatjeve për ta bërë më të lexueshme dhe të përshtatshme për mua, rezultati është kështu:
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
#Kalojmë në funksionin tashmë të krijuar objektin PictureBox dhe IP-në që duam të kontrollojmë.
#Në daljen e tij ndryshon imazhi i ngarkuar.
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("Gabim! Hosti " + $path_ip + ", nuk është i arritshëm!")
}
}
#krijojmë një linjë përshkruese, në hyrje marrim: objektin Label, IP-në, përshkrimin dhe pozicionin në boshtin 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
}
#krijojmë një indikator për linjën përshkruese, në hyrje marrim: objektin PictureBox, IP-në dhe pozicionin në boshtin 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' #Emri në titull
$main_form.Width = 300 #Gjerësia e dritares
$main_form.Height = 200 #Lartësia e dritares
$main_form.AutoSize = $true #I lejojmë të ndryshojë madhësinë e tij automatikisht, nëse është e nevojshme
$main_form.TopMost = $true #Kjo është një gjë shumë e rëndësishme, ajo lejon që dritarja të mbetet mbi të tjerat
$line = Get-content -LiteralPath $script_path"path.txt" #Nxjerrim të dhënat për hostet e nevojshme
$len = $line.Length #llogarisim gjatësi, për të qenë më saktë, masën e secilës rresht
$i = 0
#më pas shpallim masivët që do të nevojiten më vonë
$ip = @() #masivi ip
$capt = @() #masivi përshkrimi
$Labels =@() #masivi Label
$PictureBoxs =@() #masivi PictureBox
while($i -lt $len){
$f = $line[$i].IndexOf("/") #llogarisim pozicionin e fillimit të përshkrimit
$l = $line[$i].LastIndexOf("/") #llogarisim pozicionin e fundit të përshkrimit
$ip += $line[$i].Substring(0,$f) #nxjerrim ip
$capt += $line[$i].Substring($f+1,$l-$f-1) #nxjerrim përshkrimin
#krijojmë fushë Label
Create_line -label ($label_obj = New-Object System.Windows.Forms.Label) -path_ip $ip[$i] -caption $capt[$i] -top $label_from_top
#krijojmë fushë PictureBox
Create_link -PictureBox ($PictureBox_obj = New-Object system.Windows.Forms.PictureBox) -path_ip $ip[$i] -top $label_from_top
$label_from_top += 15 #bëjmë "hapin" në boshtin Y
$Labels += $label_obj #shtojmë Created labe në masivin e përgjithshëm
$PictureBoxs += $PictureBox_obj #shtojmë Created picturebox në masivin e përgjithshëm
$main_form.Controls.Add($Labels[$i])
$main_form.Controls.Add($PictureBoxs[$i])
$i +=1
}
#kjo është fusha me kohën e fundit të kontrollit
$Label0 = New-Object System.Windows.Forms.Label
$Label0.Text = Get-Date
$Label0.Location = New-Object System.Drawing.Point(80,180)
$Label0.AutoSize = $true
#Vë në ndodhi presionin e çdo PictureBox sipas logjikës së mëparshme të përshkruar
$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 = "Rinovojë"
$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ënie
Shpresoj që ky tutorial do t'i shërbejë dikujt. Nëse e ke bërë këtë që nga fëmijëria, atëherë të uroj, unë nuk kam bërë. Por jam i gatshëm të dëgjoj komentet dhe sugjerimet tuaja.
Më vjen mirë që kam pasur mundësinë të punoj dhe të krijoj këtë utilitar të vogël, por të dobishëm në përditshmëri. Planifikoj të realizoj gjithashtu shtimin dhe heqjen e nyjeve nga GUI, si dhe të implementoj automatikisht përditësimin e statusit pa pasur nevojë të shtyp butonin, dhe që të mos ‘ngjisë’ ‘powershell.exe’.
Versioni më i fundit i skriptit është në GitHub
Burimi: habr.com
