sobota, 28 grudnia 2019

Napisałem skrypt w PowerShellu

W PowerShellu zakochany jestem od kilku lat, ale dawno nie miałem okazji nic w nim robić. Dopiero niedawno, przy okazji testowania pewnych rzeczy w pracy, miałem okazję napisać prosty skrypt, dedykowany do sprawdzania (średniej) prędkości i czasu pobierania pewnego pliku z jednego z urządzeń w naszej sieci.

Skrypt jest bardzo prosty, ale pomyślałem, że wrzucenie go tutaj może być całkiem dobrym pomysłem (szczególnie, że od jakiegoś czasu nic się i tak tutaj nie dzieje). Skrypt prezentuje się następująco:

param($URL, $count)
$i = 0
$total_time = 0
$total_speed = 0
While ($i -lt $count)
{
 $Start = Get-Date
 Invoke-WebRequest -Uri $URL -OutFile test.jpg
 $TimeTaken = ((Get-Date) - $Start).TotalMilliseconds
 $FileSize = (Get-Item test.jpg).length / 1MB * 8
 $speed = $FileSize / $TimeTaken * 1000
 Write-Host Request $i took $TimeTaken ms. Speed equal to $speed Mbps -ForegroundColor Green
 $total_time += $TimeTaken
 $total_speed += $speed
 $i ++
 Start-Sleep 1
 } 
$Avg_t = [String]::Format("{0:0.00} ms", $total_time / $count)
$Avg_s = [String]::Format("{0:0.00} Mbps", $total_speed / $count)
Write-Host Average time is $Avg_t. Average speed is $Avg_s -ForegroundColor Red


Skrypt zapisałem w pliku test.ps1. Uruchamiamy go wpisując w linii poleceń PS:

.\test.ps1 -URL 192.168.10.1:5000/image.jpg -count 10

gdzie URL to ścieżka w sieci do pliku, który służy nam do pomiaru prędkości, a count to liczba powtórzeń pomiaru (co pozwala na uśrednienie pomiarów na większej próbie). 

Skrypt jest bardzo prosty; wykorzystuje cmdlet Invoke-WebRequest do pobrania rzeczonego pliku przez HTTP. Oczywiście plik ten musi istnieć na zdalnym serwerze, żeby było co pobierać 😉. Ten cmdlet opakowany jest w proste Get-Date przed i po (plus obliczenie różnicy pomiędzy tymi czasami). Wielkość pobranego pliku (test.jpg, ponieważ w tym przypadku zawsze był to obrazek) mierzona jest cmdletem Get-Item, z którego wyjścia pobieram atrybut .length i formatowany w megabitach. Reszta to prosta arytmetyka i drukowanie wyników na ekranie.

Brak komentarzy:

Prześlij komentarz