Poradniki
Zadania wprowadzające
Ćwiczenie 1: Autopomoc Dowiedz się, do czego służy polecenie Get-Service. Wyświetl pełną pomoc dla tego polecenia, uwzględniając przykłady użycia.
Polecenie: Get-Help Get-Service -Examples
Ćwiczenie 2: Spis z natury Wyświetl listę wszystkich plików i folderów znajdujących się w katalogu C:\Windows. Upewnij się, że na liście widać też ukryte elementy.
Polecenie: Get-ChildItem -Path C:\Windows -Force
Ćwiczenie 3: Tworzenie architektury W swoim folderze domowym utwórz strukturę folderów: Projekty\Archiwum\2024. Zrób to za pomocą jednej linii kodu.
Polecenie: New-Item -ItemType Directory -Path ".\Projekty\Archiwum\2024" -Force
Ćwiczenie 4: Notatki administratora Wewnątrz folderu 2024 utwórz pusty plik tekstowy o nazwie raport.txt, a następnie wpisz do niego tekst: „Konfiguracja zakończona pomyślnie”.
Polecenie: echo "Konfiguracja zakończona pomyślnie" > .\Projekty\Archiwum\2024\raport.txt
Ćwiczenie 5: Kto pożera RAM? Wyświetl listę 5 procesów, które zużywają obecnie najwięcej pamięci operacyjnej (Working Set).
Polecenie: Get-Process | Sort-Object WS -Descending | Select-Object -First 5
Ćwiczenie 6: Status usług Wyświetl wszystkie usługi (services), których stan to aktualnie Running (Uruchomiona).
Polecenie: Get-Service | Where-Object Status -eq "Running"
Ćwiczenie 7: Szukanie igły w stogu siana Znajdź w katalogu C:\Windows wszystkie pliki, które mają rozszerzenie .log.
Polecenie: Get-ChildItem -Path C:\Windows -Filter *.log -Recurse -ErrorAction SilentlyContinue
Ćwiczenie 8: Eksport do CSV Pobierz listę wszystkich procesów i zapisz ją do pliku procesy.csv na pulpicie, tak aby można było ją otworzyć w Excelu.
Polecenie: Get-Process | Export-Csv -Path "$HOME\Desktop\procesy.csv" -NoTypeInformation
Ćwiczenie 9: Gdzie ja jestem? Wyświetl aktualną datę, nazwę użytkownika oraz wersję PowerShella zainstalowaną w systemie.
Polecenie: Get-Date; $PSVersionTable.PSVersion; whoami
Ćwiczenie 10: Test łączności Sprawdź połączenie z serwerem Google (https://www.google.com/url?sa=E&source=gmail&q=google.com), wysyłając dokładnie 2 pakiety danych.
Polecenie: Test-Connection -ComputerName google.com -Count 2
Level początkujący
Cel: Biegłość w używaniu parametrów i podstawowe rozumienie potoków (|).
Wyświetl listę wszystkich plików w katalogu C:\Windows\System32, których nazwa zaczyna się na literę "net" i mają rozszerzenie ".exe".
Czego uczy: Korzystania z symboli wieloznacznych (wildcards *) w parametrze -Filter.
Polecenie: Get-ChildItem -Path C:\Windows\System32 -Filter net*.exe
Wyświetl listę wszystkich folderów (tylko katalogi!) w C:\Users, posortowaną alfabetycznie malejąco (od Z do A).
Czego uczy: Używania parametru -Directory oraz komendy Sort-Object z przełącznikiem -Descending.
Polecenie: Get-ChildItem -Path C:\Users -Directory | Sort-Object Name -Descending
Pobierz informacje o procesie o nazwie explorer. Wyświetl tylko jego nazwę (Name), identyfikator (Id) oraz zużycie procesora (CPU).
Czego uczy: Wybierania konkretnych kolumn (właściwości obiektu) za pomocą Select-Object.
Polecenie: Get-Process explorer | Select-Object Name, Id, CPU
Stwórz jednym poleceniem folder o nazwie Laboratorium_PS, a w nim trzy puste pliki: notatki.txt, logi.log oraz konfiguracja.conf.
Czego uczy: Pracy z kolekcjami nazw po przecinku wewnątrz polecenia.
Polecenie: New-Item -Path ".\Laboratorium_PS\notatki.txt", ".\Laboratorium_PS\logi.log", ".\Laboratorium_PS\konfiguracja.conf" -ItemType File
Wyświetl tylko 5 ostatnich linii z pliku tekstowego (np. stworzonego wcześniej notatki.txt), zakładając, że ma on już jakąś treść.
Czego uczy: Pracy z zawartością plików i parametrem -Tail.
Polecenie: Get-Content -Path .\Laboratorium_PS\notatki.txt -Tail 5
Level semi - pro
Cel: Zrozumienie, że każde polecenie zwraca obiekt z właściwościami, które można testować (prawda/fałsz).
Wyświetl listę wszystkich usług, które są obecnie zatrzymane (Status: Stopped), ale mają ustawiony automatyczny tryb uruchamiania (StartType: Automatic).
Czego uczy: Łączenia dwóch warunków logicznych za pomocą operatora -and.
Polecenie: Get-Service | Where-Object {$_.Status -eq "Stopped" -and $_.StartType -eq "Automatic"}
Znajdź w folderze C:\Windows wszystkie pliki, których rozmiar jest większy niż 50 MB. Wyświetl ich nazwę oraz rozmiar w megabajtach.
Czego uczy: Korzystania z operatora -gt (greater than) oraz przeliczników jednostek (MB).
Polecenie: Get-ChildItem -Path C:\Windows -File | Where-Object {$_.Length -gt 50MB} | Select-Object Name, @{Name="Size(MB)"; Expression={$_.Length / 1MB}}
Wyświetl listę procesów, które używają więcej niż 200 MB pamięci (Working Set) ORAZ mają w nazwie frazę "host".
Czego uczy: Używania operatora -like z symbolami wieloznacznymi.
Polecenie: Get-Process | Where-Object {$_.WS -gt 200MB -and $_.Name -like "*host*"}
Przygotuj polecenie (na razie tylko wyświetlające), które znajdzie w folderze C:\Windows\Temp wszystkie pliki z rozszerzeniem .tmp, które zostały zmodyfikowane dawniej niż 7 dni temu.
Czego uczy: Pracy z datami i dynamicznego obliczania czasu ((Get-Date).AddDays(-7)).
Polecenie: Get-ChildItem -Path C:\Windows\Temp -Filter *.tmp | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)}
Użyj polecenia Get-CimInstance, aby wyświetlić informacje o partycjach dyskowych, które mają mniej niż 10% wolnego miejsca.
Czego uczy: Podstaw pracy z klasami systemowymi (WMI/CIM) – to klucz do administracji Windows.
Polecenie: Get-CimInstance -ClassName Win32_LogicalDisk | Where-Object {($_.FreeSpace / $_.Size) -lt 0.1}
Level pro
Cel: Przechowywanie danych w pamięci i wykonywanie operacji na wielu elementach naraz.
Napisz skrypt (lub zestaw poleceń), który zapyta użytkownika o jego imię, zapisze je do zmiennej $imie, a następnie wyświetli komunikat: „Witaj [imię], dzisiaj jest [data]”.
Czego uczy: Używania Read-Host, zmiennych oraz łączenia ciągów znaków (string interpolation).
Polecenie: ```powershell
$imie = Read-Host "Podaj swoje imię"
$data = Get-Date -Format "dd-MM-yyyy"
Write-Host "Witaj $imie, dzisiaj jest $data" -ForegroundColor Cyan
W folderze Laboratorium_PS (stworzonym w stopniu 1) masz pliki tekstowe. Napisz polecenie, które do nazwy każdego pliku .txt w tym folderze dopisze przedrostek OLD_.
Czego uczy: Pętli ForEach-Object i manipulacji nazwami plików.
Polecenie:
PowerShell
Get-ChildItem -Path ".\Laboratorium_PS\*.txt" | ForEach-Object { Rename-Item -Path $_.FullName -NewName ("OLD_" + $_.Name) }
Stwórz zmienną $sciezka, która przechowuje drogę do folderu C:\Logi. Jeśli folder nie istnieje – stwórz go. Następnie skopiuj tam wszystkie pliki .log z folderu C:\Windows, które są mniejsze niż 100 KB.
Czego uczy: Warunków if (podstawy) oraz zarządzania lokalizacjami.
Polecenie:
PowerShell
$sciezka = "C:\Logi"
if (-not (Test-Path $sciezka)) { New-Item -ItemType Directory -Path $sciezka }
Get-ChildItem -Path C:\Windows\*.log | Where-Object { $_.Length -lt 100KB } | Copy-Item -Destination $sciezka
Pobierz listę 10 procesów najbardziej obciążających procesor. Dla każdego z nich wyświetl informację: „Proces [Nazwa] używa [CPU] zasobów”, a cały ten tekst zapisz do pliku raport_cpu.txt.
Czego uczy: Przekazywania sformatowanego tekstu z pętli do pliku.
Polecenie:
PowerShell
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 | ForEach-Object { "Proces $($_.Name) używa $($_.CPU) zasobów" } | Out-File -FilePath ".\raport_cpu.txt"
Dla każdego pliku w bieżącym folderze wyświetl jego nazwę oraz informację, czy użytkownik ma uprawnienia do zapisu (właściwość CanWrite lub prosta próba odczytu ACL).
Czego uczy: Pobierania uprawnień (Access Control List - ACL).
Polecenie:
PowerShell
Get-ChildItem -File | ForEach-Object { $acl = Get-Acl $_.FullName; [PSCustomObject]@{ Plik=$_.Name; Wlasciciel=$acl.Owner } }