1 / 95

Windows PowerShell

Windows PowerShell. Remigiusz Górecki Krzysztof Boryczko. Czym jest PowerShell ?. 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. .

olesia
Télécharger la présentation

Windows PowerShell

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Windows PowerShell Remigiusz Górecki Krzysztof Boryczko

  2. Czym jest PowerShell ? 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.

  3. Cechy środowiska • Zbiór poleceń zaimplementowanych jako aplety poleceń (commandlet). • Zapewnia dostęp do wszystkich obiektów systemowych i aplikacji bibliotek ComponentObject 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)

  4. Cechy środowiska - cd • 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ą.

  5. Historia • Powstał w trakcie prac nad Windows Server 2003 – chodziło o zastąpienie DOS-owego okna wiersza poleceń. • Środowisko WSH (Windows Scripting Host) 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.

  6. Instalacja • 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

  7. WPS w trybie interaktywnym • Uruchomienie konsoli i wydawanie poleceń z linii komend.

  8. WPS w trybie wykonywania skryptów • Skrypt PowerShella to plik tekstowy w języku PowershellScriptLanguage (PSL). • Skrypt zawiera deklaracje zzmiennych oraz wywołania apletów.

  9. PowerShell ISE

  10. 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: • czasownik, • rzeczownik (w liczbie pojedynczej), • 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*

  11. 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:\ProgramFiles”

  12. 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

  13. Przełą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

  14. Parametry 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]*”

  15. Tryby 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)

  16. Polecenia z wyrażeniami (1)

  17. Polecenia z wyrażeniami (2)

  18. Aliasy • 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” }

  19. Tworzenie nowych aliasó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 procsGet-Process New-Alias procsGet-Process Set-Alias npnotepad.exe Function Temp { get-childitem c:\temp }

  20. Polecenia 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: • aliasy, • funkcje, • aplety poleceń, • polecenia zewnętrzne.

  21. Potoki 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 PowerShella przekazuje 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

  22. Typy 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 }

  23. 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-Processiexplore | Stop-Process Get-Processiexplore | Foreach-Object { $_.Kill() } ps | ? { $_.name –eq ”iexplore” } | % { $_.Kill() }

  24. 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

  25. Filtrowanie 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.

  26. Dane 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.

  27. Formatowanie 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.

  28. Dzielenie na strony • Można wymusić przy użyciu parametru –p apletu polecenia Out-Host. Get-Process | Format-List | Out-Host -p

  29. Elementy 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*

  30. Wyprowadzanie 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 ”HelloWorld” –foregroundcolor red -backgroundcolorgreen

  31. Blokowanie wypisywania danych wyjś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 )

  32. Inne 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

  33. Interakcje z użytkownikiem • Tekstowe dane wejściowe można pobierać poleceniem Read-Host:

  34. Okno InputBox • 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")

  35. Okno 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)

  36. Analiza zawartości potoku • Do tej pory najtrudniejsze było określenie: • Typu obiektów, które PowerShell umieszcza w potoku. • 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

  37. Get-PipelineInfo • Pozwala uzyskać trzy ważne informacje o zawartości potoku: • Liczba obiektów w potoku (obiekty są ponumerowane). • Typy obiektów w potoku (nazwy klas .NET). • Reprezentacje obiektów w postaci ciągów znakowych.

  38. Reprezentacja 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.ServiceController zwracanych przez aplet Get-Service() jest bezużyteczna, gdyż wynik zawiera wyłącznie nazwę klasy.

  39. Get-Member • 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.

  40. Metody • 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.

  41. Wł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() } • Podobnie zapis: Get-Process | Where-Object { $_.name –eq ”iexplore” } | Foreach-Object { $_.MaxWorkingSet = 1412344} Get-Process | Where-Object { $_.name –eq ”iexplore” } | Foreach-Object { $_.set_MaxWorkingSet(1412344) }

  42. Wł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 | SelectObjectpsResources | Format-Table

  43. 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-Objectname, Product Get-Process | Select-Objectname, Mainmodule.FileVersionInfo.ProductName

  44. 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.

  45. Rozszerzony 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 ExtendedType SystemPowerShella. • 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.

  46. Filtrowanie 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-Objectws –desc | Where-Object –last 5

  47. Operatory porównania

  48. Operatory logiczne Get-Process | Where-Object { $_.ws –gt 1048576 –and $_.name –eq ”firefox” } Get-Process | Where-Object { $_.DisplayName –match ”^\w* \w*$” }

  49. Agregacja zawartości potoku • Obiekty w potoku mogą mieć różne typy. Przykładowo, polecenie Get-ChildItem wykonane 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

  50. Przycinanie 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-ObjectProcessName, get_minWorkingSet, ws | Get-Member

More Related