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-Printer korzystają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-Process
    • Get-Service
    • Get-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-ExecutionPolicy
    • Set-ExecutionPolicy unrestricted
    • Set-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-Counter z 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ę ArrayList i 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 $ConfirmPreference na Low (możliwe: Low, Medium, High)
  • sprawdź wartość zmiennej $ConfirmPreference po 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 Cmdlet lub Alias
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-Object do 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 komenda Start-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 gci wyś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 -Property polecenia Format-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 For ma 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 $profile jako wskaźnika dla profilu dla bieżącego użytkownika. Zastosuj przełącznik -Force, aby uniknąć monitowania o kontynuację. Wyspecyfikuj parametr ItemType jako 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, ISEProfile i 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 -Path podajemy Production
    • parametr -GroupScope podajemy Global
  • 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 $servers listę 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 $path przypisz 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 $Users zaimportuj 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 $Service1 przypisz usługi, które w nazwie mają dns
  • do zmiennej o nazwie $Service2 przypisz usługi, które uruchamiane sa manualnie
  • wyeksportuj informacje zawarte w zmiennej $Service1 do pliku Services.csv. Plik Services.csv nie istnieje.
  • dodaj informacje ze zmiennej $Service2 do 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: