Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00225 007505 15720444 na godz. na dobę w sumie
Windows PowerShell 4.0 dla programistów .NET - ebook/pdf
Windows PowerShell 4.0 dla programistów .NET - ebook/pdf
Autor: Liczba stron: 120
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-0330-0 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> systemy operacyjne >> powershell
Porównaj ceny (książka, ebook (-20%), audiobook).

PowerShell to obiektowy język skryptowy i powłoka zadaniowa, a jednocześnie potężne narzędzie do automatyzacji zadań.

PowerShell to — jak sama nazwa wskazuje — konsola z ogromem możliwości! Pozwala kontrolować system Windows oraz wiele innych aplikacji przeznaczonych dla serwerów, a także nimi zarządzać. Dzięki swym atutom jest szczególnie doceniana przez zaawansowanych użytkowników systemu Windows oraz administratorów tej platformy. Jeżeli chcesz w pełni wykorzystać potencjał PowerShell, jesteś programistą platformy .NET i chciałbyś ułatwić sobie pracę, to trafiłeś na superksiążkę!

Sięgnij po nią i poznaj podstawy Windows PowerShell! Gdy zaczniesz już swobodnie korzystać z nowych możliwości, będziesz mógł poznać najlepsze techniki pracy z plikami XML i modułami oraz zaznajomić się z obiektami COM i .NET. Następnie dowiesz się, jak administrować systemem Windows z wykorzystaniem możliwości PowerShell. Dzięki tej wiedzy większość zadań wykonasz zdecydowanie szybciej — i to bez myszki! Na sam koniec nauczysz się korzystać z zasobów sieciowych oraz narzędzi dla platformy TFS. Książka ta jest obowiązkową pozycją dla wszystkich użytkowników systemu Windows, chcących poznać zaawansowane możliwości zarządzania systemem... i nie tylko!

Dzięki tej książce:

Administrowanie systemem Windows jeszcze nigdy nie było tak przyjemne!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Windows PowerShell 4.0 for .NET Developers Tłumaczenie: Łukasz Piwko ISBN: 978-83-283-0327-0 Copyright © Packt Publishing 2014. First published in the English language under the title „Windows PowerShell 4.0 for .NET Developers”. Polish edition copyright © 2015 by Helion S.A. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/winpo4 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/winpo4.zip Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci O autorze Podzi(cid:218)kowania O recenzentach Przedmowa Rozdzia(cid:239) 1. Podstawy Windows PowerShella Wprowadzenie do Windows PowerShella Konsole Windows PowerShell Konsola Windows PowerShell Integrated Script Environment (ISE) Najwa(cid:285)niejsze cechy narz(cid:218)dzia Windows PowerShell Podstawy PowerShella Obiekty Potokowe wykonywanie polece(cid:241) Aliasy Zmienne i typy danych Operatory porównywania i logiczne Tablice i tablice mieszaj(cid:200)ce Sterowanie wykonywaniem skryptów Instrukcje warunkowe Instrukcje iteracyjne Funkcje Dostawcy i stacje Zapisywanie skryptów w plikach Komentarze 7 8 9 11 15 16 17 17 18 20 22 22 23 24 25 26 27 28 28 29 29 30 31 33 Kup książkęPoleć książkę Spis tre(cid:286)ci Pomoc w Windows PowerShellu Pospolite parametry PowerShella Podsumowanie Rozdzia(cid:239) 2. PowerShell w s(cid:239)u(cid:285)bie programisty CIM i WMI CIM i WMI w Windows PowerShellu Powody przyj(cid:218)cia standardu CIM Praca z XML Wczytywanie plików XML Importowanie i eksportowanie plików XML Obiekty typu COM Tworzenie egzemplarza obiektu COM Automatyzacja przegl(cid:200)darki Internet Explorer przy u(cid:285)yciu technologii COM i narz(cid:218)dzia PowerShell Automatyzacja programu Microsoft Excel przy u(cid:285)yciu technologii COM i narz(cid:218)dzia PowerShell Obiekty .NET Tworzenie obiektów .NET Rozszerzanie obiektów .NET Rozszerzanie typów platformy .NET Modu(cid:239)y Windows PowerShella Tworzenie modu(cid:239)ów Windows PowerShella Modu(cid:239)y skryptowe Modu(cid:239)y binarne Modu(cid:239)y z manifestem Modu(cid:239)y dynamiczne Diagnostyka skryptów i obs(cid:239)uga b(cid:239)(cid:218)dów Punkty wstrzymania Diagnozowanie skryptów Techniki obs(cid:239)ugi b(cid:239)(cid:218)dów Tworzenie graficznego interfejsu u(cid:285)ytkownika w PowerShellu Podsumowanie Rozdzia(cid:239) 3. Zastosowanie PowerShella w codziennej administracji Praca zdalna z Windows PowerShellem Cztery sposoby u(cid:285)ycia funkcji pracy zdalnej Przep(cid:239)ywy pracy w Windows PowerShellu Tworzenie przep(cid:239)ywu pracy przy u(cid:285)yciu PowerShella Wykonywanie przep(cid:239)ywów pracy PowerShella Sterowanie wykonywaniem przep(cid:239)ywu pracy PowerShella Windows PowerShell w akcji Role i funkcje systemu Windows Zarz(cid:200)dzanie u(cid:285)ytkownikami i grupami lokalnymi Zarz(cid:200)dzanie serwerami sieciowymi — IIS Windows PowerShell i SQL Server Podsumowanie 4 33 35 36 37 38 38 40 41 41 44 44 45 45 46 48 49 49 50 52 53 53 54 58 58 59 60 61 62 64 65 67 68 68 71 72 72 75 77 77 80 83 86 91 Kup książkęPoleć książkę Spis tre(cid:286)ci Rozdzia(cid:239) 4. PowerShell i technologie sieciowe Polecenia sieciowe w PowerShellu Praca z us(cid:239)ugami sieciowymi (cid:191)(cid:200)dania sieciowe Interfejsy API typu REST Praca z danymi w formacie JSON Podsumowanie Rozdzia(cid:239) 5. Konsola PowerShell i Team Foundation Server Narz(cid:218)dzia Power Tools dla platformy TFS Rozpoczynanie pracy z poleceniami PowerShella dla TFS Praca z poleceniami TFS konsoli PowerShell Pobieranie informacji dotycz(cid:200)cych TFS Praca z informacjami elementów pozycji TFS Zarz(cid:200)dzanie przestrzeni(cid:200) robocz(cid:200) TFS Zarz(cid:200)dzanie grupami zmian, zestawami od(cid:239)o(cid:285)onymi i oczekuj(cid:200)cymi zmianami Podsumowanie Skorowidz 93 94 94 96 98 101 103 105 106 107 109 109 110 113 114 116 117 5 Kup książkęPoleć książkę Spis tre(cid:286)ci 6 Kup książkęPoleć książkę 2 PowerShell w s(cid:239)u(cid:285)bie programisty Narz(cid:218)dzie Windows PowerShell to rewolucyjne rozwi(cid:200)zanie w dziedzinie skryptów pow(cid:239)oki i technik automatyzacji. I jest tak nie tylko dlatego, (cid:285)e jest to j(cid:218)zyk obiektowy dzia(cid:239)aj(cid:200)cy na platformie .NET, ale równie(cid:285) dlatego, (cid:285)e narz(cid:218)dzie to unifikuje kilka ró(cid:285)nych narz(cid:218)dzi skrypto- wych i automatyzacyjnych w jednym spójnym, dynamicznym mechanizmie. Przy u(cid:285)yciu jedne- go silnika i j(cid:218)zyka mo(cid:285)na obs(cid:239)ugiwa(cid:202) ró(cid:285)ne technologie, takie jak Windows Management In- strumentation (WMI), Common Information Model (CIM) oraz Component Object Model (COM). Ponadto za jego pomoc(cid:200) mo(cid:285)na zbudowa(cid:202) interfejs automatyzacyjny dla tworzonych aplikacji. W rozdziale tym zajrzymy g(cid:239)(cid:218)biej do Windows PowerShell, aby dobrze pozna(cid:202) ró(cid:285)ne tech- nologie, którymi mo(cid:285)na zarz(cid:200)dza(cid:202) za pomoc(cid:200) tego narz(cid:218)dzia, nauczy(cid:202) si(cid:218) tego robi(cid:202) oraz po- zna(cid:202) bardziej zaawansowane techniki pisania skryptów, bazuj(cid:200)c na posiadanych ju(cid:285) umiej(cid:218)tno- (cid:258)ciach programistycznych. W tym rozdziale omawiam nast(cid:218)puj(cid:200)ce tematy: (cid:81) Podstawy WMI, CIM, COM oraz XML (cid:81) Rozszerzanie funkcjonalno(cid:258)ci narz(cid:218)dzia Windows PowerShell przy u(cid:285)yciu technologii .NET, COM, XML oraz WMI (cid:81) Modu(cid:239)y Windows PowerShella (cid:81) Tworzenie modu(cid:239)ów Windows PowerShella (cid:81) Debugowanie skryptów i obs(cid:239)uga b(cid:239)(cid:218)dów Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET CIM i WMI CIM to otwarty standard zdefiniowany przez Distributed Management Task Force (DMTF) w ramach inicjatywy Web-Based Enterprise Management (WBEM). Standard CIM okre(cid:258)la rozszerzalny model danych opisuj(cid:200)cy, przetwarzaj(cid:200)cy i pozyskuj(cid:200)cy charakterystyczne informacje o zarz(cid:200)dzanych zasobach, takich jak sk(cid:239)adniki sprz(cid:218)towe i oprogramowanie. CIM jest obiekto- wym modelem programowania niezale(cid:285)nym od produkcji, co znaczy, (cid:285)e mo(cid:285)na zarz(cid:200)dza(cid:202) ró(cid:285)- nymi zasobami od ró(cid:285)nych dostawców przy u(cid:285)yciu tylko standardu CIM. Natomiast WMI jest implementacj(cid:200) standardu CIM firmy Microsoft, wprowadzon(cid:200) w systemie Windows 2000, aby umo(cid:285)liwi(cid:202) zarz(cid:200)dzanie wszystkimi sk(cid:239)adnikami programowymi i sprz(cid:218)towymi systemu. CIM i WMI w Windows PowerShellu W Windows PowerShellu 2.0 zaimplementowano kilka polece(cid:241) umo(cid:285)liwiaj(cid:200)cych wykorzysta- nie WMI jako warstwy po(cid:258)redniej mi(cid:218)dzy u(cid:285)ytkownikiem ko(cid:241)cowym (administratorem sys- temu i programist(cid:200)) a CIM. Pó(cid:283)niej, w Windows PowerShellu 3.0, wprowadzono bezpo(cid:258)red- ni(cid:200) obs(cid:239)ug(cid:218) standardu CIM w postaci dodatkowych polece(cid:241) w systemach Windows Server 2012 i Windows 8, dzi(cid:218)ki czemu u(cid:285)ytkownicy narz(cid:218)dzia PowerShell mog(cid:200) bezpo(cid:258)rednio ujawnia(cid:202) schemat i model danych CIM. Aby wy(cid:258)wietli(cid:202) list(cid:218) polece(cid:241) dla WMI i CIM, nale(cid:285)y u(cid:285)y(cid:202) polecenia Get-Command z parame- trem -Name przefiltrowanym przez wieloznacznik i parametrem -Type przefiltrowanym przez argument cmdlet powoduj(cid:200)cy pobranie tylko polece(cid:241), z pomini(cid:218)ciem funkcji i aliasów. Opisane polecenie jest pokazane poni(cid:285)ej: # Wy(cid:286)wietla list(cid:266) wszystkich polece(cid:276) dotycz(cid:261)cych WMI PS C:\ Get-Command *WMI* -Type Cmdlet CommandType Name ModuleName ----------- ---- ---------- Cmdlet Get-WmiObject Microsoft.PowerShell.Management Cmdlet Invoke-WmiMethod Microsoft.PowerShell.Management Cmdlet Register-WmiEvent Microsoft.PowerShell.Management Cmdlet Remove-WmiObject Microsoft.PowerShell.Management Cmdlet Set-WmiInstance Microsoft.PowerShell.Management # Wy(cid:286)wietla list(cid:266) wszystkich polece(cid:276) dotycz(cid:261)cych CIM PS C:\ Get-Command *CIM* -Type Cmdlet CommandType Name ModuleName ----------- ---- ---------- Cmdlet Get-CimAssociatedInstance CimCmdlets Cmdlet Get-CimClass CimCmdlets Cmdlet Get-CimInstance CimCmdlets Cmdlet Get-CimSession CimCmdlets Cmdlet Invoke-CimMethod CimCmdlets Cmdlet New-CimInstance CimCmdlets Cmdlet New-CimSession CimCmdlets Cmdlet New-CimSessionOption CimCmdlets 38 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty Cmdlet Register-CimIndicationEvent CimCmdlets Cmdlet Remove-CimInstance CimCmdlets Cmdlet Remove-CimSession CimCmdlets Cmdlet Set-CimInstance CimCmdlets A teraz przyjrzyj si(cid:218) obu tym listom. Zauwa(cid:285)y(cid:239)e(cid:258) pewn(cid:200) prawid(cid:239)owo(cid:258)(cid:202)? Niektóre polecenia CIM s(cid:200) podobne do polece(cid:241) WMI, co w (cid:258)wietle wcze(cid:258)niejszej informacji, (cid:285)e WMI jest im- plementacj(cid:200) CIM, nie powinno by(cid:202) (cid:285)adnym zaskoczeniem. Mimo (cid:285)e obie listy polece(cid:241) wygl(cid:200)daj(cid:200) prawie tak samo, mo(cid:285)na zauwa(cid:285)y(cid:202), (cid:285)e polecenia z listy CIM maj(cid:200) wi(cid:218)cej parametrów i (cid:285)e jest ich wi(cid:218)cej, dzi(cid:218)ki czemu mo(cid:285)na przy ich u(cid:285)yciu uzy- ska(cid:202) wi(cid:218)cej informacji. CIM i WMI reprezentuj(cid:200) dostarczone informacje w postaci przestrzeni nazw i klas. Na przy- k(cid:239)ad istnieje klasa dla BIOS o nazwie Win32_BIOS i inna klasa dla systemu operacyjnego o na- zwie Win32_OperatingSystem. Istniej(cid:200) te(cid:285) klasy, których nazwy zaczynaj(cid:200) si(cid:218) od znaku _, w rodzaju _NAZWAKLASY na wewn(cid:218)trzny u(cid:285)ytek systemu operacyjnego oraz CIM_NAZWAKLASY dla pewnych podstawowych klas, ale najcz(cid:218)(cid:258)ciej u(cid:285)ywane s(cid:200) klasy o nazwach typu Win32_NAZWAKLASY. Je(cid:258)li nie znasz nazwy klasy lub chcesz obejrze(cid:202) list(cid:218) klas dost(cid:218)pnych w swoim systemie, mo(cid:285)esz u(cid:285)y(cid:202) polecenia Get-WmiObject -List lub Get-CimClass. # Wy(cid:286)wietla list(cid:266) dost(cid:266)pnych klas przy u(cid:298)yciu WMI PS C:\ Get-WmiObject –Class * -List # Wy(cid:286)wietla list(cid:266) dost(cid:266)pnych klas przy u(cid:298)yciu CIM PS C:\ Get-CimClass –ClassName * Win32_CurrentTime Win32_LocalTime Win32_OperatingSystem Win32_Process Win32_ComputerSystem Win32_BIOS Win32_SoftwareElement (...) # Porównuje liczby klas pobranych przez oba polecenia PS C:\ (Get-WmiObject -List).count -eq (Get-CimClass).count True Po znalezieniu potrzebnej klasy nale(cid:285)y utworzy(cid:202) jej egzemplarz, aby pobra(cid:202) dostarczane przez ni(cid:200) informacje. W tym celu mo(cid:285)na u(cid:285)y(cid:202) polecenia Get-WmiObject lub Get-CimInstance, podaj(cid:200)c nazw(cid:218) klasy jako parametr. # Tworzy egzemplarz klasy przy u(cid:298)yciu WMI PS C:\ Get-WmiObject -Class Win32_BIOS # Tworzy egzemplarz klasy przy u(cid:298)yciu CIM PS C:\ Get-CimInstance -ClassName Win32_BIOS 39 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET SMBIOSBIOSVersion : 8BET59WW (1.39 ) Manufacturer : LENOVO Name : Default System BIOS SerialNumber : R9T081V Version : LENOVO – 1390 Ponadto zamiast nazwy klasy mo(cid:285)na u(cid:285)y(cid:202) parametru -Query, aby wykona(cid:202) predefiniowane za- pytanie WMI napisane w j(cid:218)zyku WMI Query Language (WQL). # Tworzy zapytanie WQL odczytuj(cid:261)ce dane z klasy Win32_NetworkAdapter PS C:\ $Query = Select * From Win32_NetworkAdapter Where Name like Intel # Wykonuje zapytanie WQL przy u(cid:298)yciu WMI PS C:\ Get-WmiObject -Query $Query | Select DeviceID, Name # Wykonuje zapytanie WQL przy u(cid:298)yciu CIM PS C:\ Get-CimInstance -Query $Query | Select DeviceID, Name DeviceID Name -------- ---- 0 Intel(R) 82579LM Gigabit Network Connection 2 Intel(R) Centrino(R) Ultimate-N 6300 AGN W podobny sposób mo(cid:285)na usun(cid:200)(cid:202) egzemplarz klasy. Polecenia Remove-WmiObject i Remove- (cid:180)CimInstance s(cid:239)u(cid:285)(cid:200) do usuwania obiektów, a polecenia Set-WmiInstance i Set-CimInstance do ich modyfikowania. Poni(cid:285)ej znajduje si(cid:218) przyk(cid:239)ad pobrania informacji o wybranym folderze w instancji WMI i usuni(cid:218)cia go za pomoc(cid:200) polece(cid:241) Get-WmiObject i Remove-WmiObject. # Pobiera folder o nazwie myOldBackup $folder = Get-WmiObject -Class Win32_Directory -Filter Name= D:\\myOldBackup # Usuwa ten folder $folder | Remove-WmiObject Inne ciekawe polecenia to Register-CimIndicationEvent i Register-WmiEvent. Za ich pomoc(cid:200) mo(cid:285)na wykona(cid:202) pewne dzia(cid:239)ania w bloku skryptowym PowerShella w reakcji na wyst(cid:200)pienie pewnych zdarze(cid:241) WMI lub CMI. Przyk(cid:239)adowo mo(cid:285)na wys(cid:239)a(cid:202) powiadomienie o tym, (cid:285)e stopie(cid:241) wykorzystania procesora przekroczy(cid:239) 85 albo (cid:285)e jaka(cid:258) us(cid:239)uga przesta(cid:239)a dzia(cid:239)a(cid:202). Powody przyj(cid:218)cia standardu CIM Wiedz(cid:200)c, czym s(cid:200) WMI i CIM, i po przeanalizowaniu paru podobnych polece(cid:241) z obu tech- nologii pewnie si(cid:218) zastanawiasz, po co w ogóle wprowadzono nowe polecenia CIM i dlaczego kto(cid:258) mia(cid:239)by ich u(cid:285)ywa(cid:202), skoro dost(cid:218)pne w poprzednich wersjach Windows PowerShella pole- cenia WMI s(cid:200) równie dobre. Aby rozwia(cid:202) Twoje w(cid:200)tpliwo(cid:258)ci i unikn(cid:200)(cid:202) dyskusji filozoficznych, poni(cid:285)ej przedstawiam list(cid:218) zalet CIM w punktach: 40 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty (cid:81) Jest to otwarty standard, co oznacza, (cid:285)e nie jest on zarezerwowany tylko dla systemu Windows, dzi(cid:218)ki czemu za pomoc(cid:200) CIM mo(cid:285)na zarz(cid:200)dza(cid:202) tak(cid:285)e innymi dostawcami i producentami. (cid:81) Do zdalnego zarz(cid:200)dzania CIM u(cid:285)ywa protoko(cid:239)u WS-Management (WS-MAN), dzi(cid:218)ki czemu mo(cid:285)na pracowa(cid:202) z ka(cid:285)dym zdalnym serwerem i urz(cid:200)dzeniem zawieraj(cid:200)cym implementacj(cid:218) tego protoko(cid:239)u. Natomiast za pomoc(cid:200) WMI mo(cid:285)na zarz(cid:200)dza(cid:202) tylko systemem Windows za po(cid:258)rednictwem protoko(cid:239)u DCOM. (cid:81) CIM mo(cid:285)na u(cid:285)ywa(cid:202) z urz(cid:200)dzeniami zgodnymi z Open Management Infrastructure (OMI). Wi(cid:218)cej informacji na temat OMI znajduje si(cid:218) w artykule dost(cid:218)pnym pod adresem http://blogs.technet.com/b/ windowsserver/archive/2012/06/28/open-management-infrastructure.aspx. (cid:81) Za pomoc(cid:200) CIM mo(cid:285)na zarz(cid:200)dza(cid:202) ka(cid:285)dym komputerem i urz(cid:200)dzeniem z systemem operacyjnym zgodnym z CIM Object Manager (CIMOM), niezale(cid:285)nie od dostawcy. W zwi(cid:200)zku z tym przy u(cid:285)yciu CIM mo(cid:285)na zarz(cid:200)dza(cid:202) zarówno systemami operacyjnymi Windows, jak i innymi. Praca z XML Przetwarzanie i zapisywanie danych w formacie XML jest jedn(cid:200) z najcz(cid:218)(cid:258)ciej wykonywanych czynno(cid:258)ci przez programistów. PowerShell zawiera wbudowane narz(cid:218)dzie do obs(cid:239)ugi formatu XML, przy u(cid:285)yciu którego praca z plikami w tym formacie jest (cid:239)atwa i nie wymaga pisania du(cid:285)ej ilo(cid:258)ci kodu. To wystarczy, aby u(cid:285)ywa(cid:202) konsoli PowerShell na co dzie(cid:241) do pracy z danymi w formacie XML. Wczytywanie plików XML Pliki XML mo(cid:285)na wczytywa(cid:202) w konsoli PowerShell na dwa sposoby: za pomoc(cid:200) polecenia Get-Content lub Select-Xml z zapytaniami XPath. Polecenie Get-Content Aby za(cid:239)adowa(cid:202) plik i odczyta(cid:202) jego zawarto(cid:258)(cid:202), mo(cid:285)na u(cid:285)y(cid:202) polecenia Get-Content. S(cid:239)u(cid:285)y ono do (cid:239)adowania tre(cid:258)ci ze zwyk(cid:239)ych plików tekstowych i XML, które równie(cid:285) s(cid:200) tekstowe, ale za- wieraj(cid:200) dane o okre(cid:258)lonej strukturze. # Wczytuje zawarto(cid:286)(cid:252) pliku za pomoc(cid:261) polecenia PS C:\ Get-Content C:\Employees.xml 41 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Polecenie to wczyta zawarto(cid:258)(cid:202) pliku XML jako zwyk(cid:239)y tekst. Aby konsola potraktowa(cid:239)a t(cid:218) tre(cid:258)(cid:202) jako dane w formacie XML, nale(cid:285)y dokona(cid:202) rzutowania wyniku polecenia Get-Content albo zapisa(cid:202) go w zmiennej o (cid:258)ci(cid:258)le okre(cid:258)lonym typie XML, jak zosta(cid:239)o pokazane poni(cid:285)ej: # Rzutowanie wyników $employee = [xml](Get-Content D:\Employees.xml) # Zapisanie wyniku w zmiennej typu XML [xml] $employees = Get-Content D:\Employees.xml Zmiennym o (cid:258)ci(cid:258)le okre(cid:258)lonym typie, np. [xml] $employees, mo(cid:285)na przypisywa(cid:202) tylko obiekty typu System.Xml.XmlDocument. Inaczej nast(cid:200)pi zg(cid:239)oszenie b(cid:239)(cid:218)du. Poni(cid:285)ej znajduje si(cid:218) przyk(cid:239)adowa tre(cid:258)(cid:202) pliku Employees.xml: staff branch location= cairo employee Name Sherif Talaat /Name Role IT /Role /employee /branch /staff Za(cid:239)adowany plik XML zawiera informacje dotycz(cid:200)ce pracowników ró(cid:285)nych dzia(cid:239)ów firmy. Jego tre(cid:258)(cid:202) jest ju(cid:285) zapisana w zmiennej $employees, której mo(cid:285)na u(cid:285)ywa(cid:202) w normalny sposób, tak jak u(cid:285)ywa si(cid:218) wszystkich obiektów obs(cid:239)uguj(cid:200)cych XML. Pokazuje to poni(cid:285)szy przyk(cid:239)ad: # Odczytuje w(cid:266)z(cid:225)y potomne dokumentów XML PS C:\ $employees.staff.ChildNodes location employee -------- -------- cairo {Sherif Talaat, Raymond Elias} redmond {Bill Gates, Steve Jobs} # Pobiera informacje z atrybutów w(cid:266)z(cid:225)ów PS C:\ $employees.staff.branch.Get_Attributes() #text ----- cairo Redmond # Pobiera warto(cid:286)ci atrybutów wg nazw atrybutów PS C:\ $employees.staff.branch. location cairo Redmond # Zmienia warto(cid:286)(cid:252) atrybutu PS C:\ $employees.staff.branch[0]. location 42 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty = Seattle # Zmienia i modyfikuje jeden w(cid:266)ze(cid:225) PS C:\ $employees.staff.branch.employee Name Role ---- ---- Sherif Talaat IT Raymond Elias In(cid:285)ynier PS C:\ $emp = $employees.staff.branch.employee[0] PS C:\ $emp.Role = PowerShell Guru PS C:\ $employees.SelectNodes( //employee[Name= Sherif Talaat ] ) Name Role ---- ---- Sherif Talaat PowerShell Guru # Dodaje nowy w(cid:266)ze(cid:225) PS C:\ $newemployee = $employees.CreateElement( employee ) PS C:\ $newemployee.set_InnerXML( Name Ahmad Mofeed / Name Role Security Consultant /Role ) PS C:\ $employees.staff.branch[0].AppendChild($newemployee) PS C:\ $employees.staff.branch[0].employee Name Role ---- ---- Sherif Talaat PowerShell Guru Raymond Elias In(cid:285)ynier Ahmad Mofeed Security Consultant Polecenie Select-Xml Innym sposobem za(cid:239)adowania zawarto(cid:258)ci pliku XML do PowerShella jest u(cid:285)ycie polecenia Select-Xml, za pomoc(cid:200) którego mo(cid:285)na wpisa(cid:202) bezpo(cid:258)redni(cid:200) (cid:258)cie(cid:285)k(cid:218) do pliku z dodatkiem za- pyta(cid:241) XPath s(cid:239)u(cid:285)(cid:200)cych do pobrania okre(cid:258)lonych danych i w(cid:218)z(cid:239)a, jak zosta(cid:239)o pokazane poni(cid:285)ej: #Get data from XML file using XPath query PS C:\ Select-Xml -Path D:\Employees.xml -XPath staff/branch/ employee Node Path Pattern ---- ---- ------- employee D:\Employees.xml staff/branch/employee employee D:\Employees.xml staff/branch/employee employee D:\Employees.xml staff/branch/employee 43 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Polecenie to pobiera w(cid:218)z(cid:239)y XML za pomoc(cid:200) zapytania XPath. Wynikiem jest obiekt w(cid:218)z(cid:239)ów bez warto(cid:258)ci. Aby rozwin(cid:200)(cid:202) te w(cid:218)z(cid:239)y i wypisa(cid:202) ich warto(cid:258)ci, nale(cid:285)y u(cid:285)y(cid:202) polecenia Select-Object z parametrem -ExpandProperty. PS C:\ Select-Xml -Path D:\Employees.xml -XPath staff/branch/ employee | Select-Object -ExpandProperty Node Name Role ---- ---- Sherif Talaat IT Raymond Elias In(cid:285)ynier Bill Gates Programista Importowanie i eksportowanie plików XML W PowerShellu znajduje si(cid:218) te(cid:285) kilka polece(cid:241) przeznaczonych specjalnie do pracy z danymi w formacie XML. S(cid:200) to polecenia Export-CliXml, s(cid:239)u(cid:285)(cid:200)ce do eksportowania obiektów do plików XML, oraz Import-CliXml, s(cid:239)u(cid:285)(cid:200)ce do importowania i (cid:239)adowania wcze(cid:258)niej wyeksportowanych za pomoc(cid:200) PowerShella plików, jak w poni(cid:285)szym przyk(cid:239)adzie: # Eksportuje obiekt do pliku XML PS C:\ Get-Service | Export-Clixml D:\Services.xml # Importuje obiekt z pliku XML PS C:\ Import-Clixml D:\Services.xml -First 5 Status Name DisplayName ------ ---- ----------- Running AdobeARMservice Adobe Acrobat Update Service Stopped AeLookupSvc Application Experience Stopped ALG Application Layer Gateway Service Running AppIDSvc Application Identity Running Appinfo Application Information Ponadto istnieje jeszcze polecenie ConvertTo-Xml, które dzia(cid:239)a podobnie jak Export-CliXml pod tym wzgl(cid:218)dem, (cid:285)e tak jak ono tworzy reprezentacj(cid:218) jednego lub wi(cid:218)kszej liczby obiektów w formacie XML. Jedyna ró(cid:285)nica mi(cid:218)dzy nimi polega na tym, (cid:285)e Export-CliXml zapisuje kod XML w pliku, a ConvertTo-Xml zwraca obiekt XML, który mo(cid:285)na przekaza(cid:202) na wej(cid:258)cie innego polecenia. Obiekty typu COM W PowerShellu mo(cid:285)na pracowa(cid:202) tak(cid:285)e z obiektami typu COM. W tym podrozdziale obja(cid:258)niam sposób dzia(cid:239)ania technologii COM w PowerShellu na bazie dwóch przyk(cid:239)adów dotycz(cid:200)cych przegl(cid:200)darki Internet Explorer i programu Microsoft Excel. 44 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty Tworzenie egzemplarza obiektu COM Aby utworzy(cid:202) obiekt COM, nale(cid:285)y u(cid:285)y(cid:202) polecenia New-Object z parametrem -ComObject i ar- gumentem ProgID reprezentuj(cid:200)cym przyjazn(cid:200) nazw(cid:218) klasy COM u(cid:285)yt(cid:200) podczas rejestracji klasy. Zatem ostatecznie ca(cid:239)e polecenie powinno wygl(cid:200)da(cid:202) tak: # Tworzy nowy obiekt COM PS C:\ $com = New-Object –ComObject ProgID Automatyzacja przegl(cid:200)darki Internet Explorer przy u(cid:285)yciu technologii COM i narz(cid:218)dzia PowerShell Jak napisa(cid:239)em powy(cid:285)ej, do utworzenia egzemplarza aplikacji potrzebny jest argument ProgID. W przypadku przegl(cid:200)darki Internet Explorer warto(cid:258)(cid:202) tego argumentu to InternetExplorer. (cid:180)Application. Maj(cid:200)c te informacje, mo(cid:285)emy utworzy(cid:202) obiekt COM Internet Explorera i roz- pocz(cid:200)(cid:202) z nim prac(cid:218). Pierwsz(cid:200) czynno(cid:258)ci(cid:200) jest utworzenie obiektu za pomoc(cid:200) polecenia New-Object i zapisanie go dla wygody w zmiennej o nazwie $ie. # Tworzy nowy obiekt klasy COM IE PS C:\ $ie = New-Object -ComObject InternetExplorer.Application Nast(cid:218)pnie mo(cid:285)na zdefiniowa(cid:202) w(cid:239)asno(cid:258)ci utworzonego egzemplarza. W przypadku Internet Explorera nale(cid:285)y zdefiniowa(cid:202) wysoko(cid:258)(cid:202) i szeroko(cid:258)(cid:202) okna, jego widoczno(cid:258)(cid:202), adres URL itd. $ie.navigate( about:blank ) $ie.height = 800 $ie.width = 1200 $ie.visible = $true Wi(cid:218)cej informacji na temat obiektowego modelu Internet Explorera znajduje si(cid:218) na stronie http://msdn. microsoft.com/en-us/library/ms970456.aspx. Powy(cid:285)szy kod spowoduje uruchomienie okna przegl(cid:200)darki IE z pust(cid:200) stron(cid:200). Czy to wszyst- ko, co mo(cid:285)emy zrobi(cid:202) z t(cid:200) przegl(cid:200)dark(cid:200)? Oczywi(cid:258)cie, (cid:285)e nie. Jest wiele ciekawszych mo(cid:285)liwo- (cid:258)ci. Teraz napiszemy kod przeszukuj(cid:200)cy witryn(cid:218) outlook.com, znajduj(cid:200)cy pola tekstowe adresu i has(cid:239)a, wstawiaj(cid:200)cy w nich dane i klikaj(cid:200)cy przycisk Zaloguj. Najpierw wy(cid:258)wietlimy pro(cid:258)b(cid:218) o wpisanie adresu e-mail i has(cid:239)a za pomoc(cid:200) polecenia Read-Host. $EmailAddress = Read-Host -Prompt Wpisz nazw(cid:218) konta Microsoft... Dla has(cid:239)a nale(cid:285)y doda(cid:202) parametr -AsSecureString, aby zamiast wpisywanych liter w polu po- jawia(cid:239)y si(cid:218) gwiazdki i aby has(cid:239)o zosta(cid:239)o zapisane w zaszyfrowanej zmiennej. $Password = Read-Host -AsSecureString -Prompt Wpisz has(cid:239)o... 45 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Okno z polem do wpisania has(cid:239)a powinno wygl(cid:200)da(cid:202) tak: Nast(cid:218)pnie utworzymy obiekt COM i zdefiniujemy jego w(cid:239)asno(cid:258)ci. Tym razem zamiast pustej strony otworzymy stron(cid:218) outlook.com. $ie = New-Object -ComObject InternetExplorer.Application $ie.height = 800 $ie.width = 1200 $ie.navigate( http://outlook.com ) $ie.visible = $true Aby skrypt poprawnie zadzia(cid:239)a(cid:239), przed wykonaniem nast(cid:218)pnego polecenia nale(cid:285)y si(cid:218) upewni(cid:202), czy strona jest ju(cid:285) w pe(cid:239)ni za(cid:239)adowana. while($ie.Busy){Start-Sleep -Milliseconds 500} Teraz przegl(cid:200)damy znajduj(cid:200)ce si(cid:218) na stronie elementy, pola tekstowe i przyciski i wstawiamy do nich otrzymane od u(cid:285)ytkownika warto(cid:258)ci. Do przegl(cid:200)dania elementów strony internetowej mo(cid:285)na u(cid:285)ywa(cid:202) narz(cid:218)dzi programistycznych przegl(cid:200)darki Internet Explorer uruchamianych za pomoc(cid:200) klawisza F12. $doc = $ie.document $tbUsername = $doc.getElementByID( i0116 ) $tbUsername.value = $EmailAddress $tbPassword = $doc.getElementByID( i0118 ) $tbPassword.value = $Password $btnSubmit = $doc.getElementByID( idSIButton9 ) Na koniec wywo(cid:239)ujemy zdarzenie Click na przycisku Zaloguj. $btnSubmit.Click(); Teraz powiniene(cid:258) widzie(cid:202) swoj(cid:200) skrzynk(cid:218) odbiorcz(cid:200). Ciekawe, prawda? Automatyzacja programu Microsoft Excel przy u(cid:285)yciu technologii COM i narz(cid:218)dzia PowerShell Innym popularnym zastosowaniem technologii COM jest automatyzacja programów z pa- kietu Microsoft Office. W tym podrozdziale pokazuj(cid:218), jak pracowa(cid:202) z klas(cid:200) COM programu Microsoft Excel, ale wszystkie wskazówki w równym stopniu dotycz(cid:200) tak(cid:285)e programów Word, Access, Outlook itd. 46 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty W ramach przyk(cid:239)adu utworzymy raport na podstawie arkusza kalkulacyjnego Excel (pokazany na poni(cid:285)szym zrzucie ekranu) przedstawiaj(cid:200)cego aktualny stan wszystkich us(cid:239)ug systemu Windows. Wyznaczony cel w poni(cid:285)szym przyk(cid:239)adowym kodzie osi(cid:200)gniemy przy u(cid:285)yciu interfejsu COM programu Excel Excel.Application. Pierwsz(cid:200) czynno(cid:258)ci(cid:200) jest utworzenie egzemplarza Excel.Application. $Excel = New-Object -ComObject Excel.Application W tym momencie w Windowsie powinien zosta(cid:202) ju(cid:285) uruchomiony proces Excela, ale samo okno programu stanie si(cid:218) widoczne dopiero po ustawieniu jego widoczno(cid:258)ci. $Excel.visible = $True Nast(cid:218)pnie musimy utworzy(cid:202) skoroszyt i doda(cid:202) do niego jeden arkusz kalkulacyjny. $ExcelWB = $Excel.Workbooks.Add() $ExcelWS = $ExcelWB.Worksheets.Item(1) Po przygotowaniu podstawowych sk(cid:239)adników mo(cid:285)emy przyst(cid:200)pi(cid:202) do wype(cid:239)niania arkusza da- nymi. Najpierw w pierwszym wierszu zapiszemy tytu(cid:239) raportu. $ExcelWS.Cells.Item(1,1) = Raport o stanie us(cid:239)ug $ExcelWS.Range( A1 , B1 ).Cells.Merge() 47 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Nast(cid:218)pnie w drugim wierszu utworzymy nag(cid:239)ówek tabeli sk(cid:239)adaj(cid:200)cy si(cid:218) z dwóch kolumn: Na- zwa us(cid:239)ugi i Stan us(cid:239)ugi. $ExcelWS.Cells.Item(2,1) = Nazwa us(cid:239)ugi $ExcelWS.Cells.Item(2,2) = Stan us(cid:239)ugi Pó(cid:283)niej za pomoc(cid:200) polecenia Get-Service pobierzemy list(cid:218) wszystkich us(cid:239)ug dzia(cid:239)aj(cid:200)cych w systemie Windows i za pomoc(cid:200) p(cid:218)tli ForEach utworzymy dla ka(cid:285)dej z nich po jednym wier- szu w arkuszu. $row = 3 ForEach($Service in Get-Service) { $ExcelWS.Cells.Item($row,1) = $Service.DisplayName $ExcelWS.Cells.Item($row,2) = $Service.Status.ToString() if($Service.Status -eq Running ) { $ExcelWS.Cells.Item($row,1).Font.ColorIndex = 10 $ExcelWS.Cells.Item($row,2).Font.ColorIndex = 10 } Elseif($Service.Status -eq Stopped ) { $ExcelWS.Cells.Item($row,1).Font.ColorIndex = 3 $ExcelWS.Cells.Item($row,2).Font.ColorIndex = 3 } $row++ } Na koniec zapisujemy raport i zamykamy instancj(cid:218) programu Excel. $ExcelWS.SaveAs( D:\ServicesStatusReport.xlsx ) $Excel.Quit() Wi(cid:218)cej informacji na temat interfejsu COM programu Excel znajduje si(cid:218) na stronie http://msdn.microsoft. com/en-us/library/microsoft.office.interop.excel.application.aspx. Obiekty .NET W rozdziale 1. opisa(cid:239)em, co (cid:239)(cid:200)czy narz(cid:218)dzie Windows PowerShell i platform(cid:218) .NET, a tak(cid:285)e pokaza(cid:239)em ró(cid:285)ne sposoby adaptacji tej platformy w PowerShellu. W tym podrozdziale posze- rzymy wiadomo(cid:258)ci na temat obiektów .NET w PowerShellu. 48 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty Tworzenie obiektów .NET Do tworzenia obiektów .NET najcz(cid:218)(cid:258)ciej u(cid:285)ywa si(cid:218) polecenia New-Object, które ma podobne dzia(cid:239)anie jak operator new w takich j(cid:218)zykach jak C#. Tak, napisa(cid:239)em „najcz(cid:218)(cid:258)ciej”, bo mo(cid:285)na te(cid:285) rzutowa(cid:202) obiekt PowerShella na .NET w sposób pokazany w rozdziale 1. Polecenia New-Object u(cid:285)ywa si(cid:218) do tworzenia zarówno obiektów .NET, jak i COM, ale w tym drugim przypadku nale(cid:285)y poda(cid:202) inne parametry. PS C:\ $date = New-Object -TypeName System.DateTime -ArgumentList 2013,10,24 PS C:\ $date 24 pa(cid:283)dziernika 2013 00:00:00 Typ obiektu mo(cid:285)na zdefiniowa(cid:202) bezpo(cid:258)rednio, bez u(cid:285)ycia parametru -TypeName, poniewa(cid:285) jest to parametr pozycyjny, a wi(cid:218)c taki, którego nazw(cid:218) mo(cid:285)na opu(cid:258)ci(cid:202). PS C:\ $string = New-Object System.String -ArgumentList PowerShell jest super! PS C:\ $string PowerShell jest super! W tym przyk(cid:239)adzie utworzyli(cid:258)my za pomoc(cid:200) polecenia New-Object dwa obiekty .NET typów DateTime i String oraz przekazali(cid:258)my warto(cid:258)ci do konstruktora przy u(cid:285)yciu parametru -ArgumentList. Kod ten jest równowa(cid:285)ny z poni(cid:285)szym: PS C:\ [datetime] $date = 2013/10/24 PS C:\ [string] $string = PowerShell jest super! Rozszerzanie obiektów .NET Egzemplarze obiektów .NET mo(cid:285)na rozszerza(cid:202) o w(cid:239)asne w(cid:239)asno(cid:258)ci i sk(cid:239)adowe, które dodaje si(cid:218) za pomoc(cid:200) polecenia Add-Member. Poni(cid:285)ej znajduje si(cid:218) przyk(cid:239)ad dodania za pomoc(cid:200) polecenia Add-Member sk(cid:239)adowej NoteProperty do istniej(cid:200)cego obiektu. W tym przypadku (cid:239)adujemy plik XML w obiekcie xml, a nast(cid:218)pnie dodajemy do niego sk(cid:239)adow(cid:200) typu NoteProperty o nazwie Description, w której wpisujemy opis zawarto(cid:258)ci pliku. #Load XML file PS C:\ [xml] $xml = Get-Content D:\Employees.xml #Add new NoteProperty Member using Add-Member PS C:\ Add-Member -InputObject $xml -MemberType NoteProperty -Name Description -Value Baza danych pracowniczych #Show the new added member 49 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET PS C:\ $xml | Get-Member -MemberType NoteProperty | fl TypeName : System.Xml.XmlDocument Name : Description MemberType : NoteProperty Definition : System.String Description=Employees information database W drugim przyk(cid:239)adzie poka(cid:285)(cid:218), jak doda(cid:202) w(cid:239)asn(cid:200) metod(cid:218) typu ScriptMethod, która b(cid:218)dzie wy- konywa(cid:239)a blok skryptowy na obiekcie array. Metod(cid:218) t(cid:218) nazwiemy Censored() i b(cid:218)dzie ona sprawdza(cid:239)a tekst i zast(cid:218)powa(cid:239)a nieprzyzwoite s(cid:239)owa gwiazdkami: # Tworzy tablic(cid:266) adresów URL PS C:\ $websites = @( facebook.com , twitter.com , google.com , xxx.com ) # Dodaje do obiektu tablicowego now(cid:261) sk(cid:225)adow(cid:261) typu ScriptMethod PS C:\ Add-Member -InputObject $websites -MemberType ScriptMethod -Name Censored -Value {$this -replace xxx , *** } # Wykonuje nowo dodan(cid:261) metod(cid:266) PS C:\ $websites.Censored() facebook.com twitter.com google.com ***.com Wi(cid:218)cej informacji na temat typów sk(cid:239)adowych znajduje si(cid:218) w artykule na stronie http://msdn.microsoft. com/en-us/library/windows/desktop/system.management.automation.psmembertypes(v=vs.85).aspx. Rozszerzanie typów platformy .NET W Windows PowerShellu mo(cid:285)na definiowa(cid:202) typy (klasy) platformy .NET, aby móc pó(cid:283)niej tworzy(cid:202) ich obiekty za pomoc(cid:200) polecenia New-Object. Typy te mo(cid:285)na definiowa(cid:202) w plikach z kodem (cid:283)ród(cid:239)owym, plikach z(cid:239)o(cid:285)e(cid:241), a nawet przy u(cid:285)yciu (cid:258)ródliniowego kodu w j(cid:218)zykach C#, VB oraz JScript. Definiowanie typu obiektów przy u(cid:285)yciu (cid:258)ródliniowej klasy C# Poni(cid:285)ej znajduje si(cid:218) przyk(cid:239)ad utworzenia nowego typu obiektów ze (cid:258)ródliniowej klasy w j(cid:218)zy- ku C#. Najpierw zosta(cid:239)a utworzona prosta klasa reprezentuj(cid:200)ca kalkulator zawieraj(cid:200)ca cztery metody odpowiadaj(cid:200)ce czterem dzia(cid:239)aniom arytmetycznym. Nast(cid:218)pnie za pomoc(cid:200) polecenia Add-Type dodamy t(cid:218) klas(cid:218) do bie(cid:285)(cid:200)cej sesji PowerShella. Na koniec utworzymy nowy obiekt tej klasy za pomoc(cid:200) polecenia New-Object. PS C:\ $myCalc = @” public class PSCalc { public int Add(int x, int y) {return x + y;} 50 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty public int Subtract(int x, int y) {return x – y;} public int Multiply(int x, int y) {return x * y;} public int Divid(int x, int y) {return x / y;} } ”@ PS C:\ Add-Type –TypeDefinition $myCalc PS C:\ $op = New-Object PSCalc Teraz przy u(cid:285)yciu obiektu $op mo(cid:285)na wykona(cid:202) dowoln(cid:200) ze zdefiniowanych w klasie metod. PS C:\ $op.Multiply(4,8) 32 Ciekawe jest to, (cid:285)e mo(cid:285)na nawet wywo(cid:239)ywa(cid:202) statyczne metody klas bezpo(cid:258)rednio w Po- werShellu. Na przyk(cid:239)ad klasa System.Math zawiera wiele metod statycznych, z których jedna nazywa si(cid:218) Pow() i s(cid:239)u(cid:285)y do obliczania pot(cid:218)g. Aby wywo(cid:239)a(cid:202) j(cid:200) w PowerShellu, nale(cid:285)y napisa(cid:202) nast(cid:218)puj(cid:200)ce polecenie: PS C:\ [System.Math]::Pow(2,4) Definiowanie typów obiektowych przy u(cid:285)yciu nazwy z(cid:239)o(cid:285)enia lub pliku Innym sposobem zdefiniowania nowego typu obiektowego jest u(cid:285)ycie nazwy z(cid:239)o(cid:285)enia (prze- strzeni nazw) lub pliku z(cid:239)o(cid:285)enia (DLL) i wykonanie polecenia New-Object. Poni(cid:285)ej znajduje si(cid:218) przyk(cid:239)ad dodania nowego typu przy u(cid:285)yciu nazwy z(cid:239)o(cid:285)enia: PS C:\ $form = New-Object System.Windows.Forms New-Object : Cannot find type [System.Windows.Forms]: verify that the assembly (cid:180)containing this type is loaded. At line:1 char:8 + $form = New-Object System.Windows.Forms + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidType: (:) [New-Object], (cid:180)PSArgumentException + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand Próbowali(cid:258)my utworzy(cid:202) za pomoc(cid:200) polecenia New-Object (cid:258)ci(cid:258)le typowan(cid:200) ogóln(cid:200) kolekcj(cid:218), ale program zg(cid:239)osi(cid:239) b(cid:239)(cid:200)d, poniewa(cid:285) konsoli PowerShell nie uda(cid:239)o si(cid:218) znale(cid:283)(cid:202) z(cid:239)o(cid:285)enia zawieraj(cid:200)- cego ten typ. Rozwi(cid:200)zaniem jest za(cid:239)adowanie odpowiedniego z(cid:239)o(cid:285)enia. PS C:\ Add-Type -AssemblyName System.Windows.Forms Ponadto zamiast u(cid:285)ywa(cid:202) parametru -AssemblyName mo(cid:285)emy za(cid:239)adowa(cid:202) klasy prosto z pliku DLL przy u(cid:285)yciu parametru -Path. PS C:\ Add-Type -Path D:\myApp\program.dll 51 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Modu(cid:239)y Windows PowerShella Modu(cid:239)y w Windows PowerShellu s(cid:239)u(cid:285)(cid:200) do porz(cid:200)dkowania i pakowania skryptów i plików z kodem w nadaj(cid:200)ce si(cid:218) do wielokrotnego u(cid:285)ytku paczki. Dost(cid:218)pnych jest du(cid:285)o wbudowanych modu(cid:239)ów zawieraj(cid:200)cych polecenia dotycz(cid:200)ce prawie wszystkich ról i funkcji Windows Servera. Na przy- k(cid:239)ad istnieje modu(cid:239) dla mened(cid:285)era serwerów, Hyper-V, Active Directory oraz IIS. Aby wy(cid:258)wietli(cid:202) list(cid:218) wszystkich modu(cid:239)ów zainstalowanych w systemie operacyjnym, nale(cid:285)y wykona(cid:202) polecenie Get-Module z parametrami -ListAvailable. PS C:\ Get-Module -ListAvailable | Select Name,Version,ModuleType Name Version ModuleType ---- ------- ---------- AppLocker 2.0.0.0 Manifest AssignedAccess 1.0.0.0 Script BitLocker 1.0.0.0 Manifest Dism 2.0 Script DnsClient 1.0.0.0 Manifest Hyper-V 1.1 Binary (...) Z tego wynika, (cid:285)e istnieje wiele ró(cid:285)nych rodzajów modu(cid:239)ów PowerShella. Omówi(cid:239)em je w na- st(cid:218)pnym podrozdziale, w którym pokazuj(cid:218), jak si(cid:218) tworzy nowe modu(cid:239)y. Aby móc u(cid:285)y(cid:202) jakiegokolwiek modu(cid:239)u — niewa(cid:285)ne, czy wbudowanego czy zewn(cid:218)trznego — nale(cid:285)y go zaimportowa(cid:202) do sesji PowerShella za pomoc(cid:200) polecenia Import-Module Nazwa- (cid:180)Modu(cid:239)u . #Import Hyper-V and AppLocker modules PS C:\ Import-Module –Name Hyper-V,AppLocker Je(cid:258)li importowany modu(cid:239) znajduje si(cid:218) w domy(cid:258)lnym katalogu modu(cid:239)ów konsoli, to jako ar- gument wystarczy wpisa(cid:202) tylko jego nazw(cid:218). Ale je(cid:258)li importowany jest modu(cid:239) z innego katalo- gu, nale(cid:285)y poda(cid:202) pe(cid:239)n(cid:200) (cid:258)cie(cid:285)k(cid:218). Ponadto, je(cid:285)eli u(cid:285)ywasz wersji PowerShell ISE 3.0 lub nowszej i wpiszesz nazw(cid:218) polecenia znajduj(cid:200)cego si(cid:218) w module, to odpowiedni modu(cid:239) zostanie za(cid:239)a- dowany automatycznie. Aby wy(cid:258)wietli(cid:202) domy(cid:258)lne (cid:258)cie(cid:285)ki modu(cid:239)ów, nale(cid:285)y u(cid:285)y(cid:202) zmiennej (cid:258)rodowiskowej $env:PSModulePath. Mo(cid:285)na te(cid:285) doda(cid:202) (cid:258)cie(cid:285)k(cid:218) do w(cid:239)asnych modu(cid:239)ów: $env:PSModulePath += ; C:\MyModules . Wi(cid:218)cej informacji na temat PSModulePath znajduje si(cid:218) na stronie http://msdn.microsoft.com/en-us/ library/dd878326(v=vs.85).aspx. 52 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty Tworzenie modu(cid:239)ów Windows PowerShella W tym podrozdziale przedstawiam opisy i przyk(cid:239)ady tworzenia ró(cid:285)nych rodzajów modu(cid:239)ów. Modu(cid:239)y skryptowe Modu(cid:239) skryptowy to plik PowerShella z rozszerzeniem psm1 i kod zawieraj(cid:200)cym funkcje, zmienne oraz aliasy. Tworzenie modu(cid:239)u rozpoczniemy od napisania dwóch prostych funkcji (jedna b(cid:218)dzie sumo- wa(cid:202), a druga odejmowa(cid:202) dwie liczby) i dla ka(cid:285)dej z nich utworzymy alias. Nast(cid:218)pnie zapiszemy skrypt w pliku o rozszerzeniu psm1. Nazwa pliku b(cid:218)dzie stanowi(cid:202) nazw(cid:218) modu(cid:239)u przy jego importowaniu. Function Add-Numbers($x,$y) { $x + $y } Function Subtract-Numbers($x,$y) { $x - $y } New-Alias -Name an -Value Add-Numbers New-Alias -Name sn -Value Subtract-Numbers # Eksportuje sk(cid:225)adowe modu(cid:225)u Export-ModuleMember -Function * -Alias * Pewnie zauwa(cid:285)y(cid:239)e(cid:258) na ko(cid:241)cu tego kodu nowe polecenie Export-ModuleMember. S(cid:239)u(cid:285)y ono do znajdowania typów PowerShella, to znaczy funkcji, aliasów i zmiennych, i ich eksportowania jako sk(cid:239)adowych modu(cid:239)u podczas importowania tego modu(cid:239)u za pomoc(cid:200) polecenia Import-Module. PS C:\ Import-Module D:\myModules\ScriptModule.psm1 -Force Podczas importowania tego modu(cid:239)u zostanie wy(cid:258)wietlone nast(cid:218)puj(cid:200)ce ostrze(cid:285)enie: WARNING: The names of some imported commands from the module ScriptModule include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb. (OSTRZE(cid:191)ENIE: Nazwy niektórych zaimportowanych polece(cid:241) z modu(cid:239)u ScriptModule zawieraj(cid:200) niezatwierdzone czasowniki, przez które mo(cid:285)e by(cid:202) trudno je wykry(cid:202). Aby znale(cid:283)(cid:202) polecenia zawieraj(cid:200)ce niezatwierdzone czasowniki, ponownie wykonaj polecenie Import-Module z parametrem Verbose. List(cid:218) zatwierdzonych czasowników mo(cid:285)na wy(cid:258)wietli(cid:202), wykonuj(cid:200)c polecenie Get-Verb). 53 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Ostrze(cid:285)enie to zostanie wy(cid:258)wietlone z powodu u(cid:285)ycia niestandardowego (niezatwierdzonego) czasownika w nazwie funkcji. Nie ma to wp(cid:239)ywu na dzia(cid:239)anie funkcji, ale dla zapewniania spój- no(cid:258)ci zaleca si(cid:218) u(cid:285)ywanie standardowych czasowników. List(cid:218) zatwierdzonych czasowników i ich kategorii mo(cid:285)na wy(cid:258)wietli(cid:202) za pomoc(cid:200) polecenia Get-Verb. Ponadto mo(cid:285)na wy(cid:239)(cid:200)czy(cid:202) pojawianie si(cid:218) tego ostrze(cid:285)enia, dodaj(cid:200)c prze(cid:239)(cid:200)cznik -Disable (cid:180)NameChecking. Za(cid:239)adowany modu(cid:239) mo(cid:285)na znale(cid:283)(cid:202) za pomoc(cid:200) polecenia Get-Module. PS C:\ Get-Module ScriptModule | fl Name : scriptmodule Path : D:\scriptmodule.psm1 ModuleType : Script Version : 0.0 NestedModules : {} ExportedFunctions : {Add-Numbers, Subtract-Numbers} ExportedCmdlets : ExportedVariables : ExportedAliases : {an, sn} Modu(cid:239)y binarne Modu(cid:239) binarny to plik DLL zawieraj(cid:200)cy skompilowany kod, np. klas polece(cid:241) i dostawców. Bardzo dobrym przyk(cid:239)adem tego rodzaju modu(cid:239)ów s(cid:200) modu(cid:239)y wbudowane PowerShella. PS C:\ Get-Module –Name Microsoft.PowerShell.* | Select Name,NestedModules Tworzenie modu(cid:239)u binarnego W tym podrozdziale poka(cid:285)(cid:218) Ci krok po kroku, jak utworzy(cid:202) modu(cid:239) binarny. W odró(cid:285)nieniu od innych modu(cid:239)ów modu(cid:239)y binarne tworzy si(cid:218) w (cid:258)rodowisku Microsoft Visual Studio. Utworzymy modu(cid:239) o nazwie MyBinaryModule zawieraj(cid:200)cy dwa polecenia: Get-EvenOrOdd, przyjmuj(cid:200)ce tablic(cid:218) liczb ca(cid:239)kowitych i sprawdzaj(cid:200)ce warto(cid:258)ci parzyste i nieparzyste, oraz Validate-EmailAddress, przyjmuj(cid:200)ce (cid:239)a(cid:241)cuch i sprawdzaj(cid:200)ce, czy ma poprawny format adresu e-mail. Prac(cid:218) nale(cid:285)y zacz(cid:200)(cid:202) od utworzenia projektu biblioteki klas w Visual Studio. Nazwa tej biblioteki b(cid:218)dzie pó(cid:283)niej nazw(cid:200) modu(cid:239)u, wi(cid:218)c w polu Name (nazwa) wpiszemy MyBinaryModule (jak na zrzucie ekranu na nast(cid:218)pnej stronie), chocia(cid:285) je(cid:258)li wolisz co(cid:258) innego, to nie mam nic przeciwko temu. Nast(cid:218)pnie dodajemy odwo(cid:239)anie do g(cid:239)ównej przestrzeni nazw Windows PowerShella, czyli System.Management.Automation. 54 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty Plik DLL System.Management.Automation znajduje si(cid:218) w katalogu C:\Windows\Assembly\GAC_MSIL\ System.Management.Automation\1.0.0.0__31bf3856ad364e35. 55 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Teraz wszystko powinno by(cid:202) gotowe do rozpocz(cid:218)cia pisania polece(cid:241) w j(cid:218)zyku C#. Aby zazna- czy(cid:202), (cid:285)e tworzymy klas(cid:218) polece(cid:241) PowerShella, musimy doda(cid:202) jej atrybut [Cmdlet()]. Atrybut ten zawiera nazw(cid:218) klasy z(cid:239)o(cid:285)on(cid:200) z dwóch s(cid:239)ów: czasownika i rzeczownika. Ponadto klasa polecenia cmdlet powinna by(cid:202) wyprowadzona z klasy bazowej Cmdlet, która zawiera trzy metody wirtualne wywo(cid:239)ywane przez system wykonawczy: BeginProcessing(), ProcessRecord() i EndProcessing(). W klasie musi by(cid:202) zdefiniowana przynajmniej jedna z tych metod. [Cmdlet(VerbsCommon.Get, EvenOrOdd )] public class EvenorOdd: Cmdlet { protected override void ProcessRecord() { base.ProcessRecord(); } } Ponadto w klasie mo(cid:285)na zdefiniowa(cid:202) parametr za pomoc(cid:200) atrybutu [Parameter()]. [Parameter(Position = 0, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, HelpMessage = @ Zakres liczb do sprawdzenia. )] public int[] Numbers { get { return num; } set { num = value; } } private int[] num; Nad atrybutem [Parameter()] mo(cid:285)na zdefiniowa(cid:202) atrybut [Validate*()], s(cid:239)u(cid:285)(cid:200)cy do sprawdze- nia poprawno(cid:258)ci argumentów tego parametru. Przyk(cid:239)adowo mo(cid:285)na zdefiniowa(cid:202) zbiór trzech dopuszczalnych warto(cid:258)ci dla parametru PersonName: [ValidateSet( Gates , Jobs , Ballmer )] [Parameter(Position = 0, Mandatory = true)] public string PersonName { get { return personName; } set { personName = value; } } private string personName; Mo(cid:285)na te(cid:285) doda(cid:202) metody WriteVerbose() i WriteDebug(), aby podczas wykonywania polecenia umo(cid:285)liwi(cid:202) wy(cid:258)wietlanie danych diagnostycznych za pomoc(cid:200) prze(cid:239)(cid:200)czników -Debug i -Verbose. Ponadto za pomoc(cid:200) metody WriteObject() zwracamy wynik dzia(cid:239)ania polecenia. Wi(cid:218)cej informacji o g(cid:239)ównej przestrzeni nazw PowerShella znajduje si(cid:218) na stronie http://msdn.microsoft.com/ en-us/library/System.Management.Automation(v=vs.85).aspx. 56 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty Uko(cid:241)czony kod (cid:283)ród(cid:239)owy powinien wygl(cid:200)da(cid:202) tak, jak na poni(cid:285)szym zrzucie ekranu: Teraz trzeba skompilowa(cid:202) projekt do postaci binarnego modu(cid:239)u. W Visual Studio nale(cid:285)y w tym celu klikn(cid:200)(cid:202) polecenie Build-Build Solution (kompilacja-kompiluj rozwi(cid:200)zanie). Po zako(cid:241)czeniu kompilacji w podfolderze projektu bin/debug pojawi si(cid:218) plik o nazwie MyBinaryModule.dll. Gratulacje, w(cid:239)a(cid:258)nie utworzy(cid:239)e(cid:258) pierwszy binarny modu(cid:239). Przejd(cid:283) do konsoli PowerShell i zaim- portuj go za pomoc(cid:200) polecenia Import-Module. PS C:\ Import-Module D:\MyBinaryModule\MyBinaryModule.dll PS C:\ Get-Command -Module MyBinaryModule | Select CommandType, Name CommandType Name ----------- ---- Cmdlet Get-EvenOrOdd Cmdlet Validate-EmailAddress # U(cid:298)ycie polecenia Validate-EmailAddress PS C:\ Validate-EmailAddress -EmailAddress sherif@xyz -Verbose VERBOSE: Validating Email Address: sherif@xyz False 57 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET PS C:\ Validate-EmailAddress -EmailAddress sherif@xyz.com True # U(cid:298)ycie polecenia Get-EvenOrOdd PS C:\Users\v-shta Get-EvenOrOdd -Numbers @(2,5,13,17,24,33) 2 to liczba parzysta 5 to liczba nieparzysta 13 to liczba nieparzysta (...) Modu(cid:239)y z manifestem Modu(cid:239) z manifestem to modu(cid:239) zawieraj(cid:200)cy plik z danymi PowerShella, -manifest- (.psd1), opi- suj(cid:200)cymi sk(cid:239)adniki i zawarto(cid:258)(cid:202) oraz sposób przetwarzania modu(cid:239)u. Plik modu(cid:239)u z manifestem mo(cid:285)e zawiera(cid:202) jeden lub wi(cid:218)cej zagnie(cid:285)d(cid:285)onych modu(cid:239)ów skryptowych lub binarnych. Manifest jest plikiem tekstowym zawieraj(cid:200)cym informacje o module, np. kto go utworzy(cid:239), w jakiej firmie powsta(cid:239), ogólny opis dzia(cid:239)ania, jakie pliki trzeba do(cid:239)(cid:200)czy(cid:202), jakie z(cid:239)o(cid:285)enia trzeba za(cid:239)adowa(cid:202), najstarsza obs(cid:239)ugiwana wersja PowerShella oraz najstarsza obs(cid:239)ugiwana wersja platformy .NET. W wi(cid:218)kszo(cid:258)ci przypadków plik manifestu jest niepotrzebny, chyba (cid:285)e chce si(cid:218) wyeksportowa(cid:202) z(cid:239)o(cid:285)enie zainstalowane w globalnym buforze z(cid:239)o(cid:285)e(cid:241), u(cid:285)y(cid:202) funkcji pomocy z mo(cid:285)liwo(cid:258)ci(cid:200) aktualizacji lub ustawi(cid:202) pewne ograniczenia. Aby utworzy(cid:202) manifest dla modu(cid:239)u, nale(cid:285)y za pomoc(cid:200) polecenia New-ModuleManifest utworzy(cid:202) pusty szablon manifestu, który nast(cid:218)pnie mo(cid:285)na otworzy(cid:202) i zmodyfikowa(cid:202) w dowolnym edyto- rze tekstu. Ponadto dane manifestu mo(cid:285)na zdefiniowa(cid:202) podczas tworzenia szablonu. W tym celu nale(cid:285)y u(cid:285)y(cid:202) parametrów polecenia New-ModuleManifest. New-ModuleManifest -Author Sherif Talaat -CompanyName Packt Publishing - (cid:180)ModuleVersion 1.0 -ProcessorArchitecture Amd64 -PowerShellVersion 3.0 - (cid:180)PowerShellHostName ConsoleHost, Windows PowerShell ISE Host -Description (cid:180) Mój pierwszy manifest modu(cid:239)u -FileList myScriptModule.psm1 -ModuletoProcess (cid:180) Bitlocker -Path D:\Modules\myScriptModule\myScriptModule.psd1 Na nast(cid:218)pnej stronie zrzut ekranu przedstawia przyk(cid:239)adow(cid:200) zawarto(cid:258)(cid:202) pliku manifestu. Modu(cid:239)y dynamiczne Modu(cid:239) dynamiczny to modu(cid:239), który nie jest przechowywany na dysku twardym, lecz w pa- mi(cid:218)ci, i zostaje usuni(cid:218)ty po zako(cid:241)czeniu sesji dzia(cid:239)ania konsoli. Tego rodzaju modu(cid:239)y mo(cid:285)na tworzy(cid:202) z funkcji i bloków skryptowych w sesji. S(cid:200) one przydatne programistom pos(cid:239)uguj(cid:200)cym si(cid:218) technikami obiektowymi oraz administratorom, którzy chc(cid:200) wykonywa(cid:202) wybrane modu(cid:239)y na zdalnych komputerach przy u(cid:285)yciu narz(cid:218)dzi PowerShella do pracy zdalnej. 58 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty Do tworzenia modu(cid:239)ów dynamicznych u(cid:285)ywa si(cid:218) polecenia New-Module z parametrami -Function i -ScriptBlock. Za pomoc(cid:200) tych parametrów okre(cid:258)la si(cid:218) funkcje i bloki skryptowe, które maj(cid:200) si(cid:218) znale(cid:283)(cid:202) w danym module. # Tworzy dynamiczny modu(cid:225) z jedn(cid:261) funkcj(cid:261) PS C:\ New-Module -ScriptBlock {Function Send-Greetings($name){ Dzie(cid:241) dobry, $name }} # Uruchamia funkcj(cid:266) PS C:\ Send-Greetings –name Sherif Dzie(cid:241) dobry, Sherif Diagnostyka skryptów i obs(cid:239)uga b(cid:239)(cid:218)dów W poprzednim rozdziale napisa(cid:239)em, (cid:285)e w PowerShellu mo(cid:285)na diagnozowa(cid:202) zarówno lokalne, jak i zdalne skrypty. Funkcja diagnostyczna w PowerShellu dzia(cid:239)a podobnie jak w innych j(cid:218)zy- kach programowania. Mo(cid:285)na ustawia(cid:202) punkty wstrzymania, wykonywa(cid:202) funkcje krok po kroku, przeskakiwa(cid:202) instrukcje, a nawet wywo(cid:239)ywa(cid:202) stos. W konsoli PowerShella funkcje diagnostyczne obs(cid:239)uguje si(cid:218) za pomoc(cid:200) polece(cid:241), a w PowerShell ISE (cid:650) za pomoc(cid:200) graficznego interfejsu u(cid:285)ytkownika i polece(cid:241). 59 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET Narz(cid:218)dzia do diagnostyki w PowerShell ISE znajduj(cid:200) si(cid:218) w menu Debug (diagnostyka), któ- rego zawarto(cid:258)(cid:202) wida(cid:202) na poni(cid:285)szym zrzucie: Ponadto konsola Windows PowerShell zawiera zestaw polece(cid:241), za pomoc(cid:200) których mo(cid:285)na prze- prowadzi(cid:202) diagnostyk(cid:218) skryptu bez u(cid:285)ywania graficznego interfejsu u(cid:285)ytkownika. Polecenia te s(cid:200) bardzo przydatne, gdy u(cid:285)ywa si(cid:218) systemu Windows Server Core, w którym brak PowerShell ISE. Wszystkie te polecenia s(cid:239)u(cid:285)(cid:200) do zarz(cid:200)dzania punktami wstrzymania w skryptach. PS C:\ Get-Command -Name *Breakpoint | Select Name Name ---- Disable-PSBreakpoint Enable-PSBreakpoint Get-PSBreakpoint Remove-PSBreakpoint Set-PSBreakpoint Oprócz polece(cid:241) PSBreakpoint mo(cid:285)na u(cid:285)ywa(cid:202) jeszcze paru dodatkowych polece(cid:241), które s(cid:200) do- st(cid:218)pne wy(cid:239)(cid:200)cznie w trybie diagnostycznym. Punkty wstrzymania Punkt wstrzymania jest wyznaczonym w kodzie (cid:283)ród(cid:239)owym miejscem, w którym program powinien wstrzyma(cid:202) dzia(cid:239)anie i w(cid:239)(cid:200)czy(cid:202) diagnostyk(cid:218). W Windows PowerShellu dost(cid:218)pne s(cid:200) trzy rodzaje punktów wstrzymania, które mo(cid:285)na w(cid:239)(cid:200)cza(cid:202) i wy(cid:239)(cid:200)cza(cid:202) za pomoc(cid:200) polecenia Set- (cid:180)PSBreakpoint: (cid:81) Punkt wstrzymania na wybranym wierszu (cid:650) wykonywanie skryptu zatrzymuje si(cid:218) na wyznaczonym wierszu kodu. Punkty wstrzymania tego typu definiuje si(cid:218) przez podanie numeru wiersza i przy u(cid:285)yciu prze(cid:239)(cid:200)cznika -Line. PS C:\ Set-PSBreakpoint –script c:\myscript.ps1 –Line 7 60 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty (cid:81) Punkt wstrzymania na zmiennej (cid:650) wykonywanie skryptu zatrzymuje si(cid:218) po zmianie warto(cid:258)ci okre(cid:258)lonej zmiennej. Punkty wstrzymania tego typu definiuje si(cid:218) przez podanie nazwy zmiennej bez znaku $ i przy u(cid:285)yciu prze(cid:239)(cid:200)cznika -Variable. PS C:\ Set-PSBreakpoint –script c:\myscript.ps1 –Variable Services (cid:81) Punkt wstrzymania na poleceniu (cid:650) wykonywanie skryptu zatrzymuje si(cid:218) przed rozpocz(cid:218)ciem wykonywania okre(cid:258)lonego polecenia. Poleceniem mo(cid:285)e by(cid:202) polecenie cmdlet lub nazwa utworzonej przez programist(cid:218) funkcji. Punkty wstrzymania tego typu definiuje si(cid:218) przez podanie nazwy polecenia i przy u(cid:285)yciu prze(cid:239)(cid:200)cznika -Command. PS C:\ Set-PSBreakpoint –script c:\myscript.ps1 –Command GetProcess Zdefiniowali(cid:258)my w naszym skrypcie trzy punkty wstrzymania, ka(cid:285)dy innego typu. Wszystkie punkty wstrzymania ustawione w skrypcie mo(cid:285)na wy(cid:258)wietli(cid:202) za pomoc(cid:200) polecenia Get- (cid:180)PSBreakpoint. PS C:\ Get-PSBreakpoint –Script myscript.ps1 ID Script Line Command Variable -- ------ ---- ------- -------- 11 myscript.ps1 7 12 myscript.ps1 Services 13 myscript.ps1 Get-Process Do usuwania punktów wstrzymania s(cid:239)u(cid:285)y polecenie Remove-PSBreakpoint, ale mo(cid:285)na te(cid:285) je tylko czasowo wy(cid:239)(cid:200)cza(cid:202) przy u(cid:285)yciu polecenia Disable-PSBreakpoint. Czasowo wy(cid:239)(cid:200)czony punkt wstrzymania mo(cid:285)na z powrotem w(cid:239)(cid:200)czy(cid:202) za pomoc(cid:200) polecenia Enable-PSBreakpoint. # Wy(cid:225)(cid:261)cza punkty wstrzymania na zmiennej Get-PSBreakpoint -Variable Services | Disable-PSBreakpoint # W(cid:225)(cid:261)cza punkty wstrzymania na zmiennej Get-PSBreakpoint -Variable Services | Enable-PSBreakpoint # Usuwa punkty wstrzymania na zmiennej Get-PSBreakpoint -Variable Services | Remove-PSBreakpoint Diagnozowanie skryptów Po zdefiniowaniu punktów wstrzymania skrypt mo(cid:285)na uruchomi(cid:202) w normalny sposób. Gdy program dojdzie do pierwszego punktu, wy(cid:258)wietli stosown(cid:200) informacj(cid:218). Od tej pory na pocz(cid:200)t- ku wiersza polece(cid:241), przed napisem PS C:\ , b(cid:218)dzie si(cid:218) znajdowa(cid:239) znacznik [DBG]: informu- j(cid:200)cy, (cid:285)e aktywny jest tryb diagnostyczny. Tryb ten pozostanie w(cid:239)(cid:200)czony, a(cid:285) wy(cid:239)(cid:200)czy si(cid:218) debuger za pomoc(cid:200) klawiszy Shift+F5. 61 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET W trybie diagnostycznym mo(cid:285)na prowadzi(cid:202) normaln(cid:200) diagnostyk(cid:218) programu za pomoc(cid:200) pole- ce(cid:241) wymienionych w poni(cid:285)szej tabeli: Czynno(cid:258)(cid:202) Wkroczenie Wyj(cid:258)cie Pomini(cid:218)cie Kontynuacja Wy(cid:258)wietlenie listy Zatrzymanie Pobranie stosu wywo(cid:239)a(cid:241) Polecenie StepInto StepOut StepOver Continue List Quit Get-PSCallStack Skrót S O V C L Q K Kiedy(cid:258) w Windows PowerShellu mo(cid:285)na by(cid:239)o diagnozowa(cid:202) tylko skrypty uruchomione lokalnie. Próby ustawienia punktów wstrzymania w zdalnej sesji ko(cid:241)czy(cid:239)y si(cid:218) b(cid:239)(cid:218)dem. Ale w Windows PowerShellu 4.0 zmieniono to i mo(cid:285)na ju(cid:285) ustawia(cid:202) punkty wstrzymania w zdalnych sesjach, a tak(cid:285)e diagnozowa(cid:202) zdalne skrypty w taki sam sposób jak lokalne. Aby mo(cid:285)na by(cid:239)o korzysta(cid:202) z mo(cid:285)liwo(cid:258)ci zdalnego diagnozowania skryptów, zarówno na lokalnym, jak i na zdalnym kom- puterze musi by(cid:202) zainstalowane narz(cid:218)dzie Windows PowerShell 4.0. Techniki obs(cid:239)ugi b(cid:239)(cid:218)dów W Windows PowerShellu do obs(cid:239)ugi b(cid:239)(cid:218)dów terminalnych (wyj(cid:200)tków), podobnie jak w j(cid:218)zyku C#, u(cid:285)ywa si(cid:218) instrukcji Try{}, Catch{} oraz Finally{}. B(cid:239)(cid:218)dy terminalne s(cid:200) obs(cid:239)ugiwane przez instrukcj(cid:218) Catch{} tylko wtedy, gdy zmieni si(cid:218) warto(cid:258)(cid:202) zmiennej $ErrorActionPreference na stop. 62 Kup książkęPoleć książkę Rozdzia(cid:225) 2. • PowerShell w s(cid:225)u(cid:298)bie programisty $ErrorActionPreference = stop Try { Get-ChildItem C:\movies } Catch [System.Exception] { Nie znaleziono obiektu. } Finally { New-item -ItemType Directory -Path C:\Movies Obiekt zosta(cid:239) utworzony. } Wi(cid:218)cej informacji na temat instrukcji Try, Catch i Finally mo(cid:285)na znale(cid:283)(cid:202) w pomocy About w nast(cid:218)- puj(cid:200)cych tematach: (cid:81) About_Trap (cid:81) About_Throw (cid:81) About_Try_Catch_Finally Zmienne $Error i $LastExitCode Gdy podczas dzia(cid:239)ania PowerShella wyst(cid:200)pi b(cid:239)(cid:200)d, zostaje on zapisany w globalnej zmiennej $Error. Jest to egzemplarz klasy ArrayList, który zawiera obiekty b(cid:239)(cid:218)dów PowerShella i w któ- rym ostatni b(cid:239)(cid:200)d jest zapisany pod indeksem o numerze zero. Ze zmiennej tej mo(cid:285)na wyci(cid:200)gn(cid:200)(cid:202) ró(cid:285)ne szczegó(cid:239)owe informacje na temat zaistnia(cid:239)ych b(cid:239)(cid:218)dów, jak zosta(cid:239)o pokazane poni(cid:285)ej: PS D:\ $Error[0].Exception Cannot find path C:\movies because it does not exist. PS D:\ $Error[0].FullyQualifiedErrorId PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand PS D:\ $Error[0].ScriptStackTrace at ScriptBlock , No file : line 5 Wi(cid:218)cej informacji na temat rejestracji b(cid:239)(cid:218)dów mo(cid:285)na znale(cid:283)(cid:202) na stronie http://msdn.microsoft.com/en- us/library/system.management.automation.errorrecord_members(v=vs.85).aspx. Na podstawie kodu zako(cid:241)czenia okre(cid:258)la si(cid:218) status wykonawczy macierzystych aplikacji, takich jak ping.exe czy robocopy.exe, to znaczy czy ich wykonywanie zako(cid:241)czy(cid:239)o si(cid:218) pomy(cid:258)lnie, czy nie. Najcz(cid:218)(cid:258)ciej warto(cid:258)(cid:202) 0 oznacza powodzenie, a 1 niepowodzenie, ale niektóre aplikacje mog(cid:200) 63 Kup książkęPoleć książkę Windows PowerShell 4.0 dla programistów .NET zwraca(cid:202) bardziej zró(cid:285)nicowane kody oznac
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Windows PowerShell 4.0 dla programistów .NET
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: