windows powershell -...

95
Windows Windows PowerShell PowerShell Remigiusz Górecki Krzysztof Boryczko

Upload: duonghanh

Post on 22-Aug-2019

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Windows Windows PowerShellPowerShell

Remigiusz Górecki

Krzysztof Boryczko

Page 2: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Czym jest Czym jest PowerShellPowerShell ??

Windows PowerShell (WPS) to oparte

na platformie .NET środowisko

przeznaczone do zarządzania

systemem operacyjnym z poziomu

konsoli oraz automatyzowania zadań

administracyjnych przy użyciu

skryptów.

Page 3: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Cechy środowiskaCechy środowiska

Zbiór poleceń zaimplementowanych jako aplety poleceń (commandlet).

Zapewnia dostęp do wszystkich obiektów systemowych i aplikacji bibliotek Component Object Model (COM), platformy .NET Framework i interfejsu Windows Management Instrumentation(WMI).

Zapewnia efektywne interakcje między apletami poleceń, dzięki przetwarzaniu potokowemu opartemu na obiektach (interpretery uniksowe pracują na tekście)

Page 4: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Cechy środowiska Cechy środowiska -- cdcd

Posiada jednolity sposób dostępu do różnych repozytoriów danych, zarówno hierarchicznych (AD, system plików), jak i płaskich (zmienne środowiskowe).

Język skryptowy jest intuicyjny, łatwy do nauczenia. Umożliwia kontrolę błędów na różnych poziomach.

Zastosowany model zabezpieczeń pozwala blokować uruchamianie niepożądanych skryptów.

Posiada możliwość śledzenia wykonania i debugowania.

Możliwy do zintegrowania z dowolną aplikacją.

Page 5: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

HistoriaHistoria

Powstał w trakcie prac nad Windows Server 2003 – chodziło o zastąpienie DOS-owego okna wiersza poleceń.

Środowisko WSH (Windows ScriptingHost) było trudne w użyciu, wymagało dobrej znajomości zasad programowania obiektowego oraz niespójności i wyjątków modelu COM.

2002 - Premiera .NET Framework. X.2003 – premiera nowej powłoki o

roboczej nazwie Monad. V.2006 – premiera wersji 1.0 PowerShell.

Page 6: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

InstalacjaInstalacja

Windows Server 2008R2 jest pierwszym, do którego włączono WPS.

Dostępne dla:◦ Windows XP – z Service Pack 2,

◦ Windows Server 2003 – z Service Pack 1,

◦ Windows Vista,

◦ Windows 2008

◦ Windows 7.

Wymaga wcześniejszego zainstalowania .NET Framework w wersji co najmniej 2.0 z SP2.

Wersja 2.0 WPS wyposażona została w edytor i debuger.

Rozszerzenia PoweShell Community Extensions(PSCX) dostępne na stronie: www.codeplex.com/PowerShellCX

Alternatywny edytor PowerShellPlus dostępny na stronie: www.powershell.com

Page 7: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

WPS w trybie interaktywnymWPS w trybie interaktywnym

Uruchomienie konsoli i wydawanie

poleceń z linii komend.

Page 8: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

WPS w trybie wykonywania WPS w trybie wykonywania

skryptówskryptów Skrypt PowerShella to plik tekstowy w

języku Powershell Script Language

(PSL).

Skrypt zawiera deklaracje zzmiennych

oraz wywołania apletów.

Page 9: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

PowerShellPowerShell ISEISE

Page 10: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Podstawy apletów poleceńPodstawy apletów poleceń

Standardowe polecenie WPS to aplet polecenia(commandlet, cmdlet) lub funkcja.

Aplety są wykonywane zawsze w obrębie głównego procesu WPS.

Na wywołanie apletu składają się najczęściej trzy elementy:1. czasownik,

2. rzeczownik (w liczbie pojedynczej),

3. lista parametrów (opcjonalna).

Czasownik i rzeczownik są połączone znakiem - , a kolejne parametry oddzielone spacją.

Wielkość liter nie ma znaczenia.

Przykład:

PS C:\ > Get-Process i*

Page 11: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Parametry wywołania apletu (1)Parametry wywołania apletu (1)

Są traktowane jako ciągi znakowe,

niezależnie od tego, czy są ujęte w

cudzysłów, czy nie.

Znaki cudzysłowu są opcjonalne poza

sytuacją, gdy parametr zawiera znak

spacji:

PS C:\> Get-ChildItem ”C:\Program Files”

Page 12: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Parametry wywołania apletu (2)Parametry wywołania apletu (2)

Jeżeli aplet polecenia posiada więcej

niż jeden parametr, można je podawać

w ściśle określonej kolejności lub

posłużyć się nazwami. Poniższe

polecenia mają identyczne działanie:

PS C:\> Get-ChildItem c:\temp *.doc

PS C:\> Get-ChildItem –Path c:\temp –Filter *.doc

PS C:\> Get-ChildItem –Filter *.doc –Path c:\temp

Page 13: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

PrzełącznikiPrzełączniki

Przełączniki to parametry nie

posiadające wartości.

Samo użycie nazwy takiego

parametru aktywuje odpowiednią

funkcję.

Przykładowo, rekurencyjne

przetwarzanie pliku danych zapewnia

przełącznik –recurse:

PS C:\> Get-ChildItem C:\temp -recurse

Page 14: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Parametry określone wyrażeniamiParametry określone wyrażeniami

Wartość parametru może być

wynikiem obliczenia wartości

wyrażenia:

W treści parametrów można korzystać

z symboli wieloznacznych:

PS C:\> Get-ChildItem (”C:\” + ”temp”) *.dll –recurse

PS C:\> Get-Process –id (2800 + 100)

PS C:\> Get-Service –exclude ” [k-z]*”

Page 15: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Tryby przetwarzania WPSTryby przetwarzania WPS

Tryb poleceń (normalny) – wszystkie dane wejściowe są traktowane jako ciągi znakowe:

Tryb wyrażeń – umożliwia rozpoznawanie liczb i wyrażeń:

Tryby można łączyć.

Wyrażenie można włączyć do polecenia stosując znaki nawiasów.

”Hello ”+ ” ” + ”World”

Write-Output 10* (8 + 6)

Page 16: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Polecenia z wyrażeniami (1)Polecenia z wyrażeniami (1)

Przykład Znaczenie

2+3 Wyrażenie. PowerShell wykonuje

obliczenie i zwraca liczbę 5.

echo 2+3 To jest wyłącznie polecenie. 2+3 jest

interpretowane jako ciąg znakowy

wypisywany na ekranie.

echo (2+3) Polecenie, które zawiera wyrażenie.

Powoduje wypisanie liczby 5.

2+3 | echo To jest potok, którego pierwszy

stopień to wyrażenie. Wynik

wyrażenia zostaje przekazany do

drugiego stopnia potoku i na ekranie

zostaje wyświetlona liczba 5.

Page 17: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Polecenia z wyrażeniami (2)Polecenia z wyrażeniami (2)

Przykład Znaczenie

echo 2+3 | 7+6 To jest niepoprawna konstrukcja.

Wyrażenie może zostać użyte wyłącznie

jako pierwszy stopień potoku.

$a = Get-Process To jest wyrażenie, które zawiera

polecenia. Wynik zwracany przez Get-

Process zostaje przekazany do zmiennej.

$a | Get-Process To jest potok rozpoczynający się od

wyrażenia. Zawartość zmiennej $a

zostaje przekazana poleceniu Get-

Process jako parametr.

Get-Process | $a To jest niepoprawna konstrukcja.

Wyrażenie może być wyłącznie

pierwszym stopniem potoku.

Page 18: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

AliasyAliasy

Pozwalają skrócić wywołania apletów poleceń.

Polecenie Get-Alias (lub jego alias aliases) pozwala wyświetlić listę predefiniowanych skrótów nazw apletów poleceń.

Listę wszystkich aliasów wybranego apletu (w tym przypadku Get-Process) uzyskamy poleceniem:

Get-Alias | Where-Object { $_.definition -eq ”get-process” }

Page 19: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Tworzenie nowych Tworzenie nowych aliasówaliasów Nowy alias można zdefiniować przy pomocy poleceń:

◦ New-Alias – tworzy nowy alias lub zwraca informację o błędzie, jeśli alias o podanej nazwie już istnieje.

◦ Set-Alias – definiuje nowy alias, a jeżeli dana nazwa została już wykorzystana, zastępuje starą definicję nową.

Parametr –description pozwala dołączyć do aliasu jego opis.

Aliasy mogą zastępować nazwy apletów poleceń oraz nazwy zwykłych aplikacji.

Definicje aliasów nie mogą obejmować parametrów – w takim wypadku należy użyć funkcji.

Limit aliasów 4096 (wartość zmiennej $MaximumAliasCount– może zostać zmieniona).

Set-Alias procs Get-Process

New-Alias procs Get-Process

Set-Alias np notepad.exe

Function Temp { get-childitem c:\temp }

Page 20: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Polecenia zewnętrznePolecenia zewnętrzne

Wszystkie polecenia, które nie zostaną rozpoznane jako aliasy, nazwy apletów poleceń lub wyrażenia są traktowane jako wywołania aplikacji zewnętrznych.

Umożliwia to wykorzystywanie PowerShella jako tradycyjnej powłoki, pozwalającej uruchamiać aplikacje.

Jeżeli zamiast nazwy polecenia użyta zostanie nazwa pliku, PowerShell korzysta z ustawień zapisanych w Rejestrze Windows, uruchamia domyślną aplikację i otwiera w niej dokument.

Przy interpretowaniu wywołań, WPS przeszukuje nazwy w następującej kolejności:1. aliasy,

2. funkcje,

3. aplety poleceń,

4. polecenia zewnętrzne.

Page 21: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Potoki danychPotoki danych

Aplety można łączyć w kolejne stopnie przetwarzania przy użyciu potoków.

W przeciwieństwie do potoków interpreterów poleceń systemu UNIX, potok PowerShellaprzekazuje obiekty platformy .NET.

Obiektowe przetwarzanie potoków zapewnia niezależność przetwarzania elementów danych od ich położenia w przekazywanym zbiorze informacji.

Get-Process | Where-Object { $_.name –eq ”iexplore” |

Format-Table, Working-Set

Page 22: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Typy obiektówTypy obiektów

Aplet może przekazać do potoku dowolny obiekt .NET oraz liczby i ciągi znakowe.

Standardem jest jednolite traktowanie klasy i typów pierwotnych. Jednak umieszczanie w potoku ciągu znakowego jest wyjątkiem, gdyż dostęp do obiektów daje większe możliwości.

Specyfikę podejścia obiektowego obrazuje praca z liczbami. WorkingSet64 to 64-ro bitowa wartość liczbowa, reprezentująca np. wykorzystanie pamięci przez proces.

Get-Process | Where-Object { $_.WorkingSet64 –gt 20*1024*1024 }

Get-Process | Where-Object { $_.WorkingSet64 –gt 20MB }

ps | ? { $_.ws –gt 20MB }

Page 23: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Wywołania metod (1)Wywołania metod (1)

Obiekty .NET, oprócz właściwości mają

także metody, które można wywoływać w

potoku obiektów. Obiekty klasy

System.Diagnostics.Process mają m.in.

metodę kill().

Możliwe jest bezpośrednie wywoływanie

metody.

Get-Process iexplore | Stop-Process

Get-Process iexplore | Foreach-Object { $_.Kill() }

ps | ? { $_.name –eq ”iexplore” } | % { $_.Kill() }

Page 24: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Wywołania metod (2)Wywołania metod (2)

Poprzedni przykład działa poprawnie do

momentu, w którym w systemie są procesy

Internet Explorera. Jeśli wszystkie zostały

zakończone, to wywołania Get-Process|iexplore generuje błąd. Stąd polecenie:

Filtrowanie realizuje aplet Where-Object. Nie

generuje błędu w przypadku braku obiektów.

Aplet Get-Process ma opcję umożliwiającą

filtrowanie. Stąd postać:

Get-Process | Where-Object { $_.Name –eq ”iexplore” } |

Stop-Process

ps –p ”iexplore” | Kill

Page 25: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Filtrowanie napisówFiltrowanie napisów

Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów znakowych.

Każdy wiersz danych wyjściowych jest obiektem typu System.String.

Ciągi takie można analizować przy użyciu apletu polecenia Select-String, będącego rodzajem filtru przekazującego na wyjście tylko te wiersze, których treść pasuje do podanego wzorca.

Page 26: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Dane wyjścioweDane wyjściowe

Aplet nie powinien formatować danych wyjściowych samodzielnie.

Na ekranie pojawia się wynik działania ostatniego apletu w potoku.

Do formatowania służą aplety:◦ Out-Default – formatowanie standardowe,

zgodne z zapisem w konfiguracji PowerShella.

◦ Out-Host – działa podobnie jak Out-Default, ale pozwala użyć opcji podziału na strony.

◦ Out-Null – powoduje, że dane wyjściowe nie są wyświetlane.

◦ Format-Wide – lista dwukolumnowa.

◦ Format-List – lista szczegółowa.

◦ Format-Table – tabela.

Page 27: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Formatowanie standardoweFormatowanie standardowe

Jeżeli potoku nie kończy wywołanie funkcji formatującej, WPS automatycznie przekazuje dane apletowi Out-Default.

Predefiniowane formatowanie jest zapisane w pliku DotNetTypes.Format.ps1xml, w katalogu instalacyjnym WPS.

Stąd obiekty System.Diagnostics.Process są standardowo wypisywane w 8-miu kolumnach.

Page 28: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Dzielenie na stronyDzielenie na strony

Można wymusić przy użyciu parametru –p

apletu polecenia Out-Host.

Get-Process | Format-List | Out-Host -p

Page 29: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Elementy danych wyjściowychElementy danych wyjściowych

Polecenia formatujące pozwalają

wybierać właściwości do wyświetlania:

Nazwy właściwości można skracać

stosując symbol wieloznaczny *:

Get-Process | Format-Table –p id, processname, workingset

Get-Process | Format-Table –p id, proces*, work*

Page 30: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Wyprowadzanie pojedynczych wartościWyprowadzanie pojedynczych wartości

Aby wyświetlić ciąg znaków lub wartość zmiennej wystarczy wpisać ciąg lub nazwę zmiennej w wierszu poleceń.

Można w tym celu użyć apletów poleceń: Write-Host, Write-Warn i Write-Error.

Dwa ostatnie generują tekst wyróżniony.

Aplet Write-Host pozwala definiować kolor tekstu:

Write-Host ”Hello World” –foregroundcolor red

-backgroundcolor green

Page 31: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Blokowanie wypisywania danych Blokowanie wypisywania danych

wyjściowychwyjściowych Dopóki skrypt lub okno PowerShella mają

dostęp do standardowego wyjścia, wszystkie dane wyjściowe są wypisywane.

Blokowanie jest możliwe na trzy sposoby:

Użycie apletu polecenia Out-Null na końcu potoku:

Zapisanie danych wyjściowych w zmiennej:

Konwersja danych wyjściowych na typ [void]:

ps –p ”iexplore” | Out-Null

procs = ps –p ”iexplore” | Kill

[void] ( ps –p ”iexplore” | Kill )

Page 32: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Inne funkcje danych wyjściowychInne funkcje danych wyjściowych

Aplet polecenia Out-Printer wysyła

dane do drukarki.

Aplet polecenia Out-File zapisuje dane

do pliku.

Get-Process | Out-Printer

Get-Process | Out-Printer ”HP LaserJet PCL6 on E02”

Get-Process | Out-File ”c:\temp\procesy.txt”

Get-Process | Out-File ”c:\temp\procesy.txt” -Append

Page 33: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Interakcje z użytkownikiemInterakcje z użytkownikiem

Tekstowe dane wejściowe można

pobierać poleceniem Read-Host:

Page 34: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Okno Okno InputBoxInputBox Proste okno dialogowe można wyświetlić

funkcją InputBox().

Funkcja jest zdefiniowana w klasie .NET

Framework

Microsoft.VisualBasic.Interaction.

Korzystanie z niej wymaga załadowania

biblioteki Microsoft.VisualBasic.dll.

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")

$input = [Microsoft.VisualBasic.Interaction]::InputBox("Login")

Page 35: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Okno uwierzytelnianiaOkno uwierzytelniania

Wyświetlanie systemowego okna uwierzytelniania użytkownika umożliwia aplet polecenia Get-Credential.

Aplet zwraca obiekt System.Management.Automation.PSCredential.

Obiekt zawiera jawnie zapisaną nazwę użytkownika (właściwość UserName) oraz zakodowane hasło (właściwość Password)

Page 36: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Analiza zawartości potokuAnaliza zawartości potoku

Do tej pory najtrudniejsze było określenie:

1. Typu obiektów, które PowerShell umieszcza w potoku.

2. Określenie właściwości (zmiennych) oraz metod, które posiadają te obiekty.

Standardowy opis apletu nie zawsze zawiera odpowiedź:

W praktyce pomocne są dwa aplety poleceń:

◦ Get-PipelineInfo

◦ Get-Member

Get-Help Get-Service -full

Page 37: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

GetGet--PipelineInfoPipelineInfo

Pozwala uzyskać trzy ważne

informacje o zawartości potoku:

1. Liczba obiektów w potoku (obiekty są

ponumerowane).

2. Typy obiektów w potoku (nazwy klas

.NET).

3. Reprezentacje obiektów w postaci

ciągów znakowych.

Page 38: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Reprezentacja znakowaReprezentacja znakowa

Standardowa reprezentacja znakowa obiektu, to wynik metody ToString()pakietu .NET.

Użyteczność wyniku działania metody zależy od badanej klasy:◦ W przypadku obiektów typu

System.Diagnostics.Process jest to nazwa klasy i nazwa procesu.

◦ Konwersja obiektów System.ServiceProcess.ServiceControllerzwracanych przez aplet Get-Service() jest bezużyteczna, gdyż wynik zawiera wyłącznie nazwę klasy.

Page 39: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

GetGet--MemberMember

Aplet polecenia Get-Member() (alias gm) pozwala wyświetlić nazwy klas obiektów w potoku oraz listy ich właściwości i metod.

Klasa .NET ma następujące elementy składowe:◦ metody (Method),

◦ właściwości (Property),

◦ zbiory właściwości (PropertySet),

◦ właściwości dodatkowe (NoteProperty),

◦ właściwości skryptowe (ScriptProperty),

◦ właściwości programowe (CodeProperty),

◦ właściwości aliasowe (AliasPropert).

Faktycznie tylko elementy Method i Property są składnikami klas .NET. Pozostałe to rozszerzenia dołączane przez WPS.

Page 40: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

MetodyMetody

To powiązana z obiektem operacja. Przykład to metoda Kill() obiektu Process.

W wywołaniach metod nigdy nie można pominąć znaków (). Wywołanie bez nawiasów pozwala pobrać informacje o metodzie, ale nie powoduje jej wywołania.

Metody mogą odczytywać wartości danych, ustawiać je lub wykonywać inne czynności.

Page 41: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

WłaściwościWłaściwości

To element danych, który zawiera informacje o obiekcie lub

pozwala przekazać do niego pewne dane.

Właściwościom towarzyszą zazwyczaj pary metod, np.

get_MaxWorkingSet() i set_Max_workingSet() służące

odpowiednio do odczytywania i modyfikowania właściwości.

Dostęp do danych można uzyskać na 2 sposoby:

Get-Process | Where-Object { $_.name –eq ”iexplore” } |

Foreach-Object { $_.MaxWorkingSet }

Get-Process | Where-Object { $_.name –eq ”iexplore” } |

Foreach-Object { $_.get_MaxWorkingSet() }

Get-Process | Where-Object { $_.name –eq ”iexplore” } |

Foreach-Object { $_.MaxWorkingSet = 1412344}

Get-Process | Where-Object { $_.name –eq ”iexplore” } |

Foreach-Object { $_.set_MaxWorkingSet(1412344) }

Podobnie zapis:

Page 42: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

WłaściwościWłaściwości

Zbiór właściwości – to forma ich grupowania. Np. psResources łączy w całość właściwości związane z wykorzystaniem zasobów.

Definicja w pliku types.ps1xml.

Zapisane w zbiorze dane można odczytać bez podawania poszczególnych właściwości:

Get-Process | SelectObject psResources | Format-Table

Page 43: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Właściwości (2)Właściwości (2) Właściwości dodatkowe – dodatkowe elementy, które nie są

właściwościami .NET ale rozszerzeniami wprowadzonymi przez WPS.

Właściwość skryptowa – to właściwość, której wartość jest wyznaczana, a nie przechowywana w obiekcie.

◦ Nie oznacza to jedynie obliczeń arytmetycznych.

◦ Wyznaczenie może polegać na odczytaniu wartości podobiektu.

◦ Nazwy produktu, do którego należy dany program nie ma w procesie (nie pokaże manager zadań). Jest zapisana w pliku programu.

◦ .NET pozwala na dostęp do tej informacji za pośrednictwem MainModule.FileversionInfo.ProductName.

Get-Process | Select-Object name, Mainmodule.FileVersionInfo.ProductName

Get-Process | Select-Object name, Product

Page 44: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Właściwości (3)Właściwości (3)

Właściwość programowa – jest równoważna skryptowej, ale odpowiadający jej kod nie jest skryptem w języku WPS. Definicje te są zapisane w kodzie .NET.

Właściwość aliasowa – to skrócona nazwa innej właściwości. Nie wyznacza się wartości, a jedynie dokonuje translacji nazwy , np. z WS na WorkingSet.

Są zdefiniowane w pliku types.ps1xml. Są rozszerzeniami wprowadzonymi na

poziomie PowerShella.

Page 45: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Rozszerzony system typów ETSRozszerzony system typów ETS

WPS widzi wiele elementów składowych obiektów, które nie są zdefiniowane w innych klasach. Jednocześnie niektóre elementy dostępne w klasach .NET okazują się niedostępne. Odpowiada za to Extended Type System PowerShella.

Ukrywanie elementów klas wynika z tego, że są one nie przydatne lub mają lepsze odpowiedniki zapewnione przez rozszerzenia.

Rozwiązanie techniczne polega na opakowaniu każdego obiektu umieszczanego przez aplet w potoku obiektem WPS typu PsObject. Implementacja tej klasy decyduje o dostępności dla następnych w potoku apletów i poleceń.

Ostatecznie zbiór elementów składowych obiektu określa się przy użyciu:

◦ Dla niektórych klas zostały określone adaptery obiektów (ManagementObject, DirectoryEntry, DataRow).

◦ Deklaracje w pliku types.ps1xml.

◦ Operacje dodawania elementów składowych obiektów wykonane w trakcie pracy apletów poleceń.

◦ Operacje dodawania elementów składowych obiektów wykonane przez aplet Add-Member.

Page 46: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Filtrowanie obiektówFiltrowanie obiektów

Wynika z potrzeby wybrania do dalszego

przetwarzania pewnego podzbioru obiektów, które

wykonywany aplet przekazuje do potoku.

Kryterium selekcji może być warunek (np. obiekty o

odpowiedniej nazwie) lub pozycja (np. pięć

pierwszych).

Operację filtrowania w oparciu o warunek realizuje

aplet polecenia Where-Object:

Do filtrowania w oparciu o kolejność służy aplet

Select-Object w połączeniu z Sort-Object:

Get-Process | Where-Object { $_.ws –gt 1048576 }

Get-Process | Sort-Object ws –desc | Where-Object –last 5

Page 47: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Operatory porównaniaOperatory porównania

Porównanie z

rozróżnianiem

wielkości liter

Porównanie bez

rozróżniania

wielkości liter

Znaczenie

-lt -ilt Mniejsze niż

-le -ile Mniejsze lub równe

-gt -igt Większe niż

-ge -ige Większe lub równe

-eq -ieq Równe

-ne -ine Różne

-like -ilike Podobieństwo ciągu

-notlike -inotlike Brak podobieństwa ciągu

-match Dopasowanie do wzorca

(wyrażenia regularne)

-notmatch Brak dopasowania do wzorca

-is Dopasowanie typu

Page 48: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Operatory logiczneOperatory logiczne

Opertator Znaczenie

-not lub ! Negacja

-and Koniunkcja

-or Alternatywa

Get-Process | Where-Object { $_.ws –gt 1048576 –and $_.name –eq ”firefox” }

Get-Process | Where-Object { $_.DisplayName –match ”^\w* \w*$” }

Page 49: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Agregacja zawartości potokuAgregacja zawartości potoku

Obiekty w potoku mogą mieć różne typy. Przykładowo, polecenie Get-ChildItemwykonane na systemie plików, przekazuje do potoku obiekty FileInfo i DirectoryInfo.

Można też połączyć dwa polecenia, które wysyłają obiekty różnych typów do potoku:

Operacja taka ma sens tylko wtedy, gdy kolejne polecenia potoku są w stanie wykonać operacje na obiektach różnych typów. W innym przypadku typ pierwszego obiektu może warunkować sposób przetwarzania całego potoku.

$( Get-Process ; Get-Service )

$( Get-Process i* ; Get-Service i* ) | Get-PipelineInfo

Page 50: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Przycinanie obiektówPrzycinanie obiektów

Przekazywane obiekty często zawierają wiele niepotrzebnych elementów składowych.

Odpowiednie ich odfiltrowanie pozwala zmniejszyć wykorzystanie zasobów i zwiększyć przejrzystość danych wyjściowych.

Operację pozwala przeprowadzić aplet Select-Object:

Operacja przycięcia może mieć skutki uboczne:◦ Brak właściwej nazwy klasy.

◦ Elementy składowe zostają przekształcone we właściwości dodatkowe.

Get-Process | Select-Object ProcessName, get_minWorkingSet, ws | Get-Member

Page 51: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Sortowanie obiektówSortowanie obiektów

Do sortowania obiektów służy aplet polcenia Sort-Object.

Standardowy porządek jest rosnący. Zmiana kolejności sortowania przełącznikiem –desc:

Domyślnie sortowanie po pierwszej własności. Zmiana przy pomocy przełącznika –property:

Get-Process | Sort-Object -desc

Get-process | select-object id, pm, name | sort –desc –property id

Page 52: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Grupowanie obiektówGrupowanie obiektów

Grupowanie obiektów w potoku wg

wskazanej właściwości realizuje aplet

Group-object :

Jeżeli jedynym celem jest

wyświetlenie grup i zliczanie obiektów

nie jest potrzebne, można użyć

wywołania Select-Object z

parametrem –unique :

Get-Service | group-Object status

Get-ChildItem | Select-Object extension -Unique

Page 53: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

ObliczeniaObliczenia

Na obiektach potoku obliczenia wykonuje aplet Measure-Object.

Możliwe są: określenie liczności, znalezienie wartości minimalnej lub maksymalnej, sumy, średniej.

Wymagane jest określenie nazwy właściwości, na której będzie wykonywana wskazana operacja.

Get-ChildItem | Measure-object –Property length –min –max –average -sum

Page 54: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Wartości pośrednieWartości pośrednie

Polecenie potokowe może mieć praktycznie dowolną długość. Można je jednak podzielić na fragmenty.

Do przenoszenia zawartości potoku między kolejnymi poleceniami służą zmienne.

Zmienne w WPS wyróżnia zawsze znak $ na początku nazwy.

Usuwanie wartości zmiennej realizuje aplet Clear-Variable. Pobiera nazwę zmiennej bez znaku $.

Get-Process | Where-Object { $_.name –eq ”firefox” } |

ForEach-Object { $_.ws }

$x = Get-Process

$y = $x | Where-Object { $_.name –eq ”firefox” }

$y | ForEach-Object { $_.ws }

Page 55: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Porównywanie obiektówPorównywanie obiektów

Aplet Compare-Object pozwala

porównać zawartość dwóch potoków.

$przed = Get-Process

cmd

$po = Get-Process

Compare-Object $przed $po

Page 56: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

RozgałęzieniaRozgałęzienia

Są wykorzystywane, jeśli wyniki pracy apletu mają zostać przekazane dalej w potoku oraz zapisane do zmiennej lub pliku.

Zostały zaimplementowane w aplecie Tee-Object.

Nazwę zmiennej podaje się po przełączniku –var i bez znaku $.

Podanie ścieżki dostępu do pliku wymaga użycia przełącznika –filepath.

Get-Service | Tee-Object –var a | Where-Object { $_.Status

–eq ”Running” } | Tee-Object –filepath c:\tmp\uslugi.txt

Page 57: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Uniwersalny model nawigacjiUniwersalny model nawigacji

PowerShell implementuje niezależny od repozytorium model nawigacji. Podstawowe repozytoria to:◦ Zmienne środowiskowe (env).

◦ Klucze Rejestru Windows (HKCU, HKCL).

◦ Magazyn certyfikatów (cert).

◦ Aliasy (alias), zmienne (Variable) i funkcje PowerShell (function).

Aplet Get-ChildItem pracuje na każdym z repozytoriów.

Page 58: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Rejestr systemu WindowsRejestr systemu Windows

Praca z rejestrem nie różni się od pracy z systemem plików.

Przejście do klucza HKEY_LOCAL_MACHINE\Software:

Lista podkluczy klucza bieżącego:

Tworzenie podklucza o nazwie IT-Vision:

Tworzenie podklucza z zawartością standardową:

cd hklm:\software

Set-Location hklm:\software

Dir

Get-ChildItem

md IT-Vision

New-Item –name ”Witryna” –value ”www.wszib.edu.pl” –type string

Page 59: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Dostawcy danych i dyskiDostawcy danych i dyski

Aplet Get-PSDrive wypisuje listę „dostawców danych”.

Każdy z dostawców zapewnia ujednolicony dostęp metodami Get, Set, New, Remove.

WPS jest wyposażony w dostęp do:◦ Systemu plików.

◦ Rejestru systemu.

◦ Zmiennych środowiskowych.

◦ Magazynu certyfikatów.

◦ Funkcji PowerShella.

◦ Zmiennych PowerShela.

◦ Aliasów PowerShela.

Page 60: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Aplety poleceń do nawigacji w Aplety poleceń do nawigacji w

repozytoriach danychrepozytoriach danych

Aplet polecenia Aliasy Opis

Get-ChildItem dir, ls Lista obiektów podrzędnych

Get-Cwd cd, pwd Zmiana katalogu bieżącego

Get-Content type, cat Wywołanie zawartości elementu

New-Item mkdir Tworzenie elementu (gałęzi lub

liścia)

Get-Location Informacja o katalogu bieżącym

Set-Location cd Zmiana katalogu bieżącego

Get-Content c:\tmp\pamm.c

Page 61: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

ŚcieżkiŚcieżki

Podstawowe symbole stosowane w

zapisie ścieżek dostępu do obiektów:

. .. ~

Aplet Test-Path sprawdza, czy ścieżka

istnieje. Zwraca wynik True lub False.

Aplet Resolve-Path analizuje symbole

wieloznaczne i wypisuje jej pełną postać:

Get-ChildItem c:\windows\[a-dw]*.*

Test-Path c:\tmp

Resolve-Path ~

Page 62: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Definiowanie dyskówDefiniowanie dysków

Model nawigacji WPS przewiduje możliwość definiowania nowych dysków, które można wykorzystać m.in. jako skróty zastępujące długie nazwy ścieżkowe.

Nowo zdefiniowany dysk jest dostępny jedynie w bieżącej konsoli WPS i nie jest dostępny dla innych aplikacji.

Podobnie można definiować skróty do kluczy rejestru.

Ograniczenie liczby dysków to 4096. Można je zmienić modyfikując zmienną $MaximumDriveCount.

New-PSDrive –Name Home –PSProvider FileSystem

-Root „c:\documents and Settings\franio\”

Page 63: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Język skryptów Język skryptów PowerShellPowerShell

Page 64: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

System pomocySystem pomocy

Opisy elementów składniowych języka

skryptowego PowerShell można

wypisać podobnie jak opisy apletów

poleceń.

Nazwy dokumentów opisujących

konstrukcje języka rozpoczynają się

od słowa „About”:

Get-Help About_for

Page 65: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Rozdzielanie poleceńRozdzielanie poleceń

Ogólnie jeden wiersz skryptu, to jedno polecenie.

W wierszu można umieścić kilka poleceń rozdzielając je znakiem ; .

Na końcu każdej linii może znajdować się znak ; ale nie jest to wymagane.

Jeśli jedno polecenie musi zostać zapisane w kilku wierszach, należy użyć znaku odwróconego apostrofu ` :

Gps | `

format-list

Page 66: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

ZmienneZmienne

Nazwy zmiennych rozpoczyna znak $.

Nazwa może zawierać litery i cyfry oraz znak _ .

Część nazw jest zarezerwowana dla zmiennych predefiniowanych $_ .

Określanie typu zmiennej nie jest wymagane, może on jednak zostać zadeklarowany:

Typy WPS odpowiadają klasom .NET: typy [int], [System.Int32] i [int32] są identyczne.

Umieszczenie nazwy typu tuż przed wyrażeniem przypisania trwale przypisuje typ zmiennej.

$a = 5

$a = [int] 5

$a = [System.DateTime] ”2006-01-22”

Page 67: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Typ zmiennejTyp zmiennej

W chwili przypisania wartości następuje niejawne zadeklarowanie zmiennej.

Jeśli jednak typy zmiennych nie są deklarowane, mogą pojawić się błędy wynikające z błędnego określania typu.

Deklaracja ma określony zakres (skrypt, procedura lub blok kodu).

Deklarację można usunąć apletem Remove-Variable.

Zalecane użycie polecenia Set-PSDebug –Strict.

Page 68: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

„Szybkie typy” „Szybkie typy” PowerShellaPowerShellaOznaczenie Typ

[int] typeof (int)

[int[]] typeof (int[])

[long] typeof (long)

[long[]] typeof (long[])

[string] typeof (string)

[string[]] typeof (string[])

[char] typeof (char)

[char[]] typeof (char[])

[bool] typeof (bool)

[bool[]] typeof (bool[])

[byte] typeof (byte)

[double] typeof (double)

[decimal] typeof (decimal)

[float] typeof (float)

Page 69: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

„Szybkie typy” „Szybkie typy” -- cdcdOznaczenie Typ

[single] typeof (float)

[regex] typeof (System.Text.RegularExpression.Regex)

[array] typeof (System.Array)

[xml] typeof (System. Xml.XmlDocument)

[scriptblock] typeof (System. Management.Automation.SctiptBlock)

[switch] typeof (System.Management.Automation.SwitchParameter)

[hashtable] typeof (System.Collections.Hashtable)

[type] typeof (System.Type)

[ref] typeof (System. Management.Automation.PSReference)

[psobject] typeof (System. Management.Automation.PSObject)

[wmi] typeof (System. Management.ManagementObject)

[wmisearcher] typeof (System. Management.ManagementObjectSearcher)

[wmiclass] typeof (System. Management.managementClass)

Page 70: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Sprawdzanie typu zmiennejSprawdzanie typu zmiennej

Informacje o typie są dostępne niezależnie od tego, czy typ zmiennej został jawnie określony.

Metoda GetType () zwraca typ zmiennej w postaci obiektu System.Type.

Każda zmienna WPS to obiekt klasy .NET, więc metoda ta jest zawsze dostępna.

Pełną nazwę (z obszarem nazw) pobieramy z właściwości FullName, zaś krotką z Name.

Page 71: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Zmienne predefiniowaneZmienne predefiniowane

To zmienne PowerShella.

Ich właściwa nazwa to zmienne

zintegrowane lub zmienne

wewnętrzne.

Wszystkie zadeklarowane zmienne,

wewnętrzne i użytkownika można

wyświetlić poleceniem:

Get-ChildItem Variable:

dir Variable:

Page 72: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Zmienne predefiniowaneZmienne predefiniowaneFunkcja Opis

$true Wartość „prawda”

$false Wartość „fałsz”

$OFS Separator stosowany przy wyświetlaniu zbioru obiektów

$Home Katalog macierzysty użytkownika

$PSHome Katalog macierzysty PowerShella

$Args Parametr (przy wywołaniach funkcji)

$Input Zawartość potoku (do użytku w funkcjach)

$_ Bieżący obiekt potoku (do użytku np. w pętlach)

$StackTrace Bieżąca sekwencja wywołań

$Host Informacje o „hoście” WPS

$LastExitCode Wartość zwrócona przez ostatnio wykonany program konsoli

lub zewnętrzną aplikacje Windows

$Error Pełna lista błędów od uruchomienia PowerShella. Ich liczbę

określa zmienna $MaximumErrorCount

Page 73: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Podstawianie zmiennychPodstawianie zmiennych

Zasada podstawiania zmiennych jest stosowana nie tylko w typowych wyrażeniach, ale również wewnątrz ciągów znakowych. Jeżeli:

to zamiast:

można napisać:

W obu przypadkach wartość ciągu jest ta sama:

[int] $licznik = 1

[string] $Komputer = ”messy”

$licznik.ToString() + ”Dostep do komputera ” + $Komputer

”$licznik. Dostep do komputera $Komputer”

”1. Dostep do komputera messy”

Page 74: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Podstawianie zmiennych Podstawianie zmiennych -- cdcd

Z podstawiania zmiennych można korzystać w wywołaniach apletów poleceń:

Mechanizm podstawiania zmiennych obejmuje również obliczanie wartości wyrażeń. Po znaku $ można umieścić w ciągu znakowym dowolne wyrażenie, którego wartość zostanie włączona do ciągu wynikowego:

Podstawianie zmiennych nie zostanie przeprowadzone, jeśli ciąg zostanie zapisany przy użyciu znaków apostrofu zamiast cudzysłowiu:

Get-DirectoryEntry (”WinNT://” + $Komputer)

Get-DirectoryEntry ”WinNT://$Komputer”

”1+3=$(1+3)”

”Godzina: $((Get-Date).ToShortTimeString())”

‘$licznik. Dostep do komputera $Komputer’

Page 75: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

LiczbyLiczby

Konstruktorami wartości liczbowych mogą być literały liczby, wyrażenia i zakresy.

Liczby szesnastkowe poprzedza się znakami 0X i można je stosować wszędzie tam, gdzie liczby dziesiętne.

Jeżeli następuje przypisanie literału liczby do zmiennej, której typ nie został jawnie określony, WPS tworzy obiekt typu System.Int32.

Jeśli zakres wartości nie jest wystarczający, stosowany jest typ Int64 lub Decimal.

Jeśli literał jest ułamkiem, WPS deklaruje typ Doublelub Decimal.

Aby przypisać zmiennej typ danych, należy poprzedzić deklarację nazwą typu. W przypadku typu Decimalistnieje możliwość zadeklarowania typu poprzez dodanie litery d.

Skróty KB, MB i GB pozwalają używać jednostek kilo-, mega- oraz gigabajta.

Page 76: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Liczby pseudolosoweLiczby pseudolosowe

Do generowania liczb pseudolosowych służy aplet Get-Random.

Standardowo generuje liczby typu double z przedziału od 0 do Int32.MaxValue.

Przedział wartości można zmienić przy użyciu parametrów –Min i –Max.

Istnieje możliwość wyboru wartości losowych z danego zbioru.

Page 77: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Ciągi znakoweCiągi znakowe

WPS pozwala korzystać ze

wszystkich metod klasy

System.String, a wtym m.in. z:

Insert(), Remove(), Replace() i Split().

Pełną listę metod udostępnia

polecenie:

”” | Get-Member –m method

Page 78: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Dzielenie i łączenie ciągów znakowychDzielenie i łączenie ciągów znakowych

Aplet polecenia Split-Stringumożliwia podzielenie napisu na

fragmenty w miejscach wskazanych

przez znaki.

Odpowiednikiem jest metoda Split()klasy System.String.

Analogicznie, do łaczenia ciągów

służy metoda Join() oraz aplet

polecenia Join-String.

Page 79: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Data i godzinaData i godzina Aplet polecenia Get-Date tworzy obiekt System.DateTime

klasy .NET, który zawiera bieżącą datę i godzinę.

Redukcja danych wyjściowych przy pomocy przełącznika –displayhint :

Można obliczyć różnicę między bieżącą datą i godziną, a datą i godziną zapisaną w zmiennej (metoda Substract() lub operator - ):

Różnice czasu są tworzone jako obiekty klasy System.TimeSpan. Można je tworzyć poleceniem New-Timespan :

Get-Date –displayhint date

Get-Date –displayhint time

(Get-Date).Substract((Get-Date ”1992-05-12 03:11:25”))

(Get-Date) – (Get-Date ”1992-05-12 03:11:25”)

$Przedzial = New-Timespan –Days 10 –Hours 7 –Minutes 6 –Seconds 2

$Teraz = Get-Date

$Koniec = $Teraz + $Przedzial

Page 80: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

UzupełnienieUzupełnienie

Aplet Get-Date nie pozwala pobrać

czasu ze zdalnego komputera.

Umożliwia to klasa WMI

Win32_Currenttime :

Zmianę daty i godziny umożliwia

polecenie Set-Date.

Get-Wmiobject Win32_Currenttime –computername messy

Page 81: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

TabliceTablice

Deklaracja tablicy następuje w momencie przypisania zbioru wartości oddzielonych przecinkami:

Tablicę można zadeklarować jawnie używając identyfikatora typu WPS [Array]:

Aby wykonać operacje na wszystkich elementach tablicy, należy użyć apletu polecenia ForEach-Object:

$a = ”Ala ma kota”, ”misiek”, 12

$a = ,”Tylko jeden element”

[Array] $b

$b 1, 3, 6, 89

[Array] $a = ”Tylko jeden element”

[Array] $b =

$i = 0

$b | Foreach-object { $b[i]; $i ++ }

Page 82: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Tablice Tablice -- cdcd

Właściwość Count pozwala uzyskać informację o liczbie elementów w tablicy:

Dostęp do elementu po podaniu indeksu lub zakresu indeksu:

Dodanie elementu do tablicy realizuje operator += :

Tablice można łączyć operatorem + :

Dostępne są tablice wielowymiarowe. Tworzymy ją łącząc elementy listy w grupy, stosując znaki ( ) :

$b = 1, 6, 90, 45; $b.Count

$b[1..3]

$b += 22; $b.Count

$a = ”Jan”, ”Ala”; $c = $a + $b

$Kompy = (”dns1”, ”172.31.1.10”, ”krakow”), ‘

(”dns2”, ”172.31.2.10”, ”wroclaw”)

Page 83: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Tablice asocjacyjneTablice asocjacyjne

To listy nazwanych elementów, zaimplementowane jako tablice (tabele) skrótów.

Element w tablicy identyfikuje nie pozycja, ale pewna wartość nazwana kluczem.

Tabelę skrótów tworzymy używając znaku @ oraz listy elementów ujętych w nawiasy wąsate { }. Kolejne elementy rozdziela średnik ; .

Każdy element składa się z nazwy i wartości, rozdzielonych znakiem =. Nazwy nie można ująć w cudzysłów.

Identyfikatorem typu jest [Hashtable]:

$Kompy1 = @{ dns1 = ”172.31.1.10”; dns2 = ”172.31.2.10”; `

dns3 = ”172.31.3.10”;}

[hashtable] $Kompy2 = @{ dns4 = ”172.31.4.10”; dns5 = ”172.31.5.10”; `

dns6 = ”172.31.6.10”;}

Page 84: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Tablice asocjacyjne Tablice asocjacyjne -- cdcd

Dostęp do elementu tablicy przez zastosowanie [] lub notacji z . :

Przypisanie wartości elementu:

Istnieje możliwość generowania tabeli od listy pustej począwszy:

Tabele skrótów można łączyć tak samo, jak zwykłe tablice. Nazwy elementów w obu tabelach nie mogą się powtarzać.

$Kompy1[”dns1”]

$Kompy2.dns4

$Kompy2.dns4 = ”172.31.21.10”

$Kompy3 = @{ }

$Kompy3.dns7 = ”172.31.7.10”

$Kompy309 = $Kompy1 + $Kompy2 + $Kompy3

Page 85: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

OperatoryOperatory

PWS pozwala korzystać z podstawowych operatorów arytmetycznych: +, -, *, /, %.

Znak + służy do dodawania, łączenia ciągów oraz tablic.

Znak * służy do mnożenia liczb oraz zwielokrotniania ciągów znakowych i tablic (oprócz tablic asocjacyjnych).

$Ciag = ”abcdefghijklmno”

$Ciag2 = $Ciag * 20; $Ciag2.Length

$Tablica = 1, 2, 3, 4, 5

$T = $Tablica * 10; $T.Count

Page 86: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Operatory Operatory -- cdcd

Znak = to operator przypisania. WPS umożliwia przypisania krzyżowe umożliwiające elegancką formę wymiany wartości dwóch zmiennych:

Operator & może służyć do wykonania polecenia, którego nazwa jest zapisana w ciągu znakowym:

Operator & można zastąpić apletem polecenia Invoke-Expression:

$x, $y = $y, $x

$Co = ”Process”

& (”Get-”+$Co)

$Co = ”Process | Stop-Process”

Invoke-Expression(”Get-”+$Co)

Page 87: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Struktury sterująceStruktury sterujące Język skryptów PowerShella PWL udostępnia

następujące struktury sterujące:if (warunek) {…} else {…}

switch ($zmienna) {wartosc1 {….} wartosc2 {…} default {…} } }

while(warunek) {…}

do {…} while (warunek)

do {…} until (warunek)

for ( wart_pocz; warunek_konca; zmiana_wartosci ) {…}

foreach ($zmienna in $kolekcja) {…}

function nazwa {…}

break

continue

return

exit

trap błąd class {…} else {…}

throw ”informacja o błędzie”

throw obiekt błędu

Page 88: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

PętlePętle

#Petla for od 1 do 5

for ( $i = 1; $i –lt 6; $i++) { $i }

#Petla while

$i = 0

while ( $i –lt 5 )

{ $i++

$i

}

#Petla foreach

$i = 1, 2, 3, 6, 7

Foreach ( $zmienna in $i ) { $zmienna }

Page 89: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

WarunkiWarunki

if ($i –lt 10)

{ ”Instrukcja wykonywane gdy wartosc i<10” }

else

{ ”Instrukcja wykonywane gdy wartosc i>=10” }

#

switch ($i)

{

1 { ”Instrukcje dla 1” }

5 { ”Instrukcje dla 5” }

7 { ”Instrukcje dla 7” }

default { „Inna liczba” }

}

Page 90: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

FunkcjeFunkcje

function ParametryNieNazwane ()

{

”funkcja dostała parametry: $args[0] oraz $args[1]”

return $args[0] + $args[1]

}

#

#

function ParametryNazwane ([int] $a, [int] $b)

{

”funkcja dostała parametry: $a oraz $b”

return $a + $b

}

Page 91: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Przykładowy skryptPrzykładowy skrypt

#Odczyt z pliku tekstowego i wstawienie do tablicy napisow

#Format linii: Imie Nazwisko,login,haslo

$a = Get-Content c:\tmp\dane.txt

[Array] $tab =

$a | Foreach-Object { $d = $_.split(","); $d; $tab += $d }

$n = $tab.count

$n

for ( $i = 0; $i -lt $n; $i = $i + 3 )

{ $tab[$i]+" "+$tab[$i+1]+" "+$tab[$i+2] }

Page 92: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Uruchamianie skryptówUruchamianie skryptów Aby uruchomić skrypt PowerShella, należy wprowadzić nazwę pliku z lub bez

rozszerzenia.

Opcjonalnie można użyć apletu polecenia Invoke-Expression lub operatora &.

Ścieżka dostępu może być względna lub bezwzględna, zależnie od tego czy katalog, w którym znajduje się plik skryptu wchodzi w skład wartości zmiennej Path czy nie:

Skrypt WPS można także uruchomić ze zwykłego okna wiersza poleceń :

Skrypty WPS podlegają tym samym ograniczeniom jak skrypty WSH w zakresie kontroli konta użytkownika.

skrypt1

.\skrypt1

skrypt1.ps1

& skrypt1.ps1

Invoke-Expression skrypt1.ps1

powershell.exe skrypt1

powershell.exe .\skrypt1.ps1

powershell.exe c:\tmp\skrypt1.ps1

Page 93: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Włączanie skryptuWłączanie skryptu

Włączanie źródła kropką, to mechanizm umożliwiający wywołanie skryptów w sposób, który powoduje, że wszystkie zawarte w nim definicje pozostaną dostępne dla bieżącej konsoli WPS.

Zatem wszystkie zadeklarowane w skrypcie zmienne i funkcje pozostaną dostępne po zakończeniu jego wykonywania.

Jest to zatem prosty sposób na rozszerzanie funkcji PowerShella.

cd c:\tmp

. .\skrypt1.ps1

Page 94: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

ZabezpieczeniaZabezpieczenia

Funkcje wykonywania skryptów w programach Internet Explorer, Outlook czy WSH okazały się zagrożeniem dla bezpieczeństwa systemów.

Stąd próba użycia konsoli WPS do uruchomienia skryptu kończy się niepowodzeniem.

Domyślnie zasady wykonywania skryptów blokują wykonanie jakiegokolwiek pliku.

Pierwsze wirusy WPS powstały jeszcze przed wprowadzeniem pierwszej wersji narzędzia.

Page 95: Windows PowerShell - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_6/uslugi... · Wywołanie poleceń (ping, netstat) przekazuje do potoku grupę ciągów

Zasady wykonywania skryptówZasady wykonywania skryptów

Użytkownik może korzystać ze skryptów PowerShella dopiero po obniżeniu poziomu zabezpieczeń.

Służy do tego aplet polecenia Set-ExecutionPolicy. Dostępne tryby to:◦ Restricted – domyślny, uniemożliwia

uruchomienie jakiegokolwiek apletu.

◦ AllSigned – pozwala uruchamiać skrypty podpisane tylko przez zaufanych wydawców.

◦ RemoteSigned – podpis zaufanego wydawcy jest wymagany tylko dla skryptów pobieranych z Internetu i innych zasobów sieciowych. Skrypty lokalne nie muszą mieć podpisu.

◦ Unrestricted – można uruchamiać wszystkie skrypty.