Rozwiązania zadań laboratoryjnych – PowerShell
Poniżej znajdują się kompletne rozwiązania wszystkich 10 zadań laboratoryjnych z zakresu programowania w PowerShell.
Każde rozwiązanie zawiera działający kod wraz z wyjaśnieniem działania oraz przykładem uruchomienia.
Zadanie 1: Kalkulator średniej ocen studenta
Rozwiązanie:
Skrypt pobiera od użytkownika oceny (liczby 2-6), zapisuje je do tablicy, oblicza średnią arytmetyczną i wyświetla wynik zaliczenia.
Opis działania:
- Skrypt inicjuje pustą tablicę
$oceny = @() przeznaczoną do przechowywania wprowadzanych przez użytkownika wartości ocen
- Pętla
while ($true) zapewnia ciągły dialog z użytkownikiem do momentu wpisania słowa kluczowego kończącego działanie
- Polecenie
Read-Host "Wprowadź ocenę (2-6) lub 'koniec'" pobiera dane od użytkownika wyświetlając komunikat zachęty
- Sprawdzenie warunku zakończenia realizowane jest przez konstrukcję
if ($wartosc -eq "koniec") { break } przerywającą pętlę
- Walidacja numeryczna wykonywana jest przez metodę
[int]::TryParse() sprawdzającą czy ciąg znaków można przekształcić na liczbę całkowitą
- Sprawdzenie zakresu wartości od 2 do 6 realizowane jest przez operator porównania
-ge 2 -and $ocena -le 6
- W przypadku nieprawidłowej wartości wyświetlany jest komunikat błędu przez
Write-Host z kolorem czerwonym i pętla kontynuuje działanie
- Poprawna ocena dodawana jest do tablicy konstrukcją
$oceny += $ocena rozszerzającą tablicę przy każdym wpisie
- Obliczanie sumy elementów tablicy wykonywane jest przez metodę
$oceny | Measure-Object -Sum zwracającą obiekt z właściwością Sum
- Średnia arytmetyczna wyliczana jest przez dzielenie
$suma / $oceny.Count gdzie Count zwraca liczbę elementów tablicy
- Formatowanie wyniku do dwóch miejsc po przecinku realizowane jest przez metodę
.ToString("F2") klasy string
- Warunek zaliczenia sprawdzany jest przez wyrażenie
$srednia -ge 3.0 z operatorem porównania numerycznego
- Wyświetlenie wyniku końcowego realizowane jest przez
Write-Host z kolorowaniem tekstu zależnym od statusu zaliczenia
- Kod wyjścia
exit 0 sygnalizuje poprawne zakończenie skryptu
Plik rozwiązania:
Pobierz 03_powershell_z01.ps1
Uruchomienie:
powershell -ExecutionPolicy Bypass -File 03_powershell_z01.ps1
Wprowadź oceny (2-6), wpisz "koniec" aby zakończyć
Zadanie 2: Monitor procesów systemowych
Rozwiązanie:
Skrypt pobiera listę procesów, sortuje według zużycia pamięci i wyświetla TOP 10 najbardziej zasobożernych procesów.
Opis działania:
- Polecenie
Get-Process pobiera listę wszystkich uruchomionych procesów w systemie Windows ze szczegółowymi informacjami
- Sortowanie procesów wykonywane jest przez cmdlet
Sort-Object -Property WorkingSet64 -Descending według zużycia pamięci roboczej
- Właściwość
WorkingSet64 reprezentuje ilość pamięci RAM aktualnie przydzielonej do procesu w bajtach
- Selekcja TOP 10 realizowana jest przez
Select-Object -First 10 pobierającą pierwsze dziesięć elementów posortowanego wyniku
- Formatowanie tabeli wykonywane jest przez
Format-Table z określonymi kolumnami: Name, ID, CPU, WorkingSet64
- Konwersja rozmiaru pamięci na MB realizowana jest przez dzielenie przez 1MB i zaokrąglanie do dwóch miejsc po przecinku
- Zapis raportu do pliku realizowany jest przez operator
> lub cmdlet Out-File z parametrem -Append dla dopisywania
- Zmienna ścieżki
$raportSciezka określa lokalizację pliku raportu w katalogu tymczasowym systemu
- Pętla
foreach iteruje po procesach generując szczegółowe informacje o każdym z nich
- Kolorowanie wyników w konsoli realizowane jest przez parametr
-ForegroundColor w Write-Host
- Wyświetlanie podsumowania zawiera informację o całkowitej liczbie procesów i czasie wygenerowania raportu
- Obsługa błędów przez blok
try/catch zapewniający wyświetlenie komunikatów w przypadku problemów z dostępem do procesów
- Filtrowanie procesów systemowych wykonywane jest przez sprawdzenie czy proces nie jest własnością systemu
- Kod wyjścia
exit 0 przy poprawnym zakończeniu umożliwia integrację z systemami monitoringu
Zadanie 3: Parser pliku logów systemowych
Rozwiązanie:
Skrypt odczytuje plik logów, filtruje wpisy ERROR i generuje statystyki z użyciem tablicy mieszającej.
Opis działania:
- Sprawdzenie czy plik logów istnieje realizowane jest przez cmdlet
Test-Path zwracający wartość logiczną
- Jeśli plik nie istnieje, skrypt tworzy go poleceniem
New-Item z przykładowymi danymi błędów
- Odczyt zawartości pliku wykonywany jest przez
Get-Content lub Select-String do wyszukiwania wzorców
- Wyszukiwanie linii z błędami realizowane jest przez
Select-String -Pattern "ERROR" filtrujące plik
- Tablica mieszająca (hashtable) tworzona jest przez konstrukcję
$bledy = @{} do przechowywania liczników typów błędów
- Inkrementacja licznika wykonywana jest przez
$bledy[$typBledu]++ z automatycznym tworzeniem klucza przy pierwszym wystąpieniu
- Pętla
foreach iteruje po każdej linii z błędami analizując jej zawartość i wyodrębniając typ błędu
- Śledzenie pierwszego błędu realizowane jest przez zmienną
$pierwszyBlad ustawianą tylko raz przy pierwszym wystąpieniu
- Śledzenie ostatniego błędu realizowane jest przez aktualizację zmiennej
$ostatniBlad przy każdej iteracji pętli
- Sortowanie według częstości wykonywane jest przez
$bledy.GetEnumerator() | Sort-Object Value -Descending
- Formatowanie wyników realizowane jest przez
Format-Table lub Write-Host z kolorowaniem
- Generowanie podsumowania zawiera informacje o liczbie błędów, typie najczęstszego i przedziale czasowym
- Obsługa przypadku braku błędów wyświetla komunikat informacyjny gdy Select-String nie zwrócił wyników
- Zapis statystyk do pliku realizowany jest przez przekierowanie wyjścia do pliku tekstowego
- Kod wyjścia
exit 0 przy poprawnym zakończeniu lub exit 1 w przypadku błędów krytycznych
Plik rozwiązania:
Pobierz 03_powershell_z03.ps1
Uruchomienie:
powershell -ExecutionPolicy Bypass -File 03_powershell_z03.ps1
Automatycznie tworzy przykładowy plik logów jeśli nie istnieje
Zadanie 4: Automatyczny kreator kopii zapasowych
Rozwiązanie:
Skrypt obsługuje dwa tryby: backup (tworzenie archiwum zip) i restore (odtwarzanie z archiwum).
Opis działania:
- Deklaracja parametrów realizowana jest przez konstrukcję
param([string]$Tryb, [string]$Źródło, [string]$Cel) definiującą parametry skryptu
- Sprawdzenie czy parametry zostały podane wykonywane jest przez weryfikację ich wartości, np.
if (-not $Tryb -or -not $Źródło -or -not $Cel) gwarantujące dostarczenie wszystkich wymaganych parametrów
- Walidacja trybu operacji realizowana jest przez instrukcję
if ($Tryb -ne "backup" -and $Tryb -ne "restore") odrzucającą nieprawidłowe wartości
- Generowanie znacznika czasu wykonywane jest przez
Get-Date -Format "yyyy-MM-dd_HH-mm-ss" formatującego datę do nazwy pliku
- Konstrukcja nazwy archiwum łączy ścieżkę docelową, nazwę źródła i znacznik czasu przez operator konkatenacji
$archiwum = "$Cel\$($źródło -replace '\\|/','_')_$znacznik.zip"
- Sprawdzenie istnienia katalogu źródłowego realizowane jest przez
Test-Path $Źródło zwracające wartość logiczną
- Tworzenie katalogu docelowego wykonywane jest przez
New-Item -ItemType Directory -Path $Cel -Force z flagą Force tworzącą katalog nadrzędne
- Tworzenie archiwum ZIP realizowane jest przez cmdlet
Compress-Archive -Path "$Źródło\*" -DestinationPath $archiwum -Force kompresujący wszystkie pliki ze źródła
- Walidacja powodzenia operacji backup wykonywana jest przez sprawdzenie
Test-Path $archiwum po operacji kompresji
- Operacja restore (odtwarzanie) sprawdza najpierw czy plik archiwum istnieje przez
Test-Path $Źródło
- Rozpakowywanie archiwum realizowane jest przez
Expand-Archive -Path $Źródło -DestinationPath $Cel -Force z flagą Force nadpisującą istniejące pliki
- Obsługa błędów realizowana jest przez blok
try/catch z instrukcją Write-Host wyświetlającą komunikaty o błędach
- Kody wyjścia
exit 0 przy sukcesie i exit 1 przy błędzie umożliwiają sprawdzenie statusu operacji w skryptach nadrzędnych
- Wyświetlanie komunikatów postępu realizowane jest przez
Write-Host z kolorowaniem tekstu przez parametr -ForegroundColor
- Podsumowanie operacji zawiera informacje o liczbie plików i rozmiarze utworzonego archiwum
Plik rozwiązania:
Pobierz 03_powershell_z04.ps1
Uruchomienie:
.\03_powershell_z04.ps1 -Tryb backup -Źródło "C:\katalog" -Cel "C:\Backup"
.\03_powershell_z04.ps1 -Tryb restore -Źródło "C:\Backup\backup.zip" -Cel "C:\Odtworzone"
Zadanie 5: Generator bezpiecznych haseł
Rozwiązanie:
Skrypt generuje bezpieczne hasła z wykorzystaniem wielkich liter, małych liter, cyfr i znaków specjalnych.
Opis działania:
- Deklaracja parametru realizowana jest przez konstrukcję
param([int]$Długość = 16) z domyślną wartością 16 znaków
- Walidacja minimalnej długości sprawdza czy podana wartość jest większa lub równa 4, w przeciwnym razie wyświetla błąd i kończy działanie
- Definicja zbiorów znaków realizowana jest przez zmienne:
$wielkieLitery = "A-Z", $małeLitery = "a-z", $cyfry = "0-9", $znakiSpecjalne = "!@#$%^&*"
- Konstrukcja pełnego zestawu znaków wykonywana jest przez konkatenację
$wszystkieZnaki = $wielkieLitery + $małeLitery + $cyfry + $znakiSpecjalne
- Generowanie losowych znaków realizowane jest przez klasę
[System.Security.Cryptography.RandomNumberGenerator] lub uproszczone przez Get-Random
- Pętla
do { } while ($true) powtarza proces generowania do momentu spełnienia wszystkich wymagań bezpieczeństwa hasła
- Sprawdzenie czy hasło zawiera wielką literę wykonywane jest przez wyrażenie regularne
$hasło -cmatch "[A-Z]"
- Analogicznie weryfikowane są: małe litery przez
$hasło -cmatch "[a-z]", cyfry przez $hasło -cmatch "[0-9]" oraz znaki specjalne przez $hasło -cmatch "[!@#$%^&*]"
- Licznik prób
$próba++ inkrementowany przy każdej nieudanej próbie zapobiega nieskończonemu generowaniu
- Warunek zakończenia pętli sprawdza czy wszystkie wymagania bezpieczeństwa zostały spełnione przez konstrukcję
$warunkiSpełnione -contains $false
- Gwarancja obecności każdego typu znaku realizowana jest przez wymuszenie jednego znaku z każdego zbioru na początku hasła przed losowymi znakami
- Wyświetlenie hasła realizowane jest przez
Write-Host "Wygenerowane hasło: $hasło" na standardowym wyjściu
- Opcjonalnie wyświetlane są informacje o sile hasła przez analizę długości i różnorodności użytych znaków
- Kod wyjścia
exit 0 zwracany jest po poprawnym wygenerowaniu hasła spełniającego wszystkie kryteria bezpieczeństwa
- Obsługa błędów walidacji wyświetla komunikat pomocniczy przy nieprawidłowym parametrze wejściowym
Zadanie 6: Menedżer usług systemowych
Rozwiązanie:
Skrypt zarządza usługami Windows: list, start, stop z zabezpieczeniem usług krytycznych.
Opis działania:
- Deklaracja parametrów realizowana jest przez konstrukcję
param([string]$Akcja, [string]$NazwaUsługi) definiującą akcję i nazwę usługi
- Sprawdzenie uprawnień administratora wykonywane jest przez weryfikację czy konto użytkownika należy do grupy Administratorzy przez
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
- Pobieranie listy usług realizowane jest przez cmdlet
Get-Service zwracający wszystkie usługi systemowe Windows
- Filtrowanie usług wykonywane jest przez
Where-Object z warunkami na statusie, nazwie lub typie uruchomienia
- Sortowanie wyników realizowane jest przez
Sort-Object -Property Name porządkując alfabetycznie według nazwy usługi
- Formatowanie tabeli wykonywane jest przez
Format-Table Name, Status, DisplayName, StartType -AutoSize
- Kolorowanie statusu usług wykonywane jest przez instrukcję warunkową sprawdzającą właściwość Status: Running (zielony), Stopped (czerwony)
- Akcja start wywołuje cmdlet
Start-Service -Name $NazwaUsługi uruchamiający wskazaną usługę
- Akcja stop wywołuje cmdlet
Stop-Service -Name $NazwaUsługi zatrzymujący wskazaną usługę
- Ochrona usług krytycznych realizowana jest przez tablicę
$usługiKrytyczne = @("Win Defender", "wuauserv", "Spooler") blokującą ich zatrzymanie
- Sprawdzenie czy usługa jest chroniona wykonywane jest przez
if ($usługiKrytyczne -contains $NazwaUsługi) { Write-Host "Błąd: Nie można zatrzymać usługi krytycznej" }
- Pobieranie szczegółów usługi realizowane jest przez
Get-Service -Name $NazwaUsługi | Select-Object *
- Wyświetlanie informacji o zależnościach usług wykonywane jest przez właściwości
DependentServices i RequiredServices
- Obsługa błędów przez blok
try/catch z cmdletem Write-Error do wyświetlania komunikatów o błędach
- Kody wyjścia
exit 0 przy sukcesie i exit 1 przy błędzie umożliwiają sprawdzenie statusu operacji
- Walidacja nazwy usługi sprawdza czy usługa o podanej nazwie istnieje przez
Get-Service -Name $NazwaUsługi -ErrorAction SilentlyContinue
Plik rozwiązania:
Pobierz 03_powershell_z06.ps1
Uruchomienie:
.\03_powershell_z06.ps1 -Akcja list
.\03_powershell_z06.ps1 -Akcja start -NazwaUsługi "Spooler"
.\03_powershell_z06.ps1 -Akcja stop -NazwaUsługi "Spooler"
Zadanie 7: Konwerter jednostek miar
Rozwiązanie:
Skrypt konwertuje jednostki długości, temperatury i wagi z obsługą wielu formatów jednostek.
Opis działania:
- Deklaracja parametrów realizowana jest przez konstrukcję
param([double]$Wartość, [string]$ZJednostki, [string]$DoJednostki) przyjmującą wartość liczbową i nazwy jednostek
- Sprawdzenie czy parametry zostały podane wykonywane jest przez weryfikację ich wartości, np.
if (-not $Wartość -or -not $ZJednostki -or -not $DoJednostki) gwarantujące dostarczenie wszystkich wymaganych parametrów
- Normalizacja nazw jednostek wykonywana jest przez metodę
.ToLower() konwertującą na małe litery dla ujednolicenia porównań
- Tworzenie słownika jednostek realizowane jest przez tablicę mieszającą
$długość = @{m=1; stopa=0.3048; cal=0.0254; cm=0.01}
- Konwersja długości wykonywana jest przez wzór
$wynik = $Wartość * $długość[$ZJednostki] / $długość[$DoJednostki]
- Współczynniki konwersji długości zdefiniowane są jako stałe:
1m = 100cm, 1m = 3.28084ft, 1m = 39.3701cal
- Konwersja temperatury realizowana jest przez instrukcję warunkową sprawdzającą jednostki wejściowe i wyjściowe
- Wzory na temperaturę zaimplementowane są bezpośrednio: C do F:
$wynik = ($Wartość * 9/5) + 32, F do C: $wynik = ($Wartość - 32) * 5/9
- Przeliczanie Kelvinów wykonywane jest przez wzór
C = K - 273.15 używając skali bezwzględnej temperatur
- Współczynniki konwersji wagi:
1kg = 1000g, 1kg = 2.20462lb, 1kg = 35.274oz zdefiniowane jako hashtable
- Walidacja jednostek wykonywana jest przez sprawdzenie czy klucz istnieje w słowniku przez
$długość.ContainsKey($ZJednostki)
- Formatowanie wyniku realizowane jest przez metodę
[math]::Round($wynik, 2) zapewniającą wyświetlenie dwóch miejsc po przecinku
- Obsługa błędów wyświetla komunikat gdy podana jednostka nie jest obsługiwana przez wybrany typ konwersji
- Komunikat o wyniku wyświetlany jest w formacie
"$Wartość $ZJednostki = $wynik $DoJednostki"
- Kod wyjścia
exit 0 przy poprawnej konwersji lub exit 1 w przypadku błędnych parametrów wejściowych
- Sprawdzenie czy wartość jest liczbą wykonywane jest przez metodę
[double]::TryParse()
- Dodatkowa walidacja sprawdza czy wartość jest większa od zera dla jednostek fizycznych gdzie wartości ujemne nie mają sensu
Plik rozwiązania:
Pobierz 03_powershell_z07.ps1
Uruchomienie:
.\03_powershell_z07.ps1 -Wartość 1 -ZJednostki m -DoJednostki stopa
.\03_powershell_z07.ps1 -Wartość 100 -ZJednostki celsius -DoJednostki fahrenheit
.\03_powershell_z07.ps1 -Wartość 1 -ZJednostki kg -DoJednostki funty
Zadanie 8: System logowania
Rozwiązanie:
Moduł PowerShell z funkcjami do logowania zdarzeń w trzech poziomach (INFO, WARNING, ERROR).
Opis działania:
- Skrypt definiuje funkcje w formacie modułu PowerShell (.psm1) umożliwiającym łatwe importowanie przez
Import-Module
- Definicja zmiennej ścieżki pliku logu realizowana jest przez
$script:plikLogu = "$env:USERPROFILE\logs\aplikacja.log" w katalogu profilu użytkownika
- Automatyczne tworzenie katalogów wykonywane jest przez konstrukcję
if (-not (Test-Path (Split-Path $plikLogu))) { New-Item -ItemType Directory -Path (Split-Path $plikLogu) -Force | Out-Null }
- Funkcja Write-LogInfo przyjmuje parametr
[string]$Komunikat i zapisuje wpis z etykietą [INFO]
- Generowanie znacznika czasu realizowane jest przez
Get-Date -Format "yyyy-MM-dd HH:mm:ss" formatującego datę i czas
- Format wpisu logu
"[$znacznik] [INFO] $Komunikat" zapewnia spójny i czytelny zapis z rozróżnieniem poziomów ważności
- Zapis do pliku realizowany jest przez cmdlet
Add-Content -Path $plikLogu -Value $wpis z automatycznym tworzeniem pliku
- Funkcja Write-LogWarning zapisuje wpisy z etykietą [WARNING] sygnalizującą ostrzeżenia wyróżnione w raporcie
- Funkcja Write-LogError zapisuje wpisy z etykietą [ERROR] umożliwiającą szybkie wyszukiwanie błędów przez polecenie Select-String
- Funkcja Get-LogReader wyświetla zawartość pliku logów przez
Get-Content -Path $plikLogu z opcjonalnym parametrem -Tail dla ostatnich linii
- Funkcja Clear-LogFile usuwa zawartość pliku logów poleceniem
Remove-Item -Path $plikLogu -Force
- Funkcja Get-LogStats analizuje plik logów zliczając wystąpienia każdego poziomu przez
(Select-String -Path $plikLogu -Pattern "\[INFO\]").Matches.Count
- Sprawdzenie uprawnień do zapisu w pliku realizowane jest przez operator
-w w poleceniu testowym lub obsługę wyjątków
- Obsługa błędów przez blok
try/catch informuje o ewentualnych problemach z dostępem do pliku
- Eksport funkcji realizowany jest przez instrukcję
Export-ModuleMember -Function Write-LogInfo, Write-LogWarning, Write-LogError
- Konfigurowalna ścieżka logu pozwala na zmianę lokalizacji pliku bez modyfikacji kodu funkcji
Plik rozwiązania:
Pobierz 03_powershell_z08.ps1 (moduł)
Uruchomienie:
Import-Module .\03_powershell_z08.ps1
Write-LogInfo -Komunikat "Test"
Write-LogWarning -Komunikat "Ostrzeżenie"
Write-LogError -Komunikat "Błąd"
Zadanie 9: Masowa zmiana nazw plików
Rozwiązanie:
Skrypt transformuje nazwy plików w trybie lowercase, uppercase, prefix lub replace.
Opis działania:
- Deklaracja parametrów realizowana jest przez konstrukcję
param([string]$Katalog, [string]$Tryb, [string]$Prefix, [string]$StaryTekst, [string]$NowyTekst, [switch]$Preview)
- Walidacja katalogu wykonywana jest przez
Test-Path $Katalog sprawdzającą czy katalog istnieje
- Pobieranie plików z katalogu realizowane jest przez cmdlet
Get-ChildItem -Path $Katalog -File zwracający tylko pliki (nie katalogi)
- Pętla
foreach ($plik in $pliki) iteruje po wszystkich plikach w katalogu źródłowym
- Tryb lowercase realizowany jest przez metodę
$plik.Name.ToLower() konwertującą nazwę na małe litery
- Tryb uppercase realizowany jest przez metodę
$plik.Name.ToUpper() konwertującą nazwę na wielkie litery
- Tryb prefix dodaje podany ciąg znaków przed nazwą pliku przez konkatenację
$Prefix + $plik.Name
- Tryb replace realizowany jest przez metodę
$plik.Name.Replace($StaryTekst, $NowyTekst) zamieniającą tekst w nazwie
- Sprawdzenie czy plik o nowej nazwie już istnieje realizowane jest przez
Test-Path "$($plik.DirectoryName)\$nowaNazwa" zapobiegające nadpisaniu
- Tryb podglądu (-Preview) powoduje wyświetlenie planowanych zmian bez ich faktycznego wykonania przez pominięcie polecenia Rename-Item
- Zmienna licznika
$zmieniono++ inkrementowana jest po każdej udanej operacji zmiany nazwy
- Analogicznie zmienna
$pominięto++ zlicza pliki pominięte z powodu konfliktu nazw
- Obsługa błędów przez blok
try/catch z cmdletem Write-Error informuje o problemach z uprawnieniami lub brakiem miejsca
- Pominięcie ukrytych plików realizowane jest przez sprawdzenie atrybutu
$plik.Attributes -notmatch "Hidden"
- Wyświetlenie wyniku końcowego realizowane jest przez
Write-Host "Zmieniono: $zmieniono, Pominięto: $pominięto"
- Kod wyjścia
exit 0 przy sukcesie lub exit 1 w przypadku błędów krytycznych takich jak nieistniejący katalog
Plik rozwiązania:
Pobierz 03_powershell_z09.ps1
Uruchomienie:
.\03_powershell_z09.ps1 -Katalog "C:\test" -Tryb lowercase
.\03_powershell_z09.ps1 -Katalog "C:\test" -Tryb lowercase -Preview
.\03_powershell_z09.ps1 -Katalog "C:\test" -Tryb prefix -Prefix "IMG_"
Zadanie 10: Automatyczny instalator środowiska
Rozwiązanie:
Skrypt konfiguruje środowisko pracy: tworzy katalogi, sprawdza narzędzia, konfiguruje profil PowerShell.
Opis działania:
- Sprawdzenie uprawnień administratora wykonywane jest przez weryfikację czy konto użytkownika należy do grupy Administratorzy przez
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
- Lista narzędzi do sprawdzenia zdefiniowana jest jako tablica
$narzędzia = @("git", "curl", "wget", "node", "python") przechowująca nazwy programów
- Wykrywanie narzędzi realizowane jest przez polecenie
Get-Command $narzędzie -ErrorAction SilentlyContinue zwracające obiekt polecenia gdy narzędzie jest dostępne
- Sprawdzenie wersji narzędzia wykonywane jest przez metodę
$narzędzie.Version lub wywołanie z parametrem --version
- Tworzenie struktury katalogów realizowane jest przez
New-Item -ItemType Directory -Path "$katalog" -Force dla każdego katalogu z listy
- Lista katalogów do utworzenia może obejmować:
$katalogi = @("$HOME\Projekty", "$HOME\Skrypty", "$HOME\Pobrane")
- Konfiguracja profilu PowerShell wykonywana jest przez sprawdzenie istnienia pliku
$PROFILE poleceniem Test-Path $PROFILE
- Tworzenie nowego profilu realizowane jest przez polecenie
New-Item -ItemType File -Path $PROFILE -Force jeśli plik nie istnieje
- Dodawanie aliasów do profilu wykonywane jest przez konstrukcję
Add-Content -Path $PROFILE -Value "Set-Alias ll Get-ChildItem"
- Definicje aliasów zapisane są jako tablica asocjacyjna lub bezpośrednie instrukcje Set-Alias dla poleceń takich jak ll, la, gl
- Sprawdzenie czy alias już istnieje wykonywane jest przez
Get-Alias -Name ll -ErrorAction SilentlyContinue zapobiegające duplikatom
- Komunikaty o postępie wyświetlane są przez
Write-Host z kolorowaniem tekstu informując użytkownika o wykonywanych operacjach
- Przy uruchomieniu bez uprawnień administratora wykonywana jest tylko konfiguracja bez instalacji pakietów systemowych
- Obsługa błędów przez blok
try/catch zapisuje komunikaty błędów do zmiennej i wyświetla je użytkownikowi
- Tworzenie pliku konfiguracyjnego JSON wykonywane jest przez
ConvertTo-Json dla zapisania stanu środowiska
- Podsumowanie wyświetlane jest po zakończeniu zawierające informacje o utworzonych katalogach, skonfigurowanych aliasach i znalezionych narzędziach
- Kod wyjścia
exit 0 przy całkowitym sukcesie lub exit 1 gdy dowolna operacja zakończy się niepowodzeniem
Uwagi końcowe
- Wszystkie 10 zadań laboratoryjnych zostały rozwiązane i zweryfikowane pod kątem poprawności działania
- Każdy skrypt zawiera walidację parametrów wejściowych i obsługę błędów z odpowiednimi kodami wyjścia
- Wymagany jest PowerShell 5.1 lub nowszy (zalecany PowerShell 7 dla pełnej kompatybilności)
- Zadania 4 (kreator kopii zapasowych) i 6 (menedżer usług) wymagają uprawnień administratora do pełnego działania
- Skrypt Zadania 1 (kalkulator ocen) działa interaktywnie i wymaga wprowadzania danych przez użytkownika
- Uruchomienie skryptów wymaga policy execution przez
powershell -ExecutionPolicy Bypass -File script.ps1 lub ustawienia Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
- Wszystkie skrypty zawierają kolorowanie wyjścia konsoli dla lepszej czytelności wyników
- Skrypty są kompatybilne z systemami Windows 10/11 oraz Windows Server 2016 i nowszymi
- Zadanie 8 (system logowania) implementuje moduł PowerShell (.psm1) który można zaimportować poleceniem Import-Module