PowerShell - zadania poziom podstawowy
Konsola PowerShell i ISE
PS1.1
Uruchom konsolę PowerShell z uprawnieniami administratora z menu Start
PS1.2
Wpisz polecenie Get i za pomocą klawisza TAB przejrzyj kilka pierwszych podpowiedzi, które są dostępne.
Get-Acl
Directory: C:\Users
Path Owner Access
---- ----- ------
rav NT AUTHORITY\SYSTEM NT AUTHORITY\SYSTEM Allow FullControl...
PS1.3
Wpisz polecenie Get-Printer i wyświetl zainstalowane na komputerze drukarki.
Get-Printer
PS1.4
Za pomocą strzałki ↑ wywołaj ponownie polecenie Get-Printer
PS1.5
Za pomocą klawisza funkcyjnego wywołaj okienko historii poleceń i wybierz z niego polecenie Get-Printer
PS1.6
Skopiuj polecenie Remove-Module -Name psreadline,
wklej je w oknie konsoli i wykonaj. Sprawdź czy działa przywołanie historii klawiszem F7.
Remove-Module -Name psreadline
Get-Printer
dir
# potem F7 wyświetli historię
PS1.7
Zmień domyślny sposób uruchamiania się aplikacji PowerShell tak, aby aplikacja otwierała się z uprawnieniami administratora.
PS1.8
Wykonaj poniższe polecenia w PowerShell ISE:
- uruchom polecenie
Get-Printerkorzystając z podpowiedzi - zapisz dokument ze skryptami na pulpicie twojego komputera
PS1.9
Wykonaj poniższe polecenia w PowerShell ISE:
- wpisz w pole edytora polecenia
Get-ProcessGet-ServiceGet-Command -Name Apply*i zapisz skrypt
- uruchom polecenia po kolei za pomocą debuggera
- wykorzystując debuggera ustaw breakpoint F9 na pierwszej linii, uruchom kod F5 i przechodź linia po linii F10
- może być konieczne usunięcie blokady uruchamiania stkryptów:
Get-ExecutionPolicySet-ExecutionPolicy unrestrictedSet-ExecutionPolicy restricted
Get-Process
Get-Service
Get-Command -Name Apply*
Aliasy poleceń
PS1.10
Wyświetl listę aliasów i sprawdź,
czy istnieje alias dir
Get-Alias dir
gal dir
PS1.11
Wyświetl listę aliasów i sprawdź,
czy istnieje alias dla polecenia Clear-Host
Get-Alias
gal
gal -Definition Clear-Host
PS1.12
Wyświetl aliasy dla poleceń zaczynających się na Clear-
gal -Definition Clear-*
PS1.13
Wykonaj następujące polecenia:
- utwórz alias o nazwie "prt", za pomocą którego można będzie uruchomić polecenie
Get-Printer - używając aliasu "prt" wyświetl listę drukarek
- skasuj alias "prt"
Set-Alias prt Get-Printer
prt
Del alias:prt
PS1.14
Wykonaj poniższe polecenia:
- stwórz alias o nazwie "kat", za pomocą którego można będzie wyświetlać zawartość katalogu
- używając aliasu "kat" wyświetl zawartość katalogu C
- skasuj alias "kat"
Set-Alias kat Get-ChildItem
kat -Path C:\
Del alias:kat
PS1.15
Znajdź aliasy dla poleceń Move-Item i Get-ChildItem
Get-Alias -Definition Move-Item, Get-ChildItem
PS1.16
Użyj polecenia Get-Alias, aby ustalić, jakie polecenia cmdlet są wywoływane
przez aliasy cls oraz gci. Użyj aliasu gal, by nie wypisywać całej nazwy polecenia.
gal cls, gci
PS1.17
Użyj polecenia Where-Object i wyświetl wszystkie aliasy, których nazwa zaczyna się od litery "g".
Get-Alias g*
Get-Alias | Where-Object name -like "g*"
PS1.18
Wyświetl listę aliasów, których definicja zawiera słowo "set".
Get-Alias | Where-Object definition -like "set*"
System pomocy
PS1.19
Zaktualizuj system pomocy w taki sposób, aby aktualizacją objęte zostały wszystkie moduły, które ją obsługują
Update-Help -Module * -Force
PS1.20
Wykonaj poniższe polecenia:
- wyświetl pomoc dla polecenia
Get-Service - wyświetl szczegółowe informacje pomocy o poleceniu
Get-Service - wyświetl pogłębione informacje techniczne o poleceniu
Get-Service - wyświetl tylko listę przykładów dla polecenia
Get-Service - wyświetl szczegółową informację o parametrze "counter" komendy
Get-Counterz systemu pomocy - pokaż przykłady, które są w systemie help dla polecenia
Get-WinEvent
Get-Help Get-Service
Get-Help Get-Service -detailed
Get-Help Get-Service -full
Get-Help Get-Service -examples
Get-Help Get-Counter -full
Get-Help Get-Counter -Parameter counter
Get-Help Get-WinEvent -examples
PS1.21
Wyświetl w oddzielnym oknie pomoc dla polecenia Get-Member
Get-Help Get-Member -ShowWindow
PS1.22
Wyświetl listę tematów pomocy dotyczących poleceń get.
Get-Help get-*
PS1.23
Wyświetl listę tematów pomocy dla poleceń set.
Get-Help set-*
PS1.24
Wyświetl listę poleceń operujących na zdarzeniach Windows (event log).
get-help *eventlog*
PS1.25
Wykonaj poniższe polecenia:
- wyświetl historię wykonywanych poleceń (
Get-History) - wyczyść historię wykonywanych poleceń (
Clear-History)
Get-History
Clear-History
Zmienne
PS1.26
Utwórz zmienną n i nadaj jej wartość twojego imienia. Następnie wyświetl zmienną n.
$n = "Rafal"
$n
PS1.27
Utwórz trzy zmienne z liczbami 10, 20, 30. Następnie dodaj je do siebie.
$x = 10; $y = 20; $z = 30
$w = $x + $y + $z
$w
PS1.28
Wykonaj poniższe polecenia:
- do zmiennych a, b, c przypisz odpowiednio:
- a - wartość 100
- b - wartość "Witaj świecie"
- c - obiekt powstały w wyniku działania komendy
Get-Process.
- wyświetl zmienne a, b, c
- sprawdź typ dla utworzonych zmiennych
$a = 100;
$b = "Witaj świecie";
$c = Get-Process
$a; $b; $c
$a.GetType(); $b.GetType(); $c.GetType()
PS1.29
Wykonaj poniższe polecenia:
- do zmiennej a przypisz wartość 4, do zmiennej b przypisz wartość 7.
- następnie w kolejnych poleceniach zamień wartości w zmiennych a i b.
- po zmianie zmienna a powinna mieć wartość 7 a zmienna b powinna mieć wartość 4.
$a = 4
$b = 7
$t = $a
$a = $b
$b = $t
$a; $b
PS1.30
Wykonaj poniższe polecenia:
- utwórz zmienną x tak, aby można było przypisywać do niej jedynie liczby całkowite
- zweryfikuj, czy do zmiennej x da się przypisać tekst
- usuń zmienną x
[int]$x = 3
$x = "ala"
Remove-Variable -Name x
PS1.31
Przypisz do zmiennej $drukarki listę wszystkich drukarek. Wyświetl zawartość zmiennej $drukarki oraz zmiennej $?.
PS C:\Windows\system32> $drukarki = Get-Printer
PS C:\Windows\system32> $drukarki
Name ComputerName Type DriverName Po
rt
Na
me
---- ------------ ---- ---------- --
Microsoft XPS Document Writer Local Microsoft XPS Document... PO
Microsoft Print to PDF Local Microsoft Print To PDF PO
Fax Local Microsoft Shared Fax D... SH
PS C:\Windows\system32> $?
True
PS1.32
Wykonaj polecenie ping www.google.com i wynik przypisz do zmiennej $a.
Wyświetl zawartość zmiennej $a, $?, $LASTEXITCODE.
Sprawdź typ zmiennej $a.
PS C:\Windows\system32> $a = ping www.google.com
PS C:\Windows\system32> $a
Pinging www.google.com [172.217.16.36] with 32 bytes of data:
Reply from 172.217.16.36: bytes=32 time=19ms TTL=57
Reply from 172.217.16.36: bytes=32 time=18ms TTL=57
Reply from 172.217.16.36: bytes=32 time=17ms TTL=57
Reply from 172.217.16.36: bytes=32 time=18ms TTL=57
Ping statistics for 172.217.16.36:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 17ms, Maximum = 19ms, Average = 18ms
PS C:\Windows\system32> $?
True
PS C:\Windows\system32> $LASTEXITCODE
0
PS C:\Windows\system32> $a.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS1.33
Używając zmiennych automatycznych wykonaj poniższe polecenia:
- wyświetl wersję PowerShell, którą masz zainstalowaną
- wyświetl katalog, w którym PowerShell jest zainstalowany
- wyświetl status ostatnio wykonywanego polecenia
$PSVersionTable
$PSHome
$?
Typy danych
PS1.34
Wykonaj poniższe polecenia:
- utwórz zmienną o nazwie miesiące i przypisz do niej tablicę zawierającą
następujące nazwy miesięcy:
- 'styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad'
- wyświetl drugi miesiąc
- wyświetl przedostatni miesiąc
- wyświetl miesiące z drugiego kwartału
- dodaj do listy miesięcy grudzień
- zamień nazwę miesiąca "styczeń" na "sty"
$miesiące = @('styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad')
$miesiące[1]
$miesiące[-2]
$miesiące[3..5]
$miesiące += 'grudzień'
$miesiące[0] = 'sty'
PS1.35
Wykonaj poniższe polecenia:
- utwórz kolekcję
ArrayListi przypisz do niej poniższe miesiące:- 'styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik'
- dodaj do kolekcji: 'listopad'
$months = [System.Collections.ArrayList] @('styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik')
$months.Add('listopad')
$months.Remove('listopad')
PS1.36
Wykonaj poniższe polecenia:
- utwórz słownik, w którym umieścisz poniższych użytkowników (id) i ich hasła:
- "278" - "zajac23#"
- "324" - "mysza32!"
- "456" - "kocur567@"
- dodaj do słownika użytkownika "987" i hasło "wrona453%"
- sprawdź, czy istnieje użytkownik o id "324" i jeśli istnieje zmień jego hasło na "filemon45!"
$hasla = @{
"278" = "zajac23#"
"324" = "mysza32!"
"456" = "kocur567@"
}
$hasla.Add("987","wrona453%")
$hasla.ContainsKey("324")
$hasla["324"] = "filemon45!"
PS1.37
Wykonaj poniższe polecenia:
- wyszukaj komendy zawierające w nazwie słowo "computer"
- przypisz wyszukane komendy do zmiennej o nazwie "computer"
- wyświetl informacje ze zmiennej "computer"
Get-Command *Computer*
$Computer=Get-Command *Computer*
$Computer
PS1.38
Wykonaj poniższe polecenia:
- utwórz zmienną o nazwie servrun i przypisz do niej
tablicę z listą usług:
- SysMain, Spooler, SamSs
- wyświetl informacje ze zmiennej servrun
$servrun = Get-Service -name "SysMain","Spooler","SamSs"
$servrun
$ht = @{}
$servrun | foreach { $ht.Add($_.Name, $_) }
$servrun | foreach { $ht.Add($PSItem.Name, $PSItem) }
$ht
PS1.39
Wykonaj poniższe polecenia:
- utwórz zmienną o nazwie servrunfile i wczytaj do niej plik o nazwie uslugi_run.txt
- wyświetl informacje ze zmiennej servrunfile
$servrunfile=Get-Content C:\Home\PowerShell\uslugi_run.txt
$servrunfile
PS1.40
Wykonaj poniższe polecenia:
- sprawdź jaka wartość ustawiona jest dla zmiennej preferencji
$ConfirmPreference - zmień wartość zmiennej
$ConfirmPreferencena Low (możliwe: Low, Medium, High) - sprawdź wartość zmiennej
$ConfirmPreferencepo dokonaniu zmiany
$ConfirmPreference
$ConfirmPreference = "Low"
$ConfirmPreference
Operatory
PS1.41
Używając operatora równości porównaj ze sobą liczby 3 i 4. Następnie za pomocą operatora nierówności porównaj ze sobą liczby 2 i 2.
3 -eq 4
2 -ne 2
PS1.42
Porównaj ze sobą napisy "kot filemon" i "Kot Filemon". Który napis jest większy?
"kot filemon" -eq "Kot Filemon"
"kot filemon" -gt "Kot Filemon"
PS1.43
Wykonaj poniższe polecenia:
- przekształć podane operatory na takie, które są akceptowane przez powłokę PowerShell
- sprawdź czy wyrażenia są prawdziwe
- 3=5 and 1>0 and 4<5
- 3=3 or 2>4 or 5>7
3 -eq 5 -and 1 -gt 0 -and 4 -lt 5
3 -eq 3 -or 2-gt 4 -or 5 -gt 7
PS1.44
Wypisz z katalogu C:\Windows\System32 wszystkie pliki *.dll, których nazwa zaczynaja się na listerę x.
Get-ChildItem C:\Windows\System32\x*.dll
PS1.45
Przejdź do katalogu C:\Program Files. Wylistuj pliki i katalogi które zaczynają się na literę G.
cd '.\Program Files\'
pwd
ls
ls g*
Get-ChildItem g*
PS1.46
Przejdź do katalogu C:\Program Files. Wylistuj pliki i katalogi które mają drugą literę g.
Get-ChildItem ?[g]*
ls ?g*
Polecenia
PS1.47
Wykonaj poniższe polecenia:
- zmień bieżący katalog na główny katalog dysku C:\
- wyświetl listę plików w katalogu głównym
- wyświetl listę wszystkich plików i katalogów z bieżącego katalogu zawierających w nazwie literę "a".
cd c:\
dir
dir *a*
PS1.48
Wykonaj poniższe polecenia:
- utwórz nowy katalog o nazwie PowerShell_cwiczenia w głównym katalogu dysku C
- zmień bieżący katalog na C:\PowerShell_cwiczenia
md PowerShell_cwiczenia
Set-Location C:\PowerShell_cwiczenia
PS1.49
Za pomocą polecenia wyświetl datę bieżącą.
Get-Date
PS1.50
Wykonaj poniższe polecenia:
- Uruchom śledzenie sesji i nazwij plik, w którym zapisane zostaną wyniki PS_Transcript_01.txt
- Wyświetl informacje o dostępnych na komputerze dyskach (
Get-Disk) - Zakończ śledzenie sesji
- Wyświetl informacje dotyczące śledzenia sesji z pliku, który został utworzony podczas uruchamiania śledzenia
start-transcript C:\Users\Avendi\Documents\PS_Transcript_01.txt
Get-Disk
stop-transcript
get-content C:\Users\Avendi\Documents\PS_Transcript_01.txt
PS1.51
Wyświetl zawartość pliku Pliki_PS\Error.txt oraz Pliki_PS\Path.txt.
Get-Content C:\Home\Pliki_PS\Error.txt, C:\Home\Pliki_PS\Path.txt
PS1.52
Wykonaj poniższe polecenia:
- wyświetl wszystkie polecenia dostępne w języku PowerShell
- wyświetl tylko te polecenia, które w nazwie zawierają słowo File
- wyświetl tylko te polecenia, które w pierwszej części nazwy mają słowo Write
- wyświetl tylko te polecenia, które w drugiej części nazwy mają słowo Object
Get-Command
Get-Command *File*
Get-Command -Verb Write
Get-Command -Noun Object
PS1.53
Wykonaj poniższe polecenia:
- wyświetl informacje o dyskach znajdujących się na komputerze oraz o dyskach sieciowych
- wyczyść konsolę
- zamknij konsolę
Get-PSDrive
Clear-Host
exit
PS1.54
Wykonaj następujące polecenia:
- otwórz konsolę PowerShell
- otwórz okno, w którym można będzie wyszukać polecenie używając jego nazwy
- znajdź polecenie, za pomocą którego wyświetlisz informacje o sterownikach drukarek zainstalowanych na komputerze
Show-Command
Get-PrinterDriver
PS1.55
Uruchom PowerShell ISE i wykonaj następujące polecenia:
- wyświetl bieżącą datę, listę dysków oraz listę drukarek
- zaznacz część skryptu i wyświetl tylko listę dysków
Wybierając polecenia skorzystaj z podpowiedzi IntelliSense.
Get-Date
Get-PSDrive
Get-Printer
PS1.56
Wyświetl listę wszystkich plików w katalogu C:\Home
Get-ChildItem C:\Home
PS1.57
Wykonaj poniższe polecenia:
- wyświetl listę wszystkich poleceń cmdlet wbudowanych w Windows PowerShell
- wyświetl listę komend zaczynających się od słowa "Test"
- wyświetl listę wszystkich procesów na komputerze
- wyświetl listę wszystkich poleceń, które mają typ
CmdletlubAlias
Get-Command
Get-Command -Name Test*
Get-Process
Get-Command -CommandType Cmdlet, Alias
PS1.58
Wykonaj poniższe polecenia
- wyświetl komendy dla wszystkich operacji, które możemy wykonywać na komputerze (mają w nazwie słowo computer)
- wyświetl wszystkie komendy które zawierają słowo "user" (mają w nazwie słowo user)
- wyświetl wszystkie komendy, które zaczynają się od słowa "user"
Get-Command *Computer*
Get-Command *User*
Get-Command User*
PS1.59
Wykonaj poniższe polecenia:
- wyświetl wszystkie komendy,
za pomocą których możemy wykonywać operacje na dysku
-noun Disk - wyświetl wszystkie komendy, które w części rzeczownikowej posiadają słowo service
- wyświetl wszystkie komendy, które w części czasownikowej posiadają słowo get
Get-Command -noun Disk
Get-Command -noun Service
Get-Command -verb Get
PS1.60
Znajdź nazwy usług Windows zawierające w nazwie słowo Install
Get-Service | Where-Object {$_.Name -like '*Install*'}
PS1.61
Wykonaj poniższe polecenia:
- wyświetl wszystkie aktywne usługi
- wyświetl wszystkie usługi, które zaczynają się na "win" z wykluczeniem usługi
"WinRM".
Get-Service | Where-Object {$_.Status -eq "Running"}
Get-Service -Name "win*" -Exclude "WinRM"
# inny zapis
Get-Service | Where-Object Status -EQ 'Running' | Select-Object -First 5
PS1.62
Wykonaj poniższe polecenia dla plików znajdujących się w katalogu C:\Home\PowerShell
- wyświetl listę obiektów wyjściowych polecenia
Get-ChildItem - znajdź na liście wyświetlonych danych właściwość, której użyjesz w poleceniu
Where-Objectdo ustalenia daty modyfikacji plików
Get-ChildItem C:\Home\PowerShell | Get-Member
Get-ChildItem C:\Home\PowerShell | Get-Member -membertype property
Get-ChildItem C:\Home\PowerShell | Where-Object LastWriteTime
PS1.63
Wykonaj poniższe polecenia:
- wybierz i wyświetl polecenia typu "Alias" zawierające w nazwie słowo "Connect"
- utwórz zmienną o nazwie "komendy" i przypisz do niej wybrane polecenia w formie tablicy
Get-Command -CommandType Alias -Name Connect*
$komendy = @(Get-Command -CommandType Alias -Name Connect*)
$komendy
Parametry poleceń
PS1.64
Wykonaj poniższe polecenia:
- wyświetl wszystkie usługi znajdujące się na lokalnym komputerze
- wyświetl usługę spooler wywołując ją po nazwie
- wyświetl wszystkie usługi zaczynające się od słowa "Windows"
Get-Service
Get-Service -Name *spooler*
Get-Service -DisplayName Windows*
PS1.65
Wykonaj poniższe polecenia:
- wyświetl listę procesów
- sprawdź, co by się stało, gdyby pierwszy proces z listy został zatrzymany. W poleceniu zatrzymania procesu użyj informacji z kolumny Id
Get-Process
Stop-Process -id 3456 -WhatIf
PS1.66
Wykonaj poniższe polecenia:
- uruchom usługę XblGameSave
- sprawdź stan usługi XblGameSave
- zatrzymaj usługę XblGameSave
- sprawdź stan usługi XblGameSave
- użyj opcji
WhatIf, żeby sprawdzić co by się stało, gdyby dla usługi Appinfo uruchomiona została komendaStart-Service Appinfo - sprawdź stan usługi XblGameSave
Start-Service XblGameSave
Get-Service XblGameSave
Stop-Service XblGameSave
Get-Service XblGameSave
Stop-Service XblGameSave -WhatIf
Get-Service XblGameSave
PS1.67
Napisz polecenie, za pomocą którego można będzie wyłączyć komputer. Polecenie powinno wymagać potwierdzenia dla wykonania czynności.
Stop-Computer -Confirm
PS1.68
Wykonaj poniższe polecenia:
- otwórz progam Notepad
- wyświetl listę procesów i znajdź proces programu Notepad
- napisz polecenie, za pomocą którego można będzie zamknąć program. Przed wykonaniem się polecenia powinno się pojawić żądanie potwierdzenia jego wykonania
- potwierdź wykonanie polecenia
Get-Process note*
Stop-Process -id 7344 -Confirm
PS1.69
Wykonaj poniższe polecenia:
- sprawdź, czy uruchomiony jest proces o ID 10000
- jeśli proces o ID 10000 nie istnieje, zatrzymaj go. Spowoduje to wywołanie błędu.
- napisz polecenie tak, aby błąd został zignorowany.
Get-process -ID 10000
Stop-Process -Id 10000 -ErrorAction Ignore
PS1.70
Wylistuj zawartość katalogu C:\Windows do pliku C:\Home\PowerShell\katalog_c.txt
ls C:\Windows > C:\Home\PowerShell\katalog_c.txt
PS1.71
Napisz polecenie, za pomocą którego usuniesz plik katalog_c.txt z dysku. Przed wykonaniem polecenia powinno pojawić się pytanie z prośbą o potwierdzenie.
del C:\Home\PowerShell\katalog_c.txt -Confirm
Łączenie poleceń - potoki
PS1.72
Napisz następujące polecenia:
- pierwsze powinno pobrać informację o usługach na komputerze i przekazać ją do drugiego polecenia
- drugie polecenie powinno zapisać informację w pliku uslugi5.txt na komputerze
- trzecim poleceniem wyświetl zawartość z pliku uslugi5.txt
Get-Service | Out-File C:\Home\PowerShell\uslugi5.txt
Get-Content C:\Home\PowerShell\uslugi2.txt
PS1.73
Wykonaj poniższe polecenia:
- napisz polecenie, za pomocą którego wyświetlisz w oddzielnym oknie informacje dotyczące usług na komputerze
- w okienku wyświetlającym usługi wyfiltruj tylko te usługi, które posiadają status "Running"
Get-Service | Out-GridView
# Należy wybrać w filterze Add criteria, zaznaczyć status
# i wpisać w okienku "Running".
Get-Service | Where-Object { $_.Status -eq 'Running'}
Get-Service | Where-Object Status -eq Running
PS1.74
Wykonaj poniższe polecenia:
- wyświetl katalogi z folderu C:\ w taki sposób, aby informacje pojawiły się w dwóch kolumnach.
- zmień wyświetlanie na trzykolumnowe i jawnie wskaż wyświetlanie właściwości name (nazwa)
Get-ChildItem C:\ | Format-Wide
Get-ChildItem C:\ | Format-Wide -Column 3 -Property name
PS1.75
Wykonaj poniższe polecenia:
- wyświetl listę wszystkich plików z rozszerzeniem .txt z katalogu C:\Home\PowerShell oraz ze znajdujących się w nim podkatalogów.
- wyświetl listę wszystkich plików z wyjątkiem tych z rozszerzeniem .txt z katalogu C:\Home\PowerShell oraz ze znajdujących się w nim podkatalogów.
Get-ChildItem C:\Home\PowerShell -recurse -include *.txt
Get-ChildItem C:\Home\PowerShell -recurse -exclude *.txt
PS1.76
Wykonaj poniższe polecenia:
- napisz polecenie, za pomocą którego wyświetlisz w oddzielnym oknie informacje dotyczące procesów na komputerze
- w okienku wyświetlającym procesy posortuj je według zużycia procesora (CPU) malejąco
Get-Process | Out-GridView
PS1.77
Wykonaj poniższe polecenia:
- wyświetl listę procesów
- wyświetl listę procesów zaczynających się na literę "m"
- nazwy NPM, PM, WS to aliasy komend. Sprawdź, do jakich komend odnosza się te aliasy
- wyświetl ponownie listę procesów
- posortuj procesy według kolumny ProcesName rosnąco oraz według kolumny CPU malejąco
Get-Process
Get-Process m*
Get-Process | Get-Member
Get-Process | Sort ProcessName, CPU -Descending
PS1.78
Wykonaj poniższe polecenia:
- wyświetl zdarzenia z dziennika Application systemu Windows
- posortuj dane według czasu zapisania zdarzeń do dziennika w kolejności od najpóźniejszego do najwcześniejszego
Get-EventLog -LogName Application | Sort-Object -Property Timewritten -Descending
PS1.79
Sprawdź, czy istnieją procesy o tej samej nazwie, ale w różny sposób obciążające procesor.
Get-Process | Sort-Object -Property Name, CPU -Descending
PS1.80
Wyświetl datę ostatnio zmodyfikowanego pliku w folderze C:\Home\PowerShell
Get-ChildItem C:\Home\PowerShell | Measure-Object -Property LastWriteTime -Maximum
PS1.81
Wyświetl 10 najnowszych zdarzeń z dziennika Application systemu Windows.
Get-EventLog -LogName Application -Newest 10
PS1.82
Wyświetl listę aliasów dla polecenia Get-ChildItem
Get-Alias -definition Get-ChildItem
PS1.83
Wylistuj zawartość katalogu C:\ i przekieruj wynik
polecenia do polecenia cmdlet Format-List.
Get-ChildItem C:\ | Format-List
PS1.84
Wykonaj poniższe polecenia:
- sprawdź, jakie informacje wyświetla polecenie
Get-Volume - wyświetl następujące informacje o wolumenach dysku: litera dysku, rozmiar dysku, wolne miejsce na dysku
Get-Volume
Get-Volume | Select DriveLetter, Size, SizeRemaining
PS1.85
Wykonaj poniższe polecenia:
- wyfiltruj pliki w katalogu C:\ o rozmiarze większym niż 1000 bajtów
- posortuj pliki według rozmiaru malejąco
Get-ChildItem C:\home | Where-Object Length -lt 1000 | Sort-Object Length -Descending
PS1.86
Wykonaj poniższe polecenia:
- za pomocą aliasu
gciwyświetl listę plików i folderów zawartych w bieżącym katalogu - ogranicz wyświetlaną listę do dużych plików (powyżej 10MB) za pomocą polecenia
Where-Object
gci C:\Home\PowerShell
Get-ChildItem -path C:\Home\PowerShell -recurse |
Where-Object {($_.Length / 1MB) -gt 10}
Get-ChildItem -path C:\Home\PowerShell -recurse |
Where-Object Length -gt (10 * 1MB)
PS1.87
Z katalogu C:\Home\PowerShell wyświetl 3 największe pliki
Get-ChildItem C:\Home\PowerShell |
Sort -Property Length -Descending |
Select-Object -First 3
PS1.88
Wykonaj poniższe polecenia:
- zobacz jakie właściwości i metody dostępne są dla obiektów w katalogu C:\Home\PowerShell
- wybierz wszystkie właściwości obiektów znajdujących się w katalogu C:\Home\PowerShell
- dla obiektów znajdujących się w katalogu C:\Home\PowerShell wyświetl tylko nazwę, wielkość pliku i datę utworzenia
Get-ChildItem C:\Home\PowerShell | Get-Member
Get-ChildItem C:\Home\PowerShell | Select-Object -Property *
Get-ChildItem C:\Home\PowerShell | Select-Object Name, Length, CreationTime
PS1.89
Wybierz 5 procesów, które najmocniej obciążają procesor.
Uwaga: CPU to całkowite zużycie procesora (nie chwilowe).
Get-Process |
Sort cpu -desc |
Select -First 5
PS1.90
Wyświetl dwa ostatnio modyfikowane pliki z bieżącego folderu
Get-ChildItem |
Sort LastWriteTime -Descending |
Select Name, LastWriteTime -First 2
PS1.91
Wykonaj poniższe polecenia:
- wyświetl nazwę (Name) i wielkość plików (Length) znajdujących się w katalogu i w podkatalogach folderu C:\Home\PowerShell
- wylicz wielkość plików w kilobajtach i zaokrąglij wynik do dwóch miejsc po przecinku
Get-ChildItem C:\Home\PowerShell -Recurse | Select-Object Name, Length
Get-ChildItem C:\Home\PowerShell -Recurse |
Select-Object Name, Length, @{name='Size_kB';expression={'{0:N2}' -f($PSItem.Length/1KB)}}
PS1.92
Napisz polecenie, za pomocą którego wyświetlisz procentowo ile jest wolnego miejsca na dysku (Get-WmiObject Win32_logicaldisk)
Get-WmiObject Win32_logicaldisk |
Select DeviceID, MediaType,@{Name="Free (%)";Expression={"{0,6:P0}" -f(($_.freespace) / ($_.size))}}
PS1.93
Napisz polecenie, za pomocą którego wyświetlisz nazwę procesu i ilości zajętej przez niego pamięci w bajtach. Posortuj procesy malejąco wedłgu ilości zajmowanej pamięci.
Name Memory MB
---- ---------
dotnet 2 366 161
rzls 2 366 022
Postman 2 144 927
Code 2 140 803
Code 2 136 719
Get-Process |
Sort-Object VM -desc |
Select-Object name, @{n="Memory MB";e={'{0:N0}' -f ($PSItem.VM/1MB)}}
PS1.94
Wykonaj poniższe polecenia:
- wyświetl listę procesów
- posortuj listę procesów według CPU malejąco
- przelicz wartość CPU z sekund na minuty
- wyświetl tylko 5 najbardziej obciążających CPU procesów
- zmień formatowanie wyniku tak, aby czas był wyświetlany w minutach bez miejsc po przecinku
Get-Process
Get-Process | Sort CPU -Desc
Get-Process | Sort CPU -Desc |
Select ProcessName,@{name='CPU(minutes)';expression={$_.CPU/60}} -First 5
Get-Process | Sort CPU -Desc |
Select ProcessName,@{name='CPU(minutes)';expression={'{0:N0}' -f ($_.CPU/60)}} -First 5
PS1.95
Wykonaj poniższe polecenia:
- użyj parametru
-PropertypoleceniaFormat-List, aby wyświetlić tylko nazwy plików i katalogów - zmodyfikuj polecenie, aby dodać wielkości plików z katalogu głównego
Get-ChildItem C:\ | Format-List -property name
Get-ChildItem C:\ | Format-List -property name, length
PS1.96
Wyświetl nazwy plików w bieżącym katalogu w trzech kolumnach na ekranie.
Get-ChildItem | Format-Wide -Column 3
Tworzenie skryptów
PS1.97
Wykonaj poniższe polecenia:
- otwórz konsolę PowerShell ISE, jeśli nie jest otwarta
- utwórz nowy skrypt który
- otwórz aplikację Notatnik
- napisz w skrypcie polecenia, za pomocą których zamkniesz aplikację Notatnik
- zapisz skrypt na dysku pod nazwą Notatnik.ps1 i zamknij go
- przeciągnij skrypt do konsoli ISE i uruchom go
Get-Process notepad | Stop-Process
PS1.98
Napisz skrypt, za pomocą którego zamkniesz aplikację Notatnik. Jeśli aplikacja Notatnik nie jest otwarta, skrypt też powinien się wykonać tzn. błąd powinien zostać zignorowany.
Get-Process -Name Notepad -ErrorAction SilentlyContinue | Stop-Process
PS1.99
Wykonaj poniższe polecenia:
- napisz skrypt, za pomocą którego można będzie wyświetlić listę drukarek zainstalowanych na komputerze i zapisz skrypt na dysku
- uruchom skrypt używając aplikacji Wiersza poleceń w taki sposób, aby wyświetlone zostały wyniki działania skryptu
powershell -noexit -file C:\Home\PowerShell\printers.ps1
PS1.100
Wykonaj poniższe polecenia:
- napisz skrypt, za pomocą którego odczytasz wszystkie wiersze z pliku o nazwie dyski.txt
- uruchom skrypt i wyświetl zawartość pliku dyski.txt
$i = 0
$fileContents = Get-Content -path C:\Home\PowerShell\dyski.txt
While ( $i -le $fileContents.length )
{
$fileContents[$i]
$i++
}
PS1.101
Napisz skrypt, za pomocą którego:
- utworzysz listę wszystkich usług zdefiniowanych w komputerze
- sprawdzisz i zwrócisz stan każdej usługi (uruchomiona, zatrzymana, wyłączona)
- zwrócisz konta używane przez każdą usługę
- posortuj dane najpierw według trybu uruchomienia usługi (automatic, manual, disabled), następnie według stanu (np. running, stopped)
- na koniec ułóż listę uporządkowaną alfabetycznie dla każdej usługi w dwóch
poprzednich kategoriach.
$args = "localhost","loopback"
foreach ($i in $args)
{
Write-Host "Testing" $i "..."
Get-WmiObject -computer $args -class win32_service |
Select-Object -property name, state, startmode, startname |
Sort-Object -property startmode, state, name |
Format-Table *
}
PS1.102
Napisz skrypt, w którym wyświetlisz listę aktualnie wykonywanych procesów i zapiszesz rezultat do pliku tekstowego jako sformatowaną i posortowaną tabelę.
$args = "localhost","loopback","127.0.0.1"
foreach ($i in $args)
{
$strFile = "c:\mytest\" + $i + "Processes.txt"
Write-Host "Testing" $i "please wait ...";
Get-WmiObject -computername $i -class win32_process |
Select-Object name, processID, Priority, ThreadCount, PageFaults, PageFileUsage |
Where-Object {!$_.processID -eq 0} | Sort-Object -property name |
Format-Table | Out-File $strFile
}
Instrukcje warunkowe
PS1.103
Wykonaj poniższe polecenia:
- utwórz zmienną x i przypisz do niej wartość 10
- napisz intrukcję warunkową, za pomocą której sprawdzisz wartość w zmiennej x i jeśli jest ona mniejsza niż 20 wyświetlisz napis "Wartość x jest mniejsza niż 20"
$x = 10
if ($x -le 20) {
write-host("Wartość x jest mniejsza niż 20")
}
PS1.104
Wykonaj poniższe polecenia:
- utwórz zmienną o nazwie dzien i przypisz do niej nazwę dnia tygodnia
- napisz instrukcję warunkową, za pomocą której wyświetlisz napis "Dzisiaj pracujemy", jeśli dniem tygodnia nie jest sobota lub niedziela oraz napis "Dzisiaj wolne", jeśli dniem tygodnia jest sobota lub niedziela.
$dzien = (get-date).dayofweek
if(($dzien -ne "Saturday") -or ($dzien -ne "Sunday")) {
write-host("Dzisiaj pracujemy")
} else {
write-host("Dzisiaj wolne")
}
PS1.105
Wykonaj poniższe polecenia:
- utwórz zmienną o nazwie "dział" i przypisz do niej wartość "programiści"
- napisz instrukcję warunkową, za pomocą której:
- wyświetlisz napis "IT", jeśli wartość w zmiennej "dział" jest "programiści"
- wyświetlisz napis "sprzedaż", jeśli wartość w zmiennej "dział" jest "handlowcy"
- dla wszystkich pozostałych przypadków wyświetlisz napis "pozostali pracownicy"
- zweryfikuj poprawność działania skryptu - zamień wartość zmiennej "praca" na "handlowcy" i sprawdź jaki napis zostanie wyświetlny
- następnie zmień wartość zmiennej "praca" na "księgowi" i sprawdź jaki napis zostanie wyświetlony
$praca ="programiści"
if ($praca -eq "programiści") {
write-host("IT")
} elseif($praca -eq "handlowcy") {
write-host("Sprzedaż")
} else {
write-host("Pozostali pracownicy")
}
PS1.106
Wykonaj poniższe polecenia:
- utwórz zmienną o nazwie "role" i przypisz do niej tablicę wartości: "Web", "Database" i "FileServer"
- napisz instrukcję
switch, za pomocą której:- dla wartości "Web" w zmiennej wyświetli się napis "konfiguracja SQL"
- dla wartości "Database" wyświetli się napis "konfiguracja IIS"
- dla wartości "FileServer" wyświetli się napis "konfiguracja Udziału"
$roles = @('Web','Database','FileServer')
switch ( $roles ) {
'Database' { 'Configure SQL' }
'WEB' { 'Configure IIS' }
'FileServer' { 'Configure Share' }
}
Pętle
PS1.107
Napisz pętlę, za pomocą której odczytasz i wyświetlisz wszytkie linie z pliku o nazwie "imiona.txt"
$i = 0
$fileContents = Get-Content -path C:\Home\PowerShell\imiona.txt
While ( $i -le $fileContents.length )
{
$fileContents[$i]
$i++
}
$linie_pliku = Get-Content -path C:\Home\PowerShell\imiona.txt
foreach($line in $linie_pliku) {
$line
}
PS1.108
Za pomocą pętli wyświetl wszystkie litery alfabetu. Litery powinny być wyświetlone jako wielkie. Kody Ascii liter od 65 do 90.
foreach($code in 65..90)
{
[char]$code
}
$i = 0
$caps = 65..91
do
{
[char]$caps[$i]
$i++
} while ($i -lt 26)
PS1.109
Napisz pętlę Do...While, za pomocą której poprosisz użytkownika o wpisanie słowa.
Pętla ma się wykonywać dotąd aż użytkownik wpisze słowo "filemon".
Jeśli użytkownik wprowadzi słowo "filemon",
powinien się wyświetlić komunikat "poprawnie".
do {
$input= Read-Host "Proszę wpisz hasło"
} while ($input -notlike "filemon" )
Write-Host "poprawnie"
PS1.110
Napisz pętlę Do...Until, za pomocą której można będzie sprawdzać, czy komputer o podanej nazwie jest włączony.
Do {
Write-Host "Computer offline"
Start-Sleep 5
}
Until (Test-Connection -ComputerName 'Avendi' -Quiet -Count 1)
Write-Host "Computer online"
PS1.111
Napisz pętlę For, za pomocą której wyświetlisz licznik czasu.
W pętli powinno następować odliczanie sekund od 10 w dół
i powinien wyświetlać się napis "pozostała liczba sekund".
for ($seconds=10; $seconds -gt -1; $seconds--) {
Write-Host -NoNewLine ("`rseconds remaining: " + ("{0:d4}" -f $seconds))
Start-Sleep -Seconds 1
}
PS1.112
Napisz skrypt, który będzie sprawdzał czy wprowadzona przez użytkownika wartość jest liczbą pierwszą. W skrypcie:
- poproś użytkownika o wprowadzenie numeru
- pętla
Forma zostać zakończona, jeśli wprowadzona wartość nie będzie liczbą pierwszą i powinien wyświetlić się napis "wartość nie jest liczbą pierwszą" - jeśli wprowadzona wartość będzie liczbą pierwszą, powinien wyświetlić się napis "wartość jest liczbą pierwszą"
$num = Read-Host "Input a number"
$isPrime = $true
for ($y = 2 ; $y -lt $num ; $y++ )
{
if (($num / $y) -is [int]) {
Write-Host "$num nie jest liczbą pierwszą"
$isPrime = $false
break
}
}
if ($isPrime -eq $true) {
Write-Host "$num jest liczbą pierwszą"
}
PS1.113
Użyj polecenia ForEach-Object aby wyświetlić zawartość bieżącego katalogu. Wyświetl wszystkie nazwy plików oraz ich rozmiar.
Get-ChildItem -Path "C:\Home" | ForEach-Object {
$ItemPath = $_.FullName
$ItemSize = $_.Length
Write-Host "$ItemPath is $ItemSize bytes"
}
Obsługa błędów
PS1.114
Napisz skrypt, za pomocą którego zatrzymasz proces programu Notepad. Skrypt powinien zawierać obsługę błędów. Jeśli proces programu Notepad nie istnieje, powinien wyświetlić się błąd "Notatnik nie został otwarty".
try {
$process = Get-Process -Name notepad -ErrorAction Stop
$process | Stop-Process
} catch {
Write-Host "Notatnik nie został otwarty"
}
PS1.115
Napisz skrypt, za pomocą którego:
- do zmiennej o nazwie dyski przypiszesz zawartość pliku dyski.txt znajdującego się w katalogu C:\Home\PowerShell
- wyświetlisz zmienną o nazwie dyski
- zapewnisz obsługę błędów - jeśli plik dyski.txt nie zostanie znaleziony, powinien pojawić się wyjątek, który zostanie przechwycony i błąd zostanie zapisany w pliku o nazwie PS_bledy.txt
Usuń plik dyski.txt z katalogu, uruchom skrypt ponownie i sprawdź, czy błąd został obsłużony poprawnie.
Try {
$dyski = Get-Content C:\Home\PowerShell\dyski.txt -ErrorAction Stop
$dyski
}
Catch {
$_.Exception | Out-File C:\Home\PowerShell\PS_bledy.txt -Append
Break
}
PS1.116
Użyj cmdlet Get-Content i wczytaj plik o nazwie C:\Noname.txt (nie istniejący takiego).
Przechywyć błąd i wyświetl komunikat po polsku.
Podaj w komunikacie nazwę pliku, którego nie udało się otworzyć.
Pokoloruj komunikat - użyj czerwonej czcionki.
2023-07-18 07:28:40
błąd Cannot find path 'C:\sdfssd.txt' because it does not exist.
try {
Get-Content c:\sdfssd.txt -ErrorAction Stop
}
catch {
Write-Host "$(Get-Date -Format "yyyy-MM-dd hh:mm:ss")"
Write-Host -ForegroundColor Red -BackgroundColor White "błąd $($_.Exception.Message)"
}
Funkcje
PS1.117
Wykonaj poniższe polecenia:
- do zmiennej x przypisz tabelę z liczbami od 1 do 100
- napisz funkcję, za pomocą której zsumujesz liczby znajdujące się w zmiennej x
$x = 1..100
Function Get-Sum ($a) {
Return ($a | Measure-Object -Sum).Sum
}
Get-Sum (1..36)
PS1.118
Napisz funkcję Get-OperatingSystemVersion, za pomocą której można będzie sprawdzać wersję systemu operacyjnego oraz ją wywołaj.
Function Get-OperatingSystemVersion
{
(Get-CimInstance -Class Win32_OperatingSystem).Version
}
Get-OperatingSystemVersion
PS1.119
Napisz funkcję, za pomocą której wyświetlisz informacje o procesach związanych z aplikacją "Teams".
Function Get-ProcessInfo {
Param(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[String[]]$Process
)
Get-Process -Process $Process
}
"Teams" | Get-ProcessInfo
PS1.120
Utwórz obiekt PSCustomObject z właściwościami:
- ComputerName = localKomp
- ip = 127.0.0.1
- Wersja = 2
ComputerName ip Wersja
------------ -- ------
localKomp 127.0.0.1 2
$a = New-Object -Property @{"Wersja"=2; "ComputerName"="localKomp"; ip="127.0.0.1" } -TypeName psobject
$a
Moduły
PS1.121
Wykonaj poniższe polecenia:
- wyświetl listę dostępnych modułów
- wyświetl listę wszystkich poleceń, które są eksportowane z modułu
Get-Module -ListAvailable
Get-Module Microsoft.PowerShell.Management |
Select-Object -ExpandProperty ExportedCommands
PS1.122
Wykonaj poniższe polecenia:
- zaimportuj moduł PSDiagnostics
- znajdź i zainstaluj moduł VMware.PowerCLI
Import-Module PSDiagnostics
Find-Module -Name VMware.PowerCLI | Install-Module
PS1.123
Wykonaj poniższe polecenia:
- utwórz moduł o nazwie Install_WW
- zaimportuj moduł Install_WW
Import-Module Install_WW
Rejestr
PS1.124
Wyświetl listę wszystkich rootów dostępnych w Rejestrze. Użyj Get-PSDrive.
Get-PSDrive -PSProvider 'Registry' | Select-Object -Property Name, Root
PS1.125
Wyświetl klucz rejestru HKCU:\Printers oraz podklucze i ich właściwości
Get-ChildItem -Path 'HKCU:\Printers' -Recurse -Depth 1
PS1.126
Wykonaj poniższe polecenia:
- utwórz nowy klucz w rejestrze: HKCU:\MyKey
- do klucza dodaj właściwość Imie i wartość Bonifacy
- wyświetl dodany klucz z rejestru
- zmodyfikuj wartość Imie i przypisz wartość Filemon
New-Item -Path 'HKCU:\MyKey'
New-ItemProperty -Path 'HKCU:\MyKey' -Name 'Imie' -Value 'Bonifacy'
Get-ItemProperty -Path 'HKCU:\MyKey'
Set-ItemProperty -Path 'HKCU:\MyKey' -Name 'Imie' -Value 'Filemon'
Profile
PS1.127
Wykonaj poniższe polecenia:
- sprawdź, czy profil konsolowy istnieje
- jeśli profil nie istnieje utwórz nowy profil konsolowy.
użyj zmiennej automatycznej
$profilejako wskaźnika dla profilu dla bieżącego użytkownika. Zastosuj przełącznik-Force, aby uniknąć monitowania o kontynuację. Wyspecyfikuj parametrItemTypejako file, aby zagwarantować poprawne utworzenie pliku profilu - sprawdź ponownie, czy profil istnieje
- Ootwórz plik profilu w narzędziu PowerShell ISE
Test-Path $PROFILE
New-Item $PROFILE -ItemType file -Force
Test-Path $PROFILE
Ise $profile
PS1.128
Wykonaj poniższe polecenia:
- utwórz funkcję o nazwie
Set-Profile, otwierającą profil Current User, Current Host - dodaj polecenie otwierające profil do edycji w narzędziu PowerShell ISE wewnątrz bloku skryptowego funkcji
- zapisz zmodyfikowany plik profilu i zamknij narzędzie Windows PowerShell ISE
- zamknij konsolę PowerShell i PowerShell ISE
- ponownie otwórz konsolę PowerShell
- przetestuj załadowanie profilu
Function Set-Profile
{
ISE $profile
} #end function set-profile
Set-Profile
PS1.129
Wykonaj poniższe polecenia:
- wywołaj funkcję
Set-Profile - utwórz trzy nowe zmienne:
MyDocuments,ConsoleProfile,ISEProfilei przypisz do nich odpowiednio kod:- '-Value ([environment]::GetFolderPath("mydocuments"))'
- '-Value (Join-Path -Path $mydocuments -ChildPath WindowsPowerShell\Microsoft.PowerShell_profile.ps1)'
- '-Value (Join-Path -Path $mydocuments -ChildPath WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1)'
Set-Profile
New-Variable -Name MyDocuments -Value ([environment]::GetFolderPath("mydocuments"))
New-Variable -Name ConsoleProfile -Value (Join-Path -Path $mydocuments -ChildPath WindowsPowerShell\Microsoft.PowerShell_profile.ps1)
New-Variable -Name ISEProfile -Value (Join-Path -Path $mydocuments -ChildPath WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1)
PS1.130
Utwórz dwa nowe aliasy:
- alias gh, który będzie się odwoływał do polecenia
Get-Help - alias ih, który będzie się odwoływał do polecenia
Invoke-History
New-Alias -Name gh -Value get-help
New-Alias -Name ih -Value Invoke-History
PS1.131
Utwórz dwa nowe dyski PowerShell. Pierwszy powinien odwoływać się do lokalizacji rejestru HKEY_CLASSES_ROOT. Drugi powinien wskazywać lokalizację certyfikatów osobistych (my) bieżącego użytkownika.
New-PSDrive -Name HKCR -PSProvider Registry -Root hkey_classes_root
New-PSDrive -Name mycerts -PSProvider Certificate -Root Cert:\CurrentUser\My
PS1.132
Dodaj następujące polecenia:
- pierwsze powinno uruchamiać funkcjonalność transkryptu
- drugie powinno zmieniać bieżącą lokalizację roboczą na główny katalog dysku C
- trzecie powinno czyścić zawartość konsoli Windows PowerShell
Start-Transcript
Set-Location -Path c:\
Clear-Host
PS1.133
Wykonaj poniższe polecenia:
- zapisz plik profilu PowerShell i zamknij narzędzie PowerShell ISE
- zamknij i ponownie uruchom konsolę PowerShell
- przetestuj każdą z nowo zdefiniowanych funkcjonalności
gh
$MyDocuments
$ConsoleProfile
$ISEProfile
sl hkcr:
sl mycerts:
sl c:\
Stop-Transcript
set-profile
Usługi zdalne - WinRM
PS1.134
Wykonaj poniższe polecenia:
- połącz się za pomocą zdalnego pulpitu z komputerem o nazwie Mambo16, uruchom jako administrator konsolę PowerShell i skonfiguruj mechanizm do zdalnego połączenia WinRM
- na komputerze, z którego się łączysz dodaj komputer Mambo16 do zaufanych komputerów
- zrób test, czy możesz się połączyć z komputerem Mambo16
- otwórz zdalną sesję i połącz się z komputerem Mambo16. Uwierzytelnienie (Credential) to Mambo12
- wyświetl serwisy uruchomione na komputerze Mambo16
- zamknij sesję zdalną
Enable-PSRemoting -Force
winrm s winrm/config/client '@{TrustedHosts="Mambo16"}'
Test-WsMan Mambo16
Enter-PSSession -ComputerName Mambo16 -Credential Mambo12
Get-Service | Where-Object {$_.Status -eq "Running"}
Exit-PSSession
PS1.135
Wykonaj poniższe polecenia:
- Utwórz zdalne sesje stałe dla komputerów o nazwach Mambo16 i Mambo2
- Połącz się z komputerem Mambo16. Do połączenia się użyj ID sesji.
- Wyświetl procesy uruchomione na komputerze Mambo16
- Zamknij sesję
New-PSSession -ComputerName Mambo16 -Credential Mambo12
New-PSSession -ComputerName Mambo2 -Credential Mambo12
Enter-PSSession -id 2
Get-Process
Exit-PSSession
PS1.136
Wykonaj poniższe polecenia:
- dodaj na swoim komputerze komputer Mambo16 do zaufanych komputerów
- połącz się z komputerem Mambo16 za pomocą nietrwałej sesji i wyświetl listę drukarek.
Set-Item wsman:\localhost\client\trustedhosts -Concatenate -value 'Mambo16'
Invoke-Command -ComputerName Mambo16 -scriptblock {Get-Printer} -Credential Mambo12
PS1.137
Wykonaj poniższe polecenia:
- odczytaj ostatni proces uruchomiony na komputerze o
nazwie Mambo16,
-Credential Mambo12 - odczytaj ostatni proces na komputerach Mambo7 i Mambo10
Invoke-Command -ComputerName Mambo16 -ScriptBlock {gps | select -Last 1} `
-Credential Mambo12
Invoke-Command -ComputerName Mambo7,Mambo10 `
-ScriptBlock {gps | select -Last 1} `
-Credential Mambo12
PS1.138
Napisz polecenie, za pomocą którego:
- pobierzesz nazwy komputerów z pliku tekstowego Computers.txt
- uruchomisz zdalną sesję nietrwałą z komputerami znajdującymi się w pliku Computers.txt
- uruchomisz na komputerach z pliku Computers.txt skrypt o nazwie printers.ps1
Invoke-command -ComputerName (Get-Content c:\home\powershell\computers.txt) `
-Credential Mambo12 -FilePath c:\home\powershell\printers.ps1
PS1.139
Wykonaj poniższe polecenia:
- utwórz zmienną
$s1 - utwórz nową sesję trwałą dla komputerów Mambo7 i Mambo10 i przypisz
sesję do zmiennej
$s1.Credential - Mambo12 - odczytaj procesy uruchomione na komputerach Mambo7 i Mambo10 i przypisz
przypisz je do zmiennej
$p - wyświetl listę procesów ze zmiennej
$p
$s1 = New-PSSession -ComputerName Mambo7, Mambo10 -Credential Mambo12
Invoke-Command -Session $s1 {$p = Get-Process}
Invoke-Command -Session $s1 {$p}
PS1.140
Wykonaj poniższe polecenia:
- odczytaj ostatni proces uruchomiony na komputerze o
nazwie Mambo16
-Credential Mambo12 - odczytaj ostatni proces na komputerach Mambo7 i Mambo10
Invoke-Command -ComputerName Mambo16 -ScriptBlock {gps | select -Last 1} `
-Credential Mambo12
Invoke-Command -ComputerName Mambo7,Mambo10 `
-ScriptBlock {gps | select -Last 1} `
-Credential Mambo12
Active Directory (AD)
PS1.141
Wykonaj poniższe polecenia:
- sprawdź, czy moduł AD jest zaimportowany do bieżącej sesji
- jeśli moduł AD nie jest zaimportowany, zaimportuj go
- wyświetl wyświetl wszystkie komendy dostępne w module AD
- wyświetl tylko te komendy, które odnoszą się do grup
Get-Module -Listavailable
Import-Module -Name ActiveDirectory
Get-Command -Module ActiveDirectory
Get-Command -Module ActiveDirectory -Name "*Group*"
PS1.142
Wykonaj poniższe polecenia:
- utwórz nową grupę (security group) o nazwie "Quality" w AD DC. Użyj
następujących parametrów:
- OU - parametr
-Pathpodajemy Production - parametr
-GroupScopepodajemy Global
- OU - parametr
- usuń grupę Quality i ponownie ją dodaj
New-ADGroup "Quality" -Path "OU=Production,DC=enterprise,dc=com" `
-GroupCategory Security -GroupScope Global -PassThru -Verbose
Remove-ADGroup -Identity Quality
New-ADGroup "Quality" -Path "OU=Production,DC=enterprise,dc=com" `
-GroupCategory Security -GroupScope Global -PassThru -Verbose
PS1.143
Wykonaj poniższe polecenia:
- dodaj do grupy użytkowników Adam Rybka i Wanda Mrozek
- wyświetl użytkowników grupy
Add-AdGroupMember -Identity Quality -Members Adam.Rybka, Wanda.Mrozek
Get-ADGroupMember -Identity Quality
PS1.144
Wykonaj poniższe polecenia:
- dodaj grupę o nazwie Managers
- wyświetl listę wszystkich grup znajdujących się w AD
- dodaj użytkownika o nazwisku Piotr Poziomka do grup Managers i Quality
- dodaj do grupy Quality użytkowników z pliku .csv o nazwie Users.csv
New-ADGroup "Managers" -Path "OU=Production,DC=enterprise,dc=com" `
-GroupCategory Security -GroupScope Global -PassThru -Verbose
Get-ADGroup -filter * -properties GroupCategory | ft name,groupcategory
"Managers","Quality" | Add-ADGroupMember -Members `
(Read-Host -Prompt "Enter User Name")
Import-CSV C:\scripts\users.csv -Header users |
ForEach-Object {Add-AdGroupMember -Identity "Quality" -members $_.users}
PS1.145
Wykonaj poniższe polecenia:
- dodaj grupę o nazwie "Support"
- skopiuj użytkowników z grupy "Quality" do grupy "Support"
- wyświetl użytkowników z grupy "Support"
New-ADGroup "Support" -Path "OU=Production,DC=enterprise,dc=com" -GroupCategory Security -GroupScope Global -PassThru -Verbose
Get-ADGroupMember "Quality" | Get-ADUser |
ForEach-Object {Add-ADGroupMember -Identity "QualityControl" -Members $_}
Get-ADGroup -Identity "Support" -Properties members |
Select-Object -ExpandProperty members
PS1.146
Napisz skrypt, który uruchomisz lokalnie i dodasz za jego pomocą swój komputer do Active Directory
$domain = "myDomain"
$password = "myPassword!" | ConvertTo-SecureString -asPlainText -Force
$username = "$domain\myUserAccount"
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
Add-Computer -DomainName $domain -Credential $credential
PS1.147
Wykonaj poniższe polecenia:
- wyświetl listę komputerów dostępnych w AD
- wyświetl listę wszystkich komputerów, które mają w nazwie "Mambo" - wyświetl nazwę komputera, dns hostname i adres IPv4.
- wyświetl listę komputerów, na których było zmieniane hasło w ciągu ostatnich 90 dni
Get-ADComputer -Filter * -Properties * |
Select -Property Name,DNSHostName,Enabled,LastLogonDate
Get-ADComputer -Filter 'Name -like "User01*"' -Properties IPv4Address |
FT Name,DNSHostName,IPv4Address -A
Get-ADComputer -Filter 'PasswordLastSet -ge $Date' -Properties PasswordLastSet |
FT Name,PasswordLastSet
PS1.148
Wyeksportuj listę komputerów
Get-ADComputer -Filter * -Properties * |
Select -Property Name,DNSHostName,Enabled,LastLogonDate
PS1.149
Wykonaj poniższe polecenia:
- usuń z grupy Quality użytkownika o nazwisku Piotr Poziomka
- usuń użytkownika o nazwisku Tomasz Borowik ze wszystkich grup
- zaimportuj plik users_delete.csv i usuń zawartych w tym pliku użytkowników
Remove-ADGroupMember -Identity Quality -Members Piotr.Poziomka
Get-ADUser -Identity Tomasz.Borowik -Properties MemberOf | ForEach-Object {
$_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false
}
Import-CSV C:\Home\PowerShell\users_delete.csv -Header users |
ForEach-Object {Remove-ADGroupMember -Identity "Quality" -members $_.users}
PS1.150
Wykonaj poniższe polecenia:
- wyświetl użytkowników, którzy nie mają aktywnych kont
- wyświetl użytkowników, którzy mają ustawione hasło o długości 0 znaków
- wyświetl użytkowników, którzy mają ustawione hasło o długości 0 znaków i mają aktywne konta
Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} |
Select-Object Name
Get-AdUser -Filter * -Properties passwordlastset | select name,passwordlastset
PS1.151
Znajdź i wyświetl użytkowników, którzy nie zmienili hasła przez ostatnie 30 dni.
$today = Get-Date
$30DaysAgo = $today.AddDays(-30)
Get-ADUser -Filter "Enabled -eq 'True' -and passwordlastset -listing '$30DaysAgo'"
PS1.152
Wykonaj poniższe polecenia:
- wyświetl wszystkie komputery (system operacyjny serwera i system operacyjny klienta) w taki sposób aby były posortowane według systemu operacyjnego
- wyświetl wszystkie komputery, które mają zainstalowany system operacyjny Windows 10
Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address |
Sort-Object OperatingSystem | Select-Object Name,OperatingSystem
Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}
PS1.153
Napisz skrypt, który będzie łączył się zdalnie ze stacjami roboczymi w sieci i szukał kont użytkowników, które nie wymagają haseł.
$args = "localhost"
foreach ($i in $args)
{
Write-Host "Connecting to" $i "please wait ...";
Get-WmiObject -computername $i -class win32_UserAccount |
Select-Object Name, Disabled, PasswordRequired, SID, SIDType |
Where-Object {$_.PasswordRequired -eq 0} |
Sort-Object -property name | Write-Host
}
PS1.154
Utwórz strukturę OU:
- grupę oraz użytkownika OU: Test-YourName
- wewnątrz powyższego OU utwórz kolejny OU: SubOU: TestSUB-YourName
Wynikowa struktura OU: Test-Tomek -> TestSUB-Tomek
Następnie:
- w OU Test-YourName utworz grupę: Grupa-YourName
- w OU TestSUB-YourName, utwórz użytkownika: User-YourName
Wynikowa struktura:
- OU: Test-Tomek -> grupa: Grupa-Tomek
- OU: Test-Tomek -> TestSUB-Tomek -> użytkownik: User-Tomek
New-ADOrganizationalUnit -Name "Test-YourName" -Path "DC=AveLab,DC=local"
New-ADOrganizationalUnit -Name "TestSUB-YourName" -Path "OU=Test-YourName,DC=AveLab,DC=local"
New-ADGroup -Name 'Grupa-YourName' -GroupScope DomainLocal -Path "OU=Test-YourName,DC=AveLab,DC=local"
New-ADuser -Name 'User-YourName' -Path "OU=TestSUB-YourName,OU=Test-YourName,DC=AveLab,DC=local"
PS1.155
Wykonaj poniższe polecenia:
- przypisz do zmiennej
$serverslistę serwerów znajdujących się w AD - wyświetl zawartość zmiennej
$servers
$servers = Get-ADComputer -SearchBase $serversOuPath -Filter * |
Select-Object -ExpandProperty Name
$servers
Pliki i foldery
PS1.156
Wykonaj poniższe polecenia:
- utwórz nowy katalog na dysku C:\ o nazwie cwiczenia
- w katalogu Cwiczenia na dysku C:\ utwórz nowy plik o nazwie drukarki.txt
- wyświetl zainstalowane na komputerze drukarki i zapisz informację w utworzonym wcześniej pliku o nazwie drukarki.txt
New-Item -Path 'C:\Home\Cwiczenia' -ItemType Directory
New-Item -Path 'C:\Home\Cwiczenia\drukarki.txt' -ItemType File
Get-Printer | Out-File -FilePath C:\Home\Cwiczenia\drukarki.txt
PS1.157
Wykonaj poniższe polecenia:
- do zmiennej o nazwie printers przypisz informacje o zainstalowanych na komputerze drukarkach
- informacje ze zmiennej printers zapisz na dysku C:\ w pliku o nazwie printers.txt
$printers = Get-Printer | Out-File -FilePath C:\Home\Cwiczenia\printers.txt
PS1.158
Wykonaj poniższe polecenia:
- utwórz na dysku C:\ plik o nazwie services.csv
- wyświetl Nazwę i Status wszystkich usług, które posiadają status Running
- zapisz listę usług na dysku C:\ do pliku o nazwie services.csv
New-Item C:\Home\PowerShell\services.csv
Get-Service |
Where-Object {$_.Status -eq 'Running'} |
select Name, Status |
Export-Csv -Path c:\Home\services.csv
PS1.159
Skopiuj plik o nazwie services.csv z katalogu C:\Home do katalogu C:\Home\Cwiczenia
Copy-Item 'C:\Home\services.csv' -Destination 'C:\Home\Cwiczenia\services.csv'
PS1.160
Przekopiuj katalog o nazwie Uslugi razem z podkatalogami z katalogu C:\home do katalogu C:\Home\Cwiczenia
Copy-Item 'C:\Home\Uslugi' -Destination 'C:\Home\Cwiczenia' -Recurse
PS1.161
Przekopiuj wszystkie pliki tekstowe z katalogu C:\Home\Pliki do katalogu C:\Home\Nowe. Katalog o nazwie "Nowe" nie istnieje.
Copy-Item -Filter *.txt -Path 'C:\Home\Pliki' -Destination 'C:\Home\Nowe' -Recurse
PS1.162
Wykonaj poniższe polecenia:
- usuń katalog o nazwie Nowe
- przenieś katalog o nazwie Skroty do katalogu Cwiczenia
- sprawdź, czy plik o nazwie polecenia_ps.txt znajduje się w katalogu C:\Home
- przenieś plik o nazwie polecenia_ps.txt z katalogu C:\Home do katalogu C:\Home\Cwiczenia
Remove-Item 'C:\Home\Nowe' -Recurse
Move-Item C:\Home\Skroty C:\Home\Cwiczenia
Test-Path C:\Home\polecenia_ps.txt
Move-Item C:\Home\polecenia_ps.txt C:\Home\Cwiczenia
PS1.163
Zmień nazwę pliku "drukarki.txt" na "printers.txt". Plik znajduje się w katalogu C:\Home\PowerShell
Rename-Item C:\Home\PowerShell\drukarki.txt printers.txt
PS1.164
Zmień nazwy wszystkich plików tekstowych w katalogu C:\Home\PowerShell\reports. Do nazwy każdego pliku dodaj słowo "report"
Get-ChildItem C:\Home\PowerShell\reports *.txt |
Rename-Item -NewName {$_.BaseName + "-report.txt"} -PassThru |
Select-Object -First 5 -Wait
PS1.165
Wykonaj poniższe polecenia:
- wybierz usługi, które mają status Running i w nazwie wyświetlanej słowo Windows
- zapisz listę wybranych usług do pliku o nazwie uslugi_windows.txt. Plik uslugi_windows.txt nie istnieje.
Get-Service |
Where-Object {$_.Status -eq "Running" -and $_.DisplayName -like "Windows*"} > C:\Home\PowerShell\uslugi_windows.txt
PS1.166
Wyświetl pliki z katalogu C:\Home\PowerShell i znajdujących się w nim podkatalogów, które mają rozszerzenie .txt i zostały zmodyfikowane 6 marca 2022 lub później.
Get-ChildItem -Path C:\Home\PowerShell -Recurse -Include *.txt |
Where-Object -FilterScript {($_.LastWriteTime -gt '2022-03-06')}
PS1.167
Wykonaj poniższe polecenia:
- z katalogu o nazwie Backup (ścieżka dostępu C:\Home\PowerShell\Backup) oraz z jego podkatalogów usuń wszystkie pliki, które były modyfikowane trzy dni temu lub później
- zapisz informację o usuniętych plikach w pliku o nazwie deleted_files.txt
$Folder = "C:\Home\PowerShell\Backup"
Get-ChildItem $Folder -Recurse -Force -ea 0 |
? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-3)} |
ForEach-Object {
$_ | del -Force
$_.FullName | Out-File C:\Home\PowerShell\deleted_files.txt -Append
}
PS1.168
Wykonaj poniższe polecenia:
- wyświetl 5 pierwszych plików z folderu
- wyświetl 5 ostatnich plików z folderu
- wyświetl 5 procesów, które zużywają najwięcej pamięci
- wyświetl sumę wszystkich plików w bieżącym katalogu i zwróć pojedynczą liczbę
Get-ChildItem | Select-Object -First 5
Get-ChildItem | Select-Object -Last 5
Get-Process | Sort-Object -property WS | Select-Object -Last 5
Get-ChildItem | Measure-Object -property length -sum | Select-Object -expand sum
PS1.169
Wykonaj poniższe polecenia:
- wyświetl listę plików w bieżącym katalogu i posortuj je w kolejności domyślnej (alfabetycznie według nazwy)
- wyświetl listę plików w bieżącym katalogu i posortuj je według daty/godziny
- wyświetl usługi na komputerze posortowane według stanu, a następnie według wyświetlanej nazwy usługi
Get-ChildItem | Sort-Object
Get-ChildItem | Sort -Property LastWriteTime
Get-Service | Sort-Object -Property Status, DisplayName
PS1.170
Wyświetl listę plików w bieżącym katalogu i posortuj je w kolejności malejącej według przedziału czasu między CreationTime a LastWriteTime
Get-ChildItem *.* |
Sort @{Expression={$_.LastWriteTime-$_.CreationTime}; Ascending=$false} |
Select-Object LastWriteTime, CreationTime
Get-ChildItem $Folder |
Sort {$_.LastWriteTime-$_.CreationTime} |
Select-Object LastWriteTime, CreationTime
PS1.171
Napisz polecenie, za pomocą którego:
- wyświetlisz ostatnich 20 błędów i ostrzeżeń z dziennika zdarzeń systemowych i wyślesz je do raportu tekstowego o nazwie report.txt
- sformatujesz wynik w taki sposób, żeby cały tekst był widoczny, a bardzo długie wiersze tekstu żeby były zawijane, a nie ucinane
Get-EventLog -LogName System -EntryType Error,Warning -Newest 20 |
Format-Table -AutoSize -Wrap |
Out-File -FilePath $env:C\report.txt -Width 120
PS1.172
Z pliku o nazwie service_to_stop.txt usuń wszystkie linie zawierające słowo "Windows" i zapisz wynik do pliku tekstowego o nazwie no_Windows.txt
Get-Content 'C:\Home\PowerShell\service_to_stop.txt' |
Where-Object {$_ -notmatch "Windows"} |
Set-Content 'c:\Home\PowerShell\no_Windows.txt'
PS1.173
Wykonaj poniższe polecenia:
- do zmiennej o nazwie
$pathprzypisz plik service.txt - skopiuj plik service.txt i dla skopiowanego pliku zmień rozszerzenie z .txt na .bak
$path = 'C:\Home\PowerShell\service.txt'
Copy-Item -Path $path -Destination ([io.path]::ChangeExtension($path, '.bak'))
PS1.174
Z pliku o nazwie dyski.txt wyświetl wszystkie wiersze z wyjątkiem pierwszego.
Get-Content C:\Home\PowerShell\dyski.txt | select-object -skip 1
PS1.175
Napisz polecenie, za pomocą którego posortujesz pliki tekstowe w katalogu C:\Home\PowerShell w kolejności malejącej według przedziału czasu między CreationTime i LastWriteTime.
Get-ChildItem -Path C:\Home\PowerShell\*.txt |
Sort-Object -Property {$_.CreationTime - $_.LastWriteTime} |
Format-Table CreationTime, LastWriteTime, FullName
Pliki csv
PS1.176
Wykonaj poniższe polecenia:
- do zmiennej
$Userszaimportuj plik .csv o nazwie users_ave.csv - wyświetl zmienną
$User
$Users = Import-CSV 'C:\Home\PowerShell\users_ave.csv' -Encoding Default
$Users
PS1.177
Wykonaj poniższe polecenia:
- znajdź pierwsze dwa uruchomione procesy i przekaż wygenerowane obiekty
do polecenia cmdlet
Export-Csv - umieść wynik w pliku CSV o nazwie procesy.csv i zapisz plik CSV na dysku C:\
Get-Process | Select-Object -First 2 | Export-CSV -Path "$env:C:\Home\procesy.csv"
PS1.178
Wykonaj poniższe polecenia:
- do zmiennej o nazwie
$Service1przypisz usługi, które w nazwie mają dns - do zmiennej o nazwie
$Service2przypisz usługi, które uruchamiane sa manualnie - wyeksportuj informacje zawarte w zmiennej
$Service1do pliku Services.csv. Plik Services.csv nie istnieje. - dodaj informacje ze zmiennej
$Service2do pliku Services.csv
$Service1 = Get-Service | Where-Object {$_.Name -like "*dns*"}
$Service2 = Get-Service | Where-Object {$_.StartType -eq "Manual"}
$Service1 | Export-CSV -Path 'C:\Home\PowerShell\Services.csv' -NoTypeInformation
$Service2 | Export-CSV -Path 'C:\Home\PowerShell\Services.csv' -NoTypeInformation -App
PS1.179
Wykonaj poniższe polecenia:
- zmień nazwę pliku service_01_2018.txt na service_01_2019.txt
- zmień rozszerzenie pliku service_01_2019.txt na service_01_2019.csv
Rename-Item -Path "c:\Home\PowerShell\service_01_2018.txt" -NewName "service_01_2019.txt"
PS1.180
Stwórz plik Uslugi.csv z listą uruchomionych usług systemowych:
"ServiceName","Status"
"AarSvc_6ce09","Stopped"
"AJRouter","Stopped"
"ALG","Stopped"
"ApHidMonitorService","Running"
"AppIDSvc","Stopped"
"Appinfo","Running"
Get-Service | Get-Member
Get-Service |
Select-Object ServiceName, Status |
Export-Csv -Path Uslugi.csv -NoTypeInformation
PS1.181
Wczytaj plik Uslugi.csv z listą usług. Wybierz tylko usługi uruchomione Running, wyświetl tylko nazwę usługi (bez statusu).
ServiceName
-----------
ApHidMonitorService
Appinfo
AudioEndpointBuilder
Audiosrv
AzureAttestService
Import-Csv -Path Uslugi.csv | Get-Member
Import-Csv -Path Uslugi.csv |
where { $_.status -eq "Running" } |
Select-Object ServiceName
PS1.182
Utwórz tablicę z nazwami komputerów:
Mambo7, Mambo10, Mambo19.
Użyj Test-Connection.
Wygeneruj plik csv ze statusem komputerów:
"nazwa","aktywny"
"Mambo7","nie"
"Mambo10","tak"
"Mambo19","nie"
$comps = @( 'Mambo7', 'Mambo10', 'Mambo19' )
$stany = [System.Collections.ArrayList]@()
foreach ($c in $comps) {
$status = 'nie'
if (Test-Connection -ComputerName $c -Count 1 -Quiet) {
$status = 'tak'
}
$item = [pscustomobject]@{
nazwa = $c
aktywny = $status
}
$stany.add($item )
}
$stany | Export-Csv -Path Status.csv -NoTypeInformation
Dodatkowe zadania
PS1.183
Przeanalizuj co robi ten skrypt: