Laboratorium PowerShell – Zadania praktyczne

Poniżej znajduje się 10 zadań laboratoryjnych z zakresu programowania w PowerShell. Każde zadanie jest zaprojektowane tak, aby zajmowało około 25-30 minut wykonania. Zadania obejmują różne tematy poznane na wykładzie, od podstaw tworzenia skryptów, przez pracę ze zmiennymi, tablicami i potokiem obiektowym, aż po zaawansowane przetwarzanie danych i automatyzację zadań systemowych.

Zadanie 1: Kalkulator średniej ocen studenta

Cel: Napisz skrypt, który pobierze od użytkownika listę ocen, obliczy średnią arytmetyczną i wyświetli komunikat o wyniku zaliczenia (średnia >= 3.0).
Scenariusz: Jesteś administratorem systemu na uczelni. Prowadzący poprosił Cię o stworzenie narzędzia do wprowadzania ocen cząstkowych studentów. Skrypt ma działać interaktywnie - użytkownik wprowadza kolejne oceny (liczby od 2 do 6), a gdy skończysz wpisywać, wpisz słowo "koniec". Skrypt następnie oblicza średnią arytmetyczną ze wszystkich wprowadzonych ocen z dokładnością do dwóch miejsc po przecinku. Na końcu wyświetla komunikat informujący czy student zdał egzamin (średnia >= 3.0) czy nie zdał (średnia < 3.0). Skrypt powinien też walidować czy wprowadzone wartości są poprawnymi ocenami.
Wskazówki do wykonania:

Zadanie 2: Monitor procesów systemowych

Cel: Stwórz skrypt, który przeanalizuje uruchomione procesy w systemie i wygeneruje raport z najbardziej zasobochłonnych procesów.
Scenariusz: Pracujesz w dziale IT. Twoim zadaniem jest monitorowanie wydajności serwera. Napisz skrypt, który pobierze listę wszystkich uruchomionych procesów, posortuje je według zużycia pamięci RAM (malejąco) i wyświetli Top 10 najbardziej zasobożernych procesów. Dla każdego procesu pokaż: nazwę, PID, zużycie pamięci w MB i czas działania. Skrypt powinien też identyfikować procesy zużywające więcej niż 100 MB pamięci i oznaczać je jako "UWAGA". Na końcu skrypt wygeneruj podsumowanie: łączne zużycie pamięci przez wszystkie procesy i liczbę procesów powyżej progu 100 MB.
Wskazówki do wykonania:

Zadanie 3: Parser pliku logów systemowych

Cel: Napisz skrypt, który odczyta plik logów, wyizoluje wpisy błędów i wygeneruje statystyki.
Scenariusz: Jesteś administratorem systemu po awarii. Musisz przeanalizować plik logów, aby znaleźć przyczynę problemu. Napisz skrypt, który odczyta plik logów (jeśli plik nie istnieje, skrypt najpierw tworzy przykładowy plik z losowymi wpisami), wyszuka linie zawierające słowo "ERROR", a następnie wyświetli statystyki: ile razy wystąpił każdy typ błędu, datę i godzinę pierwszego i ostatniego wystąpienia błędu oraz najczęściej występujący typ błędu z informacją ile razy wystąpił. Skrypt powinien też wyświetlić listę wszystkich unikalnych typów błędów znalezionych w logach. Użyj tablicy mieszającej do zliczania typów błędów.
Wskazówki do wykonania:

Zadanie 4: Automatyczny kreator kopii zapasowych

Cel: Stwórz skrypt do tworzenia i przywracania archiwów kopii zapasowych plików.
Scenariusz: Jesteś administratorem systemu i musisz zapewnić bezpieczeństwo danych. Napisz skrypt, który tworzy archiwum spakowane (zip) z podanych plików lub katalogów, dodając do nazwy pliku archiwum datę i godzinę w formacie yyyy-MM-dd_HH-mm-ss. Skrypt powinien obsługiwać dwa tryby pracy: tryb backup (utworzenie archiwum) i tryb restore (odtworzenie plików z archiwum). W trybie backup skrypt przyjmuje jako argumenty katalog źródłowy i katalog docelowy. W trybie restore skrypt przyjmuje ścieżkę do pliku archiwum i katalog docelowy. Skrypt powinien wyświetlać komunikaty postępu i na końcu informować o sukcesie lub błędzie operacji.
Wskazówki do wykonania:

Zadanie 5: Generator bezpiecznych haseł

Cel: Napisz skrypt generujący bezpieczne hasła losowe zawierające różne typy znaków.
Scenariusz: Twoja firma potrzebuje narzędzia do generowania bezpiecznych haseł dla nowych pracowników. Napisz skrypt, który generuje hasło o podanej długości (domyślnie 16 znaków) zawierające wielkie litery (A-Z), małe litery (a-z), cyfry (0-9) i znaki specjalne. Skrypt powinien przyjmować jeden opcjonalny argument określający długość hasła. Po wygenerowaniu hasła skrypt powinien zweryfikować czy hasło zawiera przynajmniej jedną wielką literę, jedną małą literę, jedną cyfrę i jeden znak specjalny - jeśli któryś z tych warunków nie jest spełniony, skrypt generuje hasło ponownie (z max 10 próbami). Hasło powinno być wyświetlane na ekranie w czytelnym formacie z informacją o długości.
Wskazówki do wykonania:

Zadanie 6: Menedżer usług systemowych

Cel: Stwórz skrypt do zarządzania usługami Windows - wyświetlanie, uruchamianie i zatrzymywanie usług.
Scenariusz: Jako administrator systemu Windows musisz mieć narzędzie do zarządzania usługami. Napisz skrypt, który potrafi wykonywać trzy akcje: (1) list - wyświetlić wszystkie usługi w stanie Running lub Stopped w czytelnym formacie, (2) start - uruchomić usługę o podanej nazwie, (3) stop - zatrzymać usługę o podanej nazwie. Skrypt powinien przyjmować drugi argument jako nazwę usługi. Dla akcji start/stop skrypt ma sprawdzać czy usługa istnieje i czy nie jest już w wymaganym stanie. Skrypt powinien też wyświetlać komunikaty informujące o postępie operacji. Zabezpiecz przed zatrzymaniem krytycznych usług systemowych.
Wskazówki do wykonania:

Zadanie 7: Konwerter jednostek miar

Cel: Napisz skrypt do konwersji jednostek długości, temperatury i wagi.
Scenariusz: Pracujesz w dziale logistyki i potrzebujesz narzędzia do szybkiej konwersji jednostek. Napisz skrypt, który obsługuje konwersje jednostek długości (metry <-> stopy, cale <-> centymetry), temperatury (Celsjusz <-> Fahrenheit, Celsjusz <-> Kelvin, Fahrenheit <-> Kelvin) oraz wagi (kilogramy <-> funty, gramy <-> uncje). Skrypt przyjmuje trzy argumenty: wartość do przeliczenia, jednostkę źródłową i jednostkę docelową. Skrypt powinien walidować argumenty i wyświetlać błąd gdy podano nieprawidłowe dane. Wynik konwersji powinien być wyświetlony w czytelnym formacie z informacją co i jak przeliczono. Uruchom skrypt dla każdego typu konwersji i sprawdź wyniki.
Wskazówki do wykonania:

Zadanie 8: System logowania zdarzeń

Cel: Stwórz modułowy system logowania z funkcjami do zapisywania i odczytywania logów.
Scenariusz: Chcesz stworzyć uniwersalny moduł logowania, który może być używany przez inne skrypty. Napisz moduł PowerShell (plik .psm1) z funkcjami logującymi oraz skrypt demonstracyjny. Moduł powinien zawierać trzy funkcje: Write-LogInfo (informacje), Write-LogWarning (ostrzeżenia), Write-LogError (błędy), które zapisują komunikaty do pliku logu z datą, poziomem ważności i wiadomością. Format wpisu logu: [2024-01-15 14:30:45] [INFO] Komunikat informacyjny. Moduł powinien też zawierać funkcję do odczytywania logów. Skrypt demonstracyjny importuje moduł i wywołuje każdą funkcję z przykładowymi komunikatami.
Wskazówki do wykonania:

Zadanie 9: Masowa zmiana nazw plików

Cel: Napisz skrypt do masowej transformacji nazw plików według określonego wzorca.
Scenariusz: Masz katalog z wieloma plikami o różnych nazwach (np. IMG_001.jpg, Photo_002.png, DSC1234.jpeg). Musisz je uporządkować: zmienić wielkość liter na małe, dodać prefix, usunąć spacje lub zamienić określony wzorzec w nazwie na inny. Napisz skrypt, który przyjmuje trzy argumenty: katalog z plikami, tryb transformacji (lowercase/uppercase/prefix/replace) i prefix (opcjonalny) lub tekst do zamiany i tekst zamiany. Skrypt powinien wyświetlać podgląd (dry-run) gdy podano opcję -Preview, lub faktycznie zmieniać nazwy bez tej opcji. Skrypt powinien sprawdzać czy plik o nowej nazwie już istnieje i nie nadpisywać istniejących plików. Uruchom skrypt w trybie podglądu i następnie faktycznie zmień nazwy plików.
Wskazówki do wykonania:

Zadanie 10: Automatyczny instalator środowiska

Cel: Stwórz skrypt do automatycznej konfiguracji środowiska pracy i instalacji narzędzi.
Scenariusz: Dostajesz nowy komputer i musisz szybko skonfigurować środowisko pracy. Napisz skrypt, który zainstaluje i skonfiguruje podstawowe narzędzia. Skrypt powinien zainstalować pakiety: git, curl (jeśli nie zainstalowane), utworzyć strukturę katalogów w $HOME (Projects, Scripts, Downloads), skonfigurować profile PowerShell z podstawowymi aliasami (np. ll=Get-ChildItem), utworzyć automatyczny profil jeśli nie istnieje. Skrypt powinien sprawdzać czy jest uruchomiony jako Administrator - jeśli nie, wyświetlić komunikat ostrzegawczy i kontynuować bez instalacji pakietów systemowych. Na końcu wyświetlić podsumowanie wykonanych operacji.
Wskazówki do wykonania:

Przykładowe rozwiązania

Skrypty Windows Powershell