0 Windows – PowerShell, zarządzanie systemem
Tomasz Zaworski edited this page 2020-11-15 02:28:24 +01:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PowerShell (PS) to powłoka interpretująca polecenia stworzona w 2006 roku jako następca cmd.exe (wcześniej z DOS command.com). Jednym z celów postawionych przez Microsoft dla wszystkich produktów serwerowych było umożliwienie przeprowadzania wszelkich zadań administracyjnych z wykorzystaniem właśnie PowerShell.

Cmdlet-y i obiekty

PowerShell pozwala na uruchamianie cmdlet-ów (z ang. command-let), tzn. komend (wbudowanych lub dodanych przez doinstalowane oprogramowanie), których nazwy składają się z dwóch słów formatu Czasownik-Rzeczownik, dzięki czemu w sposób intuicyjny możemy zapamiętać co dana komenda robi. Np. Get-Command listuje wszystkie dostępne komendy w PS. W odróżnienia od powłok ze świata Linux, PowerShell nie operuje na strumieniach danych, ale na obiektach. Każdy wykonany cmdlet zwraca obiekt. W przypadku braku zdefiniowanych działań na obiekcie, zostanie on wyświetlony na ekranie (niekoniecznie wszystkie jego atrybuty).

Podstawowe cmdlet-y

PS cmdlet Aliasy Opis
Get-Location pwd wyświetla katalog bieżący
Set-Location cd zmienia katalog bieżący
Get-ChildItem ls, dir wyświetla zawartość katalogu
Get-Content gc, cat wyświetla zawartość pliku
Copy-Item cp, copy kopiuje pliki lub katalogi
Remove-Item rm, rmdir, del usuwa plik lub katalog
Write-Output echo wyświetla tekst na konsolę
Get-Process ps wypisuje na ekran listę uruchomionych procesów
Get-Help man, help wyświetla pomoc na zadany temat lub dla podanego cmdlet
Get-Command wyświetla listę dostępnych cmdlet w PS
Select-Object select wybiera obiekty lub właściwości obiektu
Where-Object where wybiera obiekty z kolekcji na podstawie wartości ich właściwości

Potoki

W sposób analogiczny do powłoki z Linux, korzystając ze znaku |, PS umożliwia łączenie cmdlet-ów w potoki. W przypadku gdy komenda poprzedzająca ten znak zwróci na wyjściu więcej niż jeden obiekt, komenda występująca po tym znaku zostanie wykonana osobno dla każdego otrzymanego na wejściu obiektu.

Przykładowe wykorzystanie

Przykład 1

Wyświetlenie pomocy dla polecenia Set-Location:

PS C:\Users\Administrator> Get-Help Set-Location

NAME
    Set-Location

SYNOPSIS
    Sets the current working location to a specified location.
(...)

lub

PS C:\Users\Administrator> Set-Location -?

NAME
    Set-Location

SYNOPSIS
    Sets the current working location to a specified location.
(...)
Przykład 2

Uzyskanie pomocy dla polecenia select (alias dla Select-Object) na stronie internetowej:

PS C:\Users\Administrator> Get-Help select -Online
Przykład 3

Utworzenie zmiennej i jej wyświetlenie (PS w przypadku gdy nie wie co zrobić z poleceniem lub zmienną wykonuje domyślną metodę konwertującą ToString):

PS C:\Users\Administrator> $test="Ala ma kota"
PS C:\Users\Administrator> $test
Ala ma kota
Przykład 4

Wyświetlenie pierwszych 10 komend dostępnych w pomocy:

PS C:\Users\Administrator> get-help * | select -first 10

Name                              Category  Module                    Synopsis
----                              --------  ------                    --------
foreach                           Alias                               ForEach-Object
%                                 Alias                               ForEach-Object
where                             Alias                               Where-Object
?                                 Alias                               Where-Object
ac                                Alias                               Add-Content
clc                               Alias                               Clear-Content
cli                               Alias                               Clear-Item
clp                               Alias                               Clear-ItemProperty
clv                               Alias                               Clear-Variable
compare                           Alias                               Compare-Object
Przykład 5

Wyświetlenie wszystkich procesów wykorzystujących więcej niż 800MB pamięci operacyjnej:

PS C:\Users\Administrator> Get-Process | Where-Object { $_.WS -gt 80000000 }

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    757      39   194524     181188              1320   0 ekrn
   2663     117    95380     132420     361,77   6252   1 explorer
   1729     377  1458104    1199772   9 720,64  11988   1 firefox
      0       0     2100     772440              3916   0 Memory Compression
   2313      84   131856     105320     729,16   9892   1 opera
    884      66    69996     113268       2,31   2136   1 SearchUI
   3589      90    79056     105952      18,39   5904   1 ShellExperienceHost
   1063      65    82504      81168     253,95   7028   1 slack
    394      44   150784     119948      98,03  10364   1 slack
    798      45    35088      85592       3,66   2236   1 WINWORD
Przykład 6

Wyświetlenie wszystkich komend rozpoczynających się od słowa Wait:

PS C:\Users\Administrator> Get-Command Wait*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Wait-Debugger                                      3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Wait-Event                                         3.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Wait-Job                                           3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Wait-Process                                       3.1.0.0    Microsoft.PowerShell.Management
Application     waitfor.exe                                        10.0.14... C:\windows\system32\waitfor.exe
Przykład 7

Wyświetlenie wszystkich procesów, które wykorzystywały procesor przez więcej niż 400 sekund:

PS C:\Users\Administrator> Get-Process | Where-Object { $_.CPU -gt 400 }

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
   1630     357  1333140    1190516   7 075,08  11988   1 firefox
    729      44    96040      79788   1 004,16   3584   1 opera
   2385      89   129476     131816     571,97   9892   1 opera
    411      40   115936      56156     834,63  11668   1 opera
   2063     165   704004     521828   3 318,75   7244   1 thunderbird

Ciekawostki

  • Skrót klawiaturowy Ctrl-L czyszczący konsolę.
  • Klawisz Tab włącza autouzupełnianie poleceń i parametrów.
  • Cmdlet-y są rozszerzeniem klas cmdlet lub pscmdlet z .Net, które przykrywają metody BeginProcessing(), ProcessRecord() oraz EndProcessing(), wykonywanych odpowiednio przy uruchomieniu, przetwarzaniu kolejnych obiektów i zakończeniu działania polecenia.

Zadania do wykonania podczas zajęć

  1. Uruchom PowerShella.
  2. Wyświetl bieżący katalogu roboczy.
  3. Przejdź do katalogu C:\
  4. Przejdź do katalogu domowego.
  5. Sprawdź jakiemu poleceniu jest przypisany alias polecenia ls.
  6. Wyświetl zawartość bieżącego katalogu.
  7. Zapoznaj się z pomocą polecenia Get-ChildItem.
  8. Wyświetl zawartość bieżącego katalogu, uwzględniając tylko pliki.
  9. Wyświetl zawartość bieżącego katalogu, uwzględniając tylko katalogi.
  10. Wyświetl zawartość bieżącego katalogu, uwzględniając tylko ukryte katalogu.
  11. Wyświetl wszystkie partycje, dyski i udziały sieciowe.
  12. Zmień katalog bieżący na dysk J:
  13. Wyświetl zawartość katalogu bieżącego.
  14. Wyświetl w terminalu swój numer indeksu.
  15. Wyświetl w terminalu swój numer indeksu w kolorze czerwonym.
  16. Wyświetl napis hello, a po 5 sekundach napis world.
  17. Zapisz swój numer indeksu w pliku student.txt
  18. Wyświetl zawartość pliku student.txt
  19. Jednym poleceniem dodaj do pliku student.txt w kolejnych liniach swoje imię i nazwisko.
  20. Wyświetl zawartość pliku student.txt
  21. Otwórz plik student.txt w Notatniku (uruchom z poziomu PS).
  22. Zamknij Notatnik i stwórz nowy plik student.txt, w którym końce linii będą oznaczone poprzez kombinację CRLF.
  23. Wyświetl zawartość pliku student.txt
  24. Otwórz plik student.txt w Notatniku (uruchom z poziomu PS).
  25. Zamknij Notatnik i sprawdź ile słów zawiera plik student.txt
  26. Utwórz katalog zajecia-ps
  27. Skopiuj plik student.txt do katalogu zajecia-ps
  28. Skopiuj katalog zajecia-ps wraz z jego zawartością do katalogu zajecia-ps-kopia
  29. Wyświetl zawartość katalogu zajecia-ps-kopia
  30. Zmień nazwę katalogu zajecia-ps-kopia na do-usuniecia
  31. Usuń katalog do-usuniecia
  32. Wyświetl listę wszystkich uruchomionych programów.
  33. Wyświetl listę wszystkich procesów w odwrotnym porządku alfabetycznym posortowaną po nazwach.
  34. Wyświetl listę wszystkich usług.
  35. Wyświetl listę wszystkich komend PS, które zawierają rzeczownik Service
  36. Zapisz listę wszystkich uruchomionych programów do pliku procesy.txt
  37. Wyświetl pierwsze 10 linii pliku procesy.txt
  38. Wyświetl ostatnie 10 linii pliku procesy.txt
  39. Wyświetl zawartość pliku procesy.txt przy pomocy programu more
  40. Wyświetl listę procesów, które nazywają się svchost
  41. Wyświetl tylko te wiersze pliku procesy.txt, które zawierają napis svc
  42. Zapisz w zmiennych $imie i $nazwisko swoje imię i nazwisko.
  43. Zapisz zawartość zmiennej $nazwisko w pliku nazwisko.txt
  44. Sprawdź ile czasu zajmuje wykonanie cmdlet-u Get-Process
  45. Zapisz historię poleceń w pliku lab-ps.txt

Materiały dodatkowe

Zadanie do wykonania w domu

Wykonaj Zadanie domowe nr 1 z drugi zajęć z Linuxa, a polecenia PS zapisz w pliku o rozszerzeniu .ps1

Jeżeli pracujesz na własnym komputerze, to pamiętaj aby włączyć uruchamianie skryptów PowerShella.


Źródło 1

Źródło 2