Windows Power Shell Przewodnik Po Skryptach

download Windows Power Shell Przewodnik Po Skryptach

of 94

Transcript of Windows Power Shell Przewodnik Po Skryptach

Windows PowerShellPrzewodnik po skryptach

Ed Wilson

Windows PowerShell Przewodnik po skryptach Edycja polska Microsoft Press Original English language edition 2008 by Ed Wilson Tytu oryginau: Windows PowerShell Scripting Guide Polish edition by APN PROMISE Sp. z o. o. Warszawa 2008 APN PROMISE Sp. z o. o., biuro: 00-108 Warszawa, ul. Zielna 39 tel. (022) 355-16-00; fax (022) 355-16-99 e-mail: [email protected] Wszystkie prawa zastrzeone. adna cz niniejszej ksiki nie moe by powielana ani rozpowszechniana w jakiejkolwiek formie i w jakikolwiek sposb (elektroniczny, mechaniczny), wcznie z fotokopiowaniem, nagrywaniem na tamy lub przy uyciu innych systemw bez pisemnej zgody wydawcy. Microsoft, Microsoft Press, Active Directory, ActiveX, Excel, Internet Explorer, MSDN, MSN, Outlook, SQL Server, Visual Basic, Windows, Windows NT, Windows PowerShell, Windows Server, Windows Vista oraz Zune s zarejestrowanymi znakami towarowymi Microsoft Corporation. Wszystkie inne nazwy handlowe i towarowe wystpujce w niniejszej publikacji mog by znakami towarowymi zastrzeonymi lub nazwami zastrzeonymi odpowiednich firm odnonych wacicieli. Przykady firm, produktw, osb i wydarze opisane w niniejszej ksice s fikcyjne i nie odnosz si do adnych konkretnych firm, produktw, osb i wydarze. Ewentualne podobiestwo do jakiejkolwiek rzeczywistej firmy, organizacji, produktu, nazwy domeny, adresu poczty elektronicznej, logo, osoby, miejsca lub zdarzenia jest przypadkowe i niezamierzone. APN PROMISE Sp. z o. o. dooya wszelkich stara, aby zapewni najwysz jako tej publikacji. Jednake nikomu nie udziela si rkojmi ani gwarancji. APN PROMISE Sp. z o. o. nie jest w adnym wypadku odpowiedzialna za jakiekolwiek szkody bdce nastpstwem korzystania z informacji zawartych w niniejszej publikacji, nawet jeli APN PROMISE zostaa powiadomiona o moliwoci wystpienia szkd. ISBN: 978-83-7541-033-4 Przekad: Krzysztof Szkudlarek, Jowita Chociowicz, Barbara Pitkowska, Tomasz Sochacki Redakcja: Marek Wodarz Korekta: Ewa Swdrowska Skad i amanie: MAWart Marek Wodarz

Spis treciPodzikowania ............................................................................................................................... xi Wstp .............................................................................................................................................. xiii

1 Powoka programu Windows PowerShell ................................................................ 1Instalowanie programu Windows PowerShell ........................................................................ 1 Sprawdzanie instalacji za pomoc skryptu w jzyku VBScript ..................................... 1 Wdraanie programu Windows PowerShell ...................................................................... 2 Interakcja z powok ..................................................................................................................... 4 Omwienie narzdzi wiersza polece typu Cmdlet ............................................................. 6 Kongurowanie programu Windows PowerShell.................................................................. 7 Tworzenie prolu programu Windows PowerShell ......................................................... 7 Kongurowanie opcji uruchamiania programu Windows PowerShell....................... 7 Kwestie bezpieczestwa w programie Windows PowerShell ............................................. 8 Kontrolowanie dziaania polece typu Cmdlet ................................................................ 8 Potwierdzanie polece ..........................................................................................................10 Zawieszanie potwierdze wykonywania polece typu Cmdlet .................................12 Przekazywanie opcji dla polece typu cmdlet .....................................................................14 Korzystanie z polecenia Get-Help (Pobierz pomoc) ...........................................................15 Praca z aliasami i przypisywanie skrconych nazw poleceniom typu cmdlet .............18 Dodatkowe zastosowania polece typu cmdlet ..................................................................19 Korzystanie z polecenia Get-ChildItem.............................................................................21 Formatowanie wyjcia ...........................................................................................................21 Stosowanie polecenia cmdlet Get-Command ................................................................29 Eksploracja obiektw przy uyciu polecenia Get-Member .........................................32 Podsumowanie ..............................................................................................................................36

2 Skrypty programu Windows PowerShell ................................................................37Dlaczego warto korzysta ze skryptw? ................................................................................37 Kongurowanie zasady obsugi skryptw .............................................................................40 Uruchamianie skryptw programu Windows PowerShell.................................................43 Stosowanie zmiennych ...............................................................................................................44 Stosowanie staych .......................................................................................................................45 Uywanie instrukcji sterujcych ................................................................................................46 Dodawanie parametrw do polecenia ForEach-Object ...............................................47 Stosowanie parametru Begin ...............................................................................................47 Stosowanie parametru Process ...........................................................................................48 Stosowanie parametru End ..................................................................................................48 Uywanie instrukcji For ...............................................................................................................48 Uywanie instrukcji sucych do podejmowania decyzji .................................................49 Uywanie instrukcji If Elseif Else .................................................................................50 Uywanie instrukcji Switch ...................................................................................................51

Spis treci

v

Praca z typami danych ................................................................................................................55 Odkrywamy moliwoci wyrae regularnych .....................................................................59 Uywanie argumentw podawanych w wierszu polece .................................................63 Podsumowanie ..............................................................................................................................64

3 Zarzdzanie dziennikami ..................................................................................................65Identykowanie dziennikw zdarze .....................................................................................65 Odczytywanie dziennikw zdarze .........................................................................................66 Eksportowanie do pliku tekstowego .................................................................................67 Eksportowanie do pliku w formacie XML ........................................................................69 Przegldanie oglnych plikw dziennikw ..........................................................................71 Analizowanie kilku dziennikw ...........................................................................................72 Pobieranie pojedynczego wpisu z dziennika zdarze ..................................................73 Przeszukiwanie dziennika zdarze ..........................................................................................76 Filtrowanie zdarze wedug waciwoci..........................................................................77 Wybr rda zdarze ...........................................................................................................77 Wybr stopnia wanoci zdarze.......................................................................................78 Wybieranie komunikatw ....................................................................................................78 Zarzdzanie dziennikiem zdarze ...........................................................................................79 Identykowanie rde zdarze .........................................................................................79 Modykowanie ustawie dziennika zdarze ..................................................................80 Analizowanie dziennika zdarze podsystemu WMI ...........................................................84 Zmienianie poziomu rejestrowania podsystemu WMI .................................................84 Korzystanie z programu narzdziowego do obsugi zdarze systemu Windows Windows Event Command-Line Utility .................................85 Zapisywanie informacji w dziennikach zdarze...................................................................86 Tworzenie rda zdarze ....................................................................................................86 Umieszczanie w dzienniku wynikw zwracanych przez polecenia typu cmdlet ...87 Tworzenie wasnych dziennikw zdarze..............................................................................89 Podsumowanie ..............................................................................................................................90

4 Zarzdzanie usugami .........................................................................................................91Dokumentowanie istniejcych usug ......................................................................................91 Praca z dziaajcymi usugami ............................................................................................92 Zapisywanie wynikw w pliku tekstowym .......................................................................93 Zapisywanie wynikw w bazie danych .............................................................................96 Ustawianie konguracji usug ................................................................................................ 106 Akceptowanie argumentw podawanych w wierszu polece ................................ 108 Zatrzymywanie usug .......................................................................................................... 109 Poprawne zatrzymywanie usug ...................................................................................... 110 Uruchamianie usug ............................................................................................................ 113 Poprawne uruchamianie usug ........................................................................................ 114 Utrzymywanie podanej konguracji usug .................................................................... 120 Sprawdzanie, czy waciwe usugi s zatrzymane ....................................................... 121 Odczytywanie pliku i sprawdzanie stanu usug........................................................... 122 Sprawdzanie, czy waciwe usugi s uruchomione ................................................... 122

vi

Spis treci

Sprawdzanie konguracji usug ............................................................................................ 123 Tworzenie raportu o wyjtkach ............................................................................................. 124 Podsumowanie ........................................................................................................................... 126

5 Zarzdzanie udziaami ..................................................................................................... 127Dokumentowanie udziaw ................................................................................................... 127 Dokumentowanie udziaw uytkownika ..................................................................... 134 Zapisywanie informacji o udziaach w pliku tekstowym ........................................... 137 Dokumentowanie udziaw administracyjnych .......................................................... 138 Zapisywanie informacji o udziaach w bazie danych programu Microsoft Access ............................................................................................................. 139 Prowadzenie inspekcji udziaw ........................................................................................... 143 Modykowanie udziaw ........................................................................................................ 146 Uywanie w skrypcie parametrw .................................................................................. 147 Tumaczenie kodu powrotu .............................................................................................. 148 Tworzenie nowych udziaw .................................................................................................. 150 Tworzenie kilku udziaw ........................................................................................................ 155 Usuwanie udziaw ................................................................................................................... 157 Usuwanie tylko niedozwolonych udziaw ........................................................................ 159 Podsumowanie ........................................................................................................................... 160

6 Zarzdzanie drukarkami ................................................................................................. 161Tworzenie spisu zainstalowanych drukarek ....................................................................... 161 Odpytywanie wielu komputerw .................................................................................... 163 Rejestrowanie do pliku ....................................................................................................... 164 Zapisywanie informacji w bazie danych programu Microsoft Access ................... 166 Raportowanie portw drukarek ............................................................................................ 172 Identykowanie sterownikw drukarek .............................................................................. 177 Instalowanie sterownikw drukarek ..................................................................................... 179 Instalowanie znalezionych na komputerze sterownikw drukarki ........................ 180 Instalowanie sterownikw drukarek, ktrych nie znaleziono na komputerze.... 182 Podsumowanie ........................................................................................................................... 184

7 Biece administrowanie komputerami osobistymi ..................................... 185Utrzymywanie waciwego stanu komputerw osobistych ........................................... 185 Tworzenie spisu dyskw ..................................................................................................... 185 Zapisywanie informacji o konguracji dyskw, w bazie danych programu Microsoft Access ............................................................................................................. 189 Praca z partycjami ............................................................................................................... 193 Dopasowywanie dyskw i partycji .................................................................................. 195 Praca z dyskami logicznymi .............................................................................................. 198 Monitorowanie stopnia wykorzystania przestrzeni dyskowej ...................................... 203 Rejestrowanie informacji o zajtoci przestrzeni dyskowej, w bazie danych ...... 207 Monitorowanie czasu ycia plikw ................................................................................. 211 Monitorowanie wydajnoci..................................................................................................... 214 Korzystanie z klas licznikw wydajnoci ........................................................................ 215

Spis treci

vii

Identykowanie rde bdw stronicowania............................................................ 219 Podsumowanie ........................................................................................................................... 220

8 Praca z sieci .......................................................................................................................... 221Praca z ustawieniami sieci ....................................................................................................... 221 Raportowanie ustawie sieci ............................................................................................ 221 Odczytywanie konguracji kart sieciowych.................................................................. 226 Filtrowanie tylko waciwoci posiadajcych warto ................................................ 232 Kongurowanie ustawie karty sieciowej........................................................................... 237 Wykrywanie obecnoci kilku kart sieciowych .............................................................. 237 Zapisywanie informacji o kartach sieciowych w arkuszu kalkulacyjnym programu Microsoft Excel ............................................................................................ 238 Identykowanie podczonych kart sieciowych .......................................................... 242 Ustawianie statycznego adresu IP ................................................................................... 244 Wczanie obsugi protokou DHCP ............................................................................... 249 Kongurowanie zapory ogniowej systemu Windows ..................................................... 254 Raportowanie ustawie zapory ogniowej .................................................................... 254 Kongurowanie ustawie zapory ogniowej ................................................................. 256 Podsumowanie ........................................................................................................................... 257

9 Kongurowanie ustawie pulpitu ............................................................................ 259Problemy zwizane ustawieniami konguracyjnymi pulpitu ........................................ 259 Kongurowanie wygaszaczy ekranu .................................................................................... 259 Prowadzenie inspekcji wygaszaczy ekranu ................................................................... 260 Wywietlanie tylko waciwoci posiadajcych warto ............................................ 267 Tworzenie raportw z informacjami o zabezpieczonych wygaszaczach ekranu .. 271 Zarzdzanie opcjami zasilania komputerw osobistych ................................................ 278 Modykowanie schematu zasilania...................................................................................... 284 Podsumowanie ........................................................................................................................... 290

10 Rozwizywanie problemw wystpujcych po zakoczeniu wdroenia ................................................................................................................................ 291Kongurowanie daty i godziny ............................................................................................. 291 Zdalne kongurowanie daty i godziny .......................................................................... 292 Rejestrowanie rezultatw w dzienniku zdarze .......................................................... 298 Kongurowanie rda czasu ................................................................................................. 303 Korzystanie z polecenia Net Time Command.............................................................. 304 Sprawdzanie rda czasu poprzez odpytywanie rejestru systemu ....................... 307 Wczanie kont uytkownikw .............................................................................................. 312 Tworzenie lokalnego konta uytkownika ........................................................................... 317 Tworzenie uytkownika lokalnego .................................................................................. 318 Tworzenie lokalnej grupy uytkownikw ...................................................................... 321 Kongurowanie wygaszacza ekranu .................................................................................... 324 Zmienianie nazwy komputera ............................................................................................... 331 Wyczanie lub ponowne uruchamianie komputera zdalnego ................................... 334 Podsumowanie ........................................................................................................................... 338

viii

Spis treci

11 Zarzdzanie danymi uytkownikw ........................................................................ 339Praca z kopiami zapasowymi ................................................................................................. 339 Kongurowanie plikw trybu ofine ................................................................................... 342 Wczenie funkcji plikw trybu ofine ................................................................................ 346 Praca z punktami przywracania systemu ............................................................................ 354 Odczytywanie ustawie funkcji przywracania systemu............................................. 355 Wywietlanie listy dostpnych punktw przywracania systemu ............................ 358 Podsumowanie ........................................................................................................................... 362

12 Rozwizywanie problemw zwizanych z systemem Windows ............ 363Rozwizywanie problemw zwizanych z uruchamianiem systemu .......................... 363 Sprawdzanie konguracji rozruchowej .......................................................................... 363 Sprawdzanie konguracji usug uruchamianych podczas uruchamiania systemu................................................................................................... 366 Wywietlanie zalenoci pomidzy usugami .................................................................... 369 Sprawdzanie konguracji sterownikw urzdze uruchamianych podczas uruchamiania systemu................................................................................................... 375 Analizowanie procesw uruchamianych za pomoc grupy Autostart ................. 379 Analizowanie problemw sprztowych .............................................................................. 383 Rozwizywanie problemw zwizanych z funkcjonowaniem sieci ............................. 388 Podsumowanie ........................................................................................................................... 391

13 Zarzdzanie kontami uytkownikw domeny ................................................ 393Tworzenie jednostek organizacyjnych ................................................................................. 393 Tworzenie kont uytkownikw domeny ............................................................................. 396 Modykowanie atrybutw uytkownika ............................................................................ 400 Modykowanie oglnych informacji o uytkowniku................................................. 400 Modykowanie atrybutw dostpnych na zakadce Address (Adres) .................. 402 Modykowanie atrybutw dostpnych na zakadce Prole (Prol) ...................... 403 Modykowanie atrybutw dostpnych na zakadce Telephone ............................ 404 Modykowanie atrybutw dostpnych na zakadce Organization ....................... 405 Modykowanie pojedynczych atrybutw uytkownikw ........................................ 406 Tworzenie kont uytkownikw na podstawie pliku w formacie .csv........................... 409 Ustawianie hasa................................................................................................................... 409 Wczanie konta uytkownika ........................................................................................ 410 Tworzenie grup domenowych ............................................................................................... 411 Dodawanie uytkownika do grupy domenowej ............................................................... 414 Dodawanie wielu uytkownikw z wieloma atrybutami ................................................ 416 Podsumowanie ........................................................................................................................... 420

14 Kongurowanie usugi klastrowania ...................................................................... 421Analizowanie konguracji sklastrowanych serwerw ..................................................... 421 Tworzenie raportu z informacjami o konguracji klastra ......................................... 428 Tworzenie raportu z informacjami o konguracji wza .......................................... 432 Odpytywanie kilku klas zwizanych z usug klastra ................................................. 437 Zarzdzanie wzami ................................................................................................................ 448

Spis treci

ix

Dodawanie i wykluczanie wzw ................................................................................... 448 Usuwanie klastra .................................................................................................................. 454 Podsumowanie ........................................................................................................................... 459

15 Zarzdzanie internetowymi usugami informacyjnymi .............................. 461Wczanie moliwoci zarzdzania internetowymi usugami informacyjnymi ........ 461 Tworzenie raportu z informacjami o konguracji usugi IIS.......................................... 463 Tworzenie raportw z informacjami o konguracji witryny .................................... 463 Tworzenie raportw z informacjami o konguracji puli aplikacji .......................... 466 Tworzenie raportw z informacjami o wartociach domylnych puli aplikacji .. 469 Tworzenie raportw z informacjami o limitach witryny ........................................... 472 Tworzenie listy katalogw wirtualnych .......................................................................... 476 Tworzenie nowej witryny webowej ...................................................................................... 478 Tworzenie nowej puli aplikacji ............................................................................................... 484 Uruchamianie i zatrzymywanie witryn webowych ........................................................... 487 Podsumowanie ........................................................................................................................... 491

16 Praca z magazynem certykatw............................................................................. 493Lokalizowanie certykatw w magazynie certykatw ................................................. 493 Wywietlanie listy certykatw ........................................................................................ 499 Lokalizowanie wygasych certykatw .......................................................................... 503 Identykowanie certykatw, ktrych wano wyganie wkrtce ...................... 508 Zarzdzanie certykatami ....................................................................................................... 513 Inspekcja certykatu ........................................................................................................... 513 Importowanie certykatu .................................................................................................. 517 Usuwanie certykatw ....................................................................................................... 521 Podsumowanie ........................................................................................................................... 528

17 Zarzdzanie usugami terminalowymi .................................................................. 529Kongurowanie instalacji usug terminalowych ............................................................... 529 Dokumentowanie konguracji usug terminalowych................................................ 529 Wyczanie moliwoci logowania si ........................................................................... 533 Modykowanie waciwoci klienta ................................................................................ 537 Zarzdzanie uytkownikami ................................................................................................... 542 Wczanie uytkownikom moliwoci korzystania z serwera.................................. 544 Kongurowanie ustawie klienta .................................................................................... 548 Podsumowanie ........................................................................................................................... 560

18 Kongurowanie usug sieciowych............................................................................ 561Tworzenie raportw z informacjami o ustawieniach serwera DNS ............................. 561 Kongurowanie ustawie rejestrowania dla serwera DNS ....................................... 568 Tworzenie raportw z informacjami o wskazwkach dotyczcych serwerw gwnych ....................................................................................................... 577 Odpytywanie rekordw typu A ..................................................................................... 578 Kongurowanie ustawie serwera DNS .............................................................................. 584 Tworzenie raportw z informacjami o strefach DNS....................................................... 590

x

Spis treci

Tworzenie stref DNS ................................................................................................................. 593 Zarzdzanie serwerami WINS i DHCP ................................................................................. 598 Podsumowanie ........................................................................................................................... 604

19 Praca z systemem Windows Server 2008 Server Core ................................ 605Konguracja pocztkowa ........................................................................................................ 605 Podczanie serwera do domeny .................................................................................... 606 Kongurowanie adresu IP ................................................................................................. 614 Kongurowanie ustawie DNS ........................................................................................ 620 Zmiana nazwy serwera ....................................................................................................... 628 Zarzdzanie systemem Windows Server 2008 Server Core........................................... 634 Monitorowanie serwera ..................................................................................................... 635 Odpytywanie dziennika zdarze ..................................................................................... 637 Podsumowanie ........................................................................................................................... 640

A Konwencja nazw dla narzdzi typu cmdlet ........................................................ 641 B Nazwy dostawcw obiektw danych typu ActiveX ...................................... 645 C Czsto zadawane pytania .............................................................................................. 647 D Wskazwki dotyczce tworzenia skryptw........................................................ 655Oglna konstrukcja skryptu ................................................................................................... 655 Funkcje naley umieszcza w skryptach, ktre je wywouj .................................... 655 Naley stosowa pene nazwy polece typu cmdlet oraz pene nazwy parametrw ...................................................................................................................... 656 Naley uywa polecenia Get-Item, przeksztacajc tekstowe cieki do plikw we wszechstronne obiekty ....................................................................... 657 Oglna czytelno skryptu ..................................................................................................... 657 Formatowanie kodu.................................................................................................................. 658 Praca z funkcjami ................................................................................................................. 660 Tworzenie plikw z szablonami ....................................................................................... 662 Pisanie funkcji ....................................................................................................................... 662 Tworzenie i nazywanie zmiennych oraz staych .......................................................... 662

E Oglne wskazwki dotyczce rozwizywania problemw ....................... 665

Rozdzia 1

Powoka programu Windows PowerShellPo ukoczeniu tego rozdziau Czytelnik bdzie potra: Instalowa i konfigurowa program Windows PowerShell. Radzi sobie z problematyk bezpieczestwa w programie Windows PowerShell. Zrozumie podstawy dziaania i korzystania z polece typu cmdlet. Uywa aliasw do przypisywania skrconych nazw poleceniom typu cmdlet. Uzyskiwa pomoc dotyczc korzystania z programu Windows PowerShell.

Na dysku CD Wszystkie uywane w tym rozdziale skrypty znajduj si na towarzyszcej tej ksice pycie CD-ROM w folderze \scripts\chapter01.

Instalowanie programu Windows PowerShellPoniewa domylnie program Windows PowerShell nie jest instalowany w adnym systemie operacyjnym firmy Microsoft, dlatego bardzo wane jest, aby przed przystpieniem do wdraania rzeczywistych skryptw lub polece sprawdzi, czy program Windows PowerShell zosta zainstalowany na danej platformie. Najprociej mona to zrobi prbujc wykona jedno z polece programu Windows PowerShell i sprawdzajc, czy polecenie to nie zwrci bdw. Zadanie to mona z atwoci zrealizowa z poziomu pliku wsadowego, sprawdzajc warto zmiennej %errorlevel%.

Sprawdzanie instalacji za pomoc skryptu w jzyku VBScriptBardziej zoone podejcie do zadania polegajcego na sprawdzeniu, czy w systemie operacyjnym zainstalowany zosta program Windows PowerShell, polega na uyciu skryptu korzystajcego z obiektu WMI (Windows Management Instrumentation Instrumentacja zarzdzania systemu Windows), o nazwie Win32_QuickFixEngineering. Przykad wykorzystania obiektu Win32_QuickFixEngineering w jzyku Microsoft Visual Basic Scripting Edition (VBScript) do wykrycia instalacji programu Windows PowerShell znajduje si w skrypcie FindPowerSell.vbs. Skrypt FindPowerShell.vbs wykorzystuje alternatywn nazw (ang. moniker) systemu WMI do utworzenia instancji obiektu klasy SwbemServices, a nastpnie wykonuje zapytanie, korzystajc z metody execquery. Zapytanie w jzyku WQL (WMI Query Language Jzyk zapyta systemu WMI) uywa operatora like, do pobrania listy poprawek typu hotfix, z wartoci identyfikatora 928439, ktra w systemie Windows XP, Windows Vista, Windows Server 2003 oraz Windows Server 2008 oznacza identyfikator poprawki bdcej1

2

Windows PowerShell przewodnik po skryptach

programem Windows PowerShell. Po zidentyfikowaniu poprawki skrypt ten po prostu wypisuje nazw komputera, informujc o zainstalowaniu na nim programu Windows PowerShell. Przykad takiego komunikatu zosta pokazany na rysunku 1-1.

Rysunek 1-1 Wyskakujce okno dialogowe, wywietlone przez skrypt FindPowerShell.vbs,z informacj o znalezieniu w systemie programu Windows PowerShell.

Jeli wskazana poprawka nie zostanie odnaleziona, wwczas skrypt wywietli informacj, e program PowerShell nie zosta zainstalowany. Skrypt FindPowerShell.vbs mona bardzo atwo zmodyfikowa dodajc do niego now funkcjonalno, ktra moe by potrzebna w danej sieci. Przykadowo moe pojawi si potrzeba uruchamiania tego skryptu dla wielu rnych nazw komputerw. W tym celu mona przeksztaci obiekt strComputer w tablic i wpisa od razu kilka nazw komputerw. Nazwy komputerw mona rwnie odczyta z pliku tekstowego lub pobra je za pomoc zapytania skierowanego do usugi katalogowej Active Directory. Wynik dziaania skryptu mona rwnie skierowa do pliku, zamiast tworzy wyskakujce okno dialogowe.FindPowerShell.vbsConst RtnImmedFwdOnly = &h30 strComputer = "." wmiNS = "\root\cimv2" wmiQuery = "Select * from win32_QuickFixEngineering where hotfixid like '928439'" Set objWMIService = GetObject("winmgmts:\\" & strComputer & wmiNS) Set colItems = objWMIService.ExecQuery(wmiQuery,,RtnImmedFwdOnly) For Each objItem in colItems Wscript.Echo "Program PowerShell jest zainstalowany na " & objItem.CSName Wscript.quit Next Wscript.Echo Program PowerShell nie zosta zainstalowany

Wdraanie programu Windows PowerShellPo pobraniu programu Windows PowerShell z witryny http://www.microsoft.com/downloads mona go wdroy w posiadanym rodowisku przy uyciu dowolnej, aktualnie uywanej, standardowej metody wdraania oprogramowania. Do metod uywanych przez klientw do wdraania programu Windows PowerShell nale midzy innymi:

Utworzenie pakietu Microsoft SMS (Systems Management Server Serwer zarzdzania systemami) i anonsowanie go w odpowiedniej jednostce organizacyjnej (OU) lub kolekcji. Utworzenie w kartotece Active Directoty obiektu zasad grupy (GPO Group Policy Object) i poczenie go z odpowiedni jednostk organizacyjn (OU).

Rozdzia 1: Powoka programu Windows PowerShell

3

Uruchomienie programu wykonywalnego za pomoc skryptu logowania.

Jeli wdroenie programu Windows PowerShell nie dotyczy caego przedsibiorstwa, prawdopodobnie najprostszym sposobem instalacji bdzie po prostu dwukrotne kliknicie odpowiedniego pliku wykonywalnego i wykonanie kolejnych krokw, zgodnie z instrukcjami kreatora instalacji. Naley w tym miejscu podkreli, e program Windows PowerShell jest instalowany za pomoc technologii poprawek typu hotfix. Oznacza to, e program Windows PowerShell ma posta aktualizacji systemu operacyjnego, a nie dodatkowego programu. Takie podejcie ma kilka zalet, wcznie z moliwoci oferowania aktualizacji i poprawek dla programu Windows PowerShell za pomoc pakietw serwisowych systemu operacyjnego oraz za pomoc witryny Windows Update. Niestety ma ono rwnie kilka minusw wynikajcych z faktu, e deinstalacja poprawek typu hotfix musi przebiega w odwrotnej kolejnoci do ich instalacji. Np. jeli program Windows PowerShell zostanie zainstalowany w systemie Windows Vista, a pniej w systemie tym zainstalowana zostanie seria aktualizacji oraz pakiet Service Pack 1, to, jeli zdecydujemy si nagle na usunicie z systemu programu Windows PowerShell, konieczne bdzie odinstalowanie w odpowiedniej kolejnoci najpierw pakietu Service Pack 1, a potem wszystkich zainstalowanych poprawek typu hotfix (osobicie w takiej sytuacji zdecydowabym si raczej na wykonanie kopii zapasowej wszystkich swoich danych, sformatowanie dysku twardego i ponowne zainstalowanie systemu Windows Vista. Sdz, e takie rozwizanie byoby szybsze. Ale i tak scenariusz taki jest mocno dyskusyjny, poniewa zwykle nie spotkamy si z potrzeb odinstalowania programu Windows PowerShell).

Czym jest program Windows PowerShellJednym z problemw zwizanych z programem Windows PowerShell jest niewaciwe zrozumienie, czym jest ten program. Gdy po raz pierwszy spotkaem si Jeffreyem Snoverem, gwnym architektem programu Windows PowerShell, jedn z pierwszych usyszanych od niego rzeczy byo pytanie: W jaki sposb opisaby program Windows PowerShell swoim klientom?. A wic czym jest program Windows PowerShell? Mwic najprociej, Windows PowerShell to oferowana przez firm Microsoft nowa powoka wiersza polece i jzyk skryptowy, ktry moe zastpi zarwno nieco ju leciwy interpreter polece Cmd.exe, jak i jzyk skryptowy VBScript. Ta dwoista natura stwarza pewne problemy dla wielu administratorw sieci, ktrzy przywykli do automatyzowania zada administracyjnych za pomoc interpretera polece Cmd.exe, z jego sabo rozwinitym jzykiem wsadowym oraz wszechstronnego (lecz zawiego) jzyka skryptowego VBScript. Nie s to ze narzdzia, ale obecnie czsto s wykorzystywane w sposb niezgodny z ich przeznaczeniem okrelonym ponad dekad temu, gdy oba te narzdzia dopiero powstaway. Interpreter polece Cmd.exe jest w zasadzie nastpc okna wiersza polece systemu DOS, a jzyk VBScript zosta zaprojektowany, w wikszym lub w mniejszym stopniu, z myl o stronach webowych. adne z tych narzdzi nie zostao stworzone od podstaw z myl o administratorach sieci.

4

Windows PowerShell przewodnik po skryptach

Interakcja z powokPo uruchomieniu programu Windows PowerShell mona z niego korzysta w taki sam sposb, jak z interpretera polece Cmd.exe. Np. posugujc si poleceniem dir mona uzyska list zawartoci katalogu. Mona rwnie najpierw zmieni katalog biecy za pomoc polecenia cd, a nastpnie sprawdzi jego zawarto za pomoc polecenia dir, zupenie w taki sam sposb, jak podczas korzystania z powoki CMD. Rezultaty uycia wymienionych polece ilustruje zamieszczony poniej przykadowy plik UsingPowerShell.txt.UsingPowerShell.txtPS C:\Users\edwils> dir Directory: Microsoft.PowerShell.Core\FileSystem::C:\Users\edwils Mode ---d-r-d-r-d-r-d-r-d-r-d-r-d-r-d-r-d-r-d-r-d-r-LastWriteTime ------------11/29/2006 1:32 PM 4/2/2007 12:51 AM 4/1/2007 6:53 PM 11/29/2006 1:32 PM 4/2/2007 1:10 AM 4/1/2007 6:53 PM 11/29/2006 1:32 PM 11/29/2006 1:32 PM 11/29/2006 1:32 PM 4/1/2007 6:53 PM 4/2/2007 5:53 PM Length Name ------ ---Contacts Desktop Documents Downloads Favorites Links Music Pictures Saved Games Searches Videos

PS C:\Users\edwils> cd music PS C:\Users\edwils\Music> dir

Oprcz moliwoci korzystania z tradycyjnych polece interpretera polece moliwe jest take korzystanie z nowszych narzdzi wiersza polece, takich jak prezentowany poniej program Fsutil.exe. Naley przy tym pamita, e korzystanie z programu Fsutil.exe wymaga posiadania uprawnie administracyjnych. Uruchomienie powoki Windows PowerShell z poziomu grupy programw Windows PowerShell nie zapewnia posiadania uprawnie administracyjnych i prba skorzystania z programu Fsutil.exe zakoczy si wygenerowaniem bdu pokazanego na rysunku 1-2.

Rysunek 1-2 Program Windows PowerShell podlega mechanizmom kontroli kontauytkownika i domylnie jest uruchamiany z uprawnieniami zwykego uytkownika. Prby wykonywania polece wymagajcych wyszego poziomu uprawnie mog wwczas koczy si bdami.

Rozdzia 1: Powoka programu Windows PowerShell

5

Fsutil.txtPS C:\Users\edwils> sl c:\mytest PS C:\mytest> fsutil file createNew c:\mytest\myNewFile.txt 1000 File c:\mytest\myNewFile.txt is created PS C:\mytest> dir Directory: Microsoft.PowerShell.Core\FileSystem::C:\mytest Mode ----a--PS C:\mytest> PS C:\Users\edwils> sl c:\mytest PS C:\mytest> fsutil file createNew c:\mytest\myNewFile.txt 1000 Plik c:\mytest\myNewFile.txt zosta utworzony PS C:\mytest> dir Katalog: Microsoft.PowerShell.Core\FileSystem::C:\mytest Mode ----a--PS C:\mytest> LastWriteTime ------------2008-06-10 21:35 Length Name ------ ---1000 myNewFile.txt LastWriteTime ------------5/8/2007 7:30 PM Length Name ------ ---1000 myNewFile.txt

Wskazwka Zalecane jest utworzenie dwch skrtw do programu Windows PowerShell i zapisanie ich na pasku Quick Launch (Szybkie uruchamianie). Jeden z tych skrtw powinien uruchamia program z uprawnieniami zwykego uytkownika a drugi z uprawnieniami administracyjnymi. Domylnie naley korzysta ze skrtu uruchamiajcego program z uprawnieniami zwykego uytkownika, dokumentujc te przypadki, ktre wymagaj uywania uprawnie administracyjnych.

Po zakoczeniu pracy z plikami i z folderem mona bardzo atwo usun plik za pomoc polecenia del. Aby unikn koniecznoci wpisywania caej nazwy pliku, mona posuy si znakami uoglniajcymi, np. *.txt. Jest to wystarczajco bezpieczne, poniewa wczeniej sprawdzilimy za pomoc polecenia dir, e w danym folderze znajduje si tylko jeden plik tekstowy. Po usuniciu pliku, uywajc polecenia rd, mona rwnie usun sam katalog. Jak pokazano w poniszym przykadzie DeleteFileAndFolder.txt, polecenia te dziaaj dokadnie tak samo jak podczas korzystania z okna wiersza polece.DeleteFileAndFolder.txtPS C:\> sl c:\mytest PS C:\mytest> dir Directory: Microsoft.PowerShell.Core\FileSystem::C:\mytest Mode ----a--LastWriteTime ------------5/8/2007 7:30 PM Length Name ------ ---1000 myNewFile.txt

6

Windows PowerShell przewodnik po skryptachPS C:\mytest> del *.txt PS C:\mytest> cd c:\ PS C:\> rd c:\mytest PS C:\> dir c:\mytest Get-ChildItem : Cannot find path 'C:\mytest' because it does not exist. At line:1 char:4 + dir Get-Process note* Handles ------45 45 NPM(K) -----2 2 PM(K) ----1044 1136 WS(K) VM(M) ----- ----3904 53 4020 54 CPU(s) -----0.03 0.05 Id ProcessName -- ----------3052 notepad 3140 notepad

PS C:\Users\edwils> Stop-Process -processName notepad -WhatIf What if: Performing operation "Stop-Process" on Target "notepad (3052)". What if: Performing operation "Stop-Process" on Target "notepad (3140)". PS C:\Users\edwils> Stop-Process -processName n* -WhatIf What if: Performing operation "Stop-Process" on Target "notepad (3052)". What if: Performing operation "Stop-Process" on Target "notepad (3140)". ... PS C:\users\edwils> Stop-Process -processName notepad -WhatIf WhatIf Wykonywanie operacji "Stop-Process" na elemencie docelowym "notepad (2368)". WhatIf Wykonywanie operacji "Stop-Process" na elemencie docelowym "notepad (2636)".

10

Windows PowerShell przewodnik po skryptach

PS C:\users\edwils> Stop-Process -processName WhatIf Wykonywanie operacji "Stop-Process" na WhatIf Wykonywanie operacji "Stop-Process" na WhatIf Wykonywanie operacji "Stop-Process" na

n* -WhatIf elemencie docelowym "notepad (2368)". elemencie docelowym "notepad (2636)". elemencie docelowym "ntfrs (404)".

A co si stanie, jeli przecznik whatif nie zosta zaimplementowany? Przypadek ten zosta zilustrowany w zamieszczonym poniej przykadzie Whatif2.txt. W przypadku uycia polecenia typu cmdlet o nazwie New-Item (Nowy element), do utworzenia w katalogu gwnym nowego katalogu o nazwie myNewtest, przecznik whatif zosta zaimplementowany i pokazuje, e to polecenie faktycznie spowoduje utworzenie katalogu C:\myNewtest. Zwrmy jednak uwag, co si stanie, jeli sprbujemy uy przecznika whatif w poczeniu z poleceniem typu cmdlet o nazwie Get-Help (Uzyskaj pomoc). Mona by oczekiwa, e uycie tego parametru spowoduje wywietlenie komunikatu w rodzaju "What if: Retrieving help information for Get-Process cmdlet" (Co jeli: pobieranie informacji pomocy dla polecenia typu cmdlet Get-Process (Pobierz proces)). Tylko jaka byaby zasadno takiego dziaania? Poniewa uycie polecenia Get-Help (Uzyskaj pomoc) nie stwarza adnego zagroenia dla systemu, wic w jego przypadku nie ma potrzeby implementowania przecznika whatif.WhatIf2.txtPS C:\Users\edwils> New-Item -Name myNewTest -Path c:\ -ItemType directory -WhatIf What if: Performing operation "Create Directory" on Target "Destination: C:\myNewTest". PS C:\Users\edwils> get-help Get-Process -whatif Get-Help : A parameter cannot be found that matches parameter name 'whatif'. At line:1 char:28 + get-help Get-Process -whatif Stop-Process -Name calc -Confirm Confirm

12

Windows PowerShell przewodnik po skryptachAre you sure you want to perform this action? Performing operation "Stop-Process" on Target "calc (2924)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): y PS C:\Users\edwils> Get-Process c* Handles ------1412 1154 598 477 ... PS C:\users\edwils> Stop-Process -name calc -confirm Potwierd Czy na pewno chcesz wykona t akcj? Wykonywanie operacji "Stop-Process" na elemencie docelowym "calc (1016)". [T] Tak [W] Tak na wszystko [N] Nie [S] Nie na wszystkie [M] Wstrzymaj Pomoc [?](warto domylna to "T"): t PS C:\users\edwils> Get-Process c* ... NPM(K) -----7 16 5 10 PM(K) ----3364 23224 1680 15812 WS(K) VM(M) ----- ----6556 81 34740 130 4956 88 20488 195 CPU(s) -----Id ProcessName -- ----------372 casha 3084 CcmExec 620 csrss 688 csrss

Zawieszanie potwierdze wykonywania polece typu CmdletMoliwo wywietlania monitw z prob o potwierdzenie zamiaru wykonania danego polecenia typu cmdlet jest wyjtkowo uyteczna i czasami moe mie zasadnicze znaczenie dla zachowania wysokiego poziomu dostpnoci systemu. Moe si np. zdarzy, e po wpisaniu dugiego polecenia przypomnimy sobie o koniecznoci uprzedniego wykonania innej procedury. W takim przypadku mona po prostu zawiesi wykonywanie tego polecenia. Polecenia uyte podczas zawieszonego wykonywania programu narzdziowego typu cmdlet oraz generowany przez te polecenia strumie wyjciowy pokazane zostay w zamieszczonym poniej przykadzie SuspendConfirmation.txt. W przykadowym pliku SuspendConfirmation.txt najpierw uruchomiony zostaje program Microsoft Paint (Mspaint.exe). Poniewa program Mspaint.exe znajduje si na ciece systemowej, nie ma potrzeby umieszczania w tym pliku adnych dodatkowych informacji dotyczcych cieki. Nastpnie przy pomocy polecenia typu cmdlet o nazwie Get-Process (Pobierz proces) oraz wzorca uoglniajcego ms* pobrana zostaje lista wszystkich procesw, ktrych nazwy zaczynaj si na litery ms. Po zidentyfikowaniu waciwego procesu, uyty zosta cmdlet Stop-Process (Zatrzymaj proces) z przecznikiem confirm. Zamiast odpowiada yes (tak) na monit z prob o potwierdzenie, mona po prostu zawiesi wykonywanie danego polecenia, co pozwoli na wykonanie innego polecenia (np. jeli zapomnielimy, jaka jest warto identyfikatora procesu). Po zakoczeniu wykonywania tego dodatkowego polecenia naley wpisa polecenie exit, co spowoduje powrt z zagniedonego monitu z powrotem do zawieszonego polecenia. Po zabiciu procesu programu mspaint mona to potwierdzi uywajc ponownie polecenia cmdlet Get-Process (Pobierz proces).

Rozdzia 1: Powoka programu Windows PowerShell

13

SuspendConrmation.txtPS C:\Users\edwils> mspaint PS C:\Users\edwils> Get-Process ms* Handles ------98 NPM(K) -----4 PM(K) ----5404 WS(K) VM(M) ----- ----10492 72 CPU(s) -----0.09 Id ProcessName -- ----------3064 mspaint

PS C:\Users\edwils> Stop-Process -id 3064 -Confirm Confirm Are you sure you want to perform this action? Performing operation "Stop-Process" on Target "mspaint (3064)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): s PS C:\Users\edwils>>> Get-Process ms* Handles ------97 NPM(K) -----4 PM(K) ----5404 WS(K) VM(M) ----- ----10496 72 CPU(s) -----0.09 Id ProcessName -- ----------3064 mspaint

PS C:\Users\edwils>>> exit Confirm Are you sure you want to perform this action? Performing operation "Stop-Process" on Target "mspaint (3064)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): y PS C:\Users\edwils> Get-Process ms* ... PS C:\users\edwils> Stop-Process -id 1028 -confirm Potwierd Czy na pewno chcesz wykona t akcj? Wykonywanie operacji "Stop-Process" na elemencie docelowym "mspaint (1028)". [T] Tak [W] Tak na wszystko [N] Nie [S] Nie na wszystkie [M] Wstrzymaj Pomoc [?](warto domylna to "T"): m PS C:\users\edwils>>> Get-Process ms* Handles ------167 80 NPM(K) -----7 4 PM(K) ----2912 2696 WS(K) VM(M) ----- ----6928 62 7444 72 CPU(s) -----1,15 3,45 Id ProcessName -- ----------3292 msdtc 1028 mspaint

PS C:\users\edwils>>> exit Potwierd Czy na pewno chcesz wykona t akcj? Wykonywanie operacji "Stop-Process" na elemencie docelowym "mspaint (1028)". [T] Tak [W] Tak na wszystko [N] Nie [S] Nie na wszystkie [M] Wstrzymaj Pomoc [?](warto domylna to "T"): t PS C:\users\edwils> Get-Process ms* PS C:\users\edwils>

14

Windows PowerShell przewodnik po skryptach

Przekazywanie opcji dla polece typu cmdletJak ju pokazano w poprzednich czciach tego rozdziau, do kontrowania dziaania programw polece typu cmdlet mona uywa parametrw -whatif oraz -confirm. Jednym z pyta czsto zadawanych mi przez studentw jest pytanie Skd wiadomo, jakie opcje s w ogle dostpne?. Odpowied na to pytanie jest taka, e zesp tworzcy program Windows PowerShell utworzy zbir pewnych standardowych opcji. Te standardowe opcje nazywane s parametrami wsplnymi (common parameters). Przegldajc opisy skadni rnych polece typu cmdlet czsto mona zauway informacj, e dany cmdlet obsuguje tzw. wsplne parametry. Poniej pokazany zosta przykad takiego opisu dla polecenia cmdlet Get-Process (Pobierz proces):SYNTAX Get-Process [[-name] ] [] Get-Process -id [] Get-Process -inputObject []

Jedn z uytecznych cech programu Windows PowerShell jest standaryzacja skadni uywanej przez programy polecenia typu cmdlet. Pozwala to na powane uproszczenie procesu poznawania nowej powoki i nowego jzyka. Wsplne parametry zostay zebrane w tabeli 1-1. Naley jednak pamita, e nie wszystkie z tych parametrw s obsugiwane przez wszystkie programy narzdziowe typu cmdlet. Jeli jednak dany parametr jest uywany, to bdzie on interpretowany w taki sam sposb przez wszystkie polecenia typu cmdlet, poniewa ich interpretacj zajmuje si motor programu Windows PowerShell.Tabela 1-1 Parametry wsplne

Parametr -whatif -confirm -verbose -debug -erroraction

Znaczenie Instruuje cmdlet, aby nie wykonywa danej akcji. Zamiast tego cmdlet informuje, co by si stao, gdyby faktycznie zosta on uruchomiony. Instruuje cmdlet, aby przed wykonaniem polecenia wywietli monit z prob o potwierdzenie. Instruuje cmdlet, aby wywietla wicej szczegowych informacji o swoim dziaaniu, ni bez tego parametru. Instruuje cmdlet, aby wywietli informacje pomocne przy debugowaniu. Instruuje cmdlet, aby w razie wystpienia bdu wykona okrelon akcj. Dopuszczalne akcje to: continue (kontynuuj), stop (zatrzymaj), SilentlyContinue (Kontynuuj po cichu) oraz inquire (zapytaj). Instruuje cmdlet, aby do przechowywania informacji o bdach uywa wskazanej zmiennej. Zmienna ta stanowi bdzie uzupenienie dla standardowej zmiennej $error. Instruuje cmdlet, aby informacje ze strumienia wyjciowego umieszczane byy we wskazanej zmiennej.

-errorvariable

-outvariable

Rozdzia 1: Powoka programu Windows PowerShell

15

Tabela 1-1 Parametry wsplne

Parametr -outbuffer

Znaczenie Instruuje cmdlet, aby przed wywoaniem nastpnego polecenia typu cmdlet w potoku zgromadzi okrelon ilo obiektw.

Korzystanie z polecenia Get-Help (Pobierz pomoc)Korzystanie z programu Windows PowerShell jest atwe i intuicyjne nauka moe odbywa si po prostu poprzez korzystanie z tego programu. Bezporedni dostp do systemu pomocy jeszcze bardziej uatwia korzystanie z programu. Z systemu pomocy programu Windows PowerShell mona korzysta na kilka rnych sposobw. Chcc uzyska informacje na temat korzystania z programu Windows PowerShell naley uy programu narzdziowego typu cmdlet o nazwie Get-Help (Uzyskaj pomoc), tak jak to zostao pokazane poniej:get-help get-help

Powysze polecenie powoduje wypisanie tekstu pomocy dotyczcego polecenia cmdlet Get-Help (Uzyskaj pomoc). Informacje zwrcone przez ten cmdlet zostay pokazane poniej:NAME Get-Help SYNOPSIS Displays information about Windows PowerShell cmdlets and concepts. SYNTAX Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-full] [] Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-detailed] [] Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-examples] [] Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-parameter ] [] DETAILED DESCRIPTION The Get-Help cmdlet displays information about Windows PowerShell cmdlets and concepts. You can also use "Help { | " or " /?". "Help" displays the help topics one page at a time. The "/?" displays help for cmdlets on a single page. RELATED LINKS Get-Command

16

Windows PowerShell przewodnik po skryptachGet-PSDrive Get-Member REMARKS For more information, type: "get-help Get-Help -detailed". For technical information, type: "get-help Get-Help -full". PS C:\users\edwils> get-help get-help NAZWA Get-Help STRESZCZENIE Wywietla informacje o cmdletach i koncepcjach powoki Windows PowerShell. SKADNIA Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-full] [] Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-detailed] [] Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-examples] [] Get-Help [[-name] ] [-component ] [-functionality ] [-role ] [-category ] [-parameter ] [] SZCZEGOWY OPIS Cmdlet Get-Help wywietla informacje o cmdletach i koncepcjach powoki Windows PowerShell. Mona rwnie uy polecenia "Help { | " lub " " switch($response) { "t" { Stop-Process -Name $name } "n" { "Proces $name nie zostanie zatrzymany." } } } ELSE { Stop-Process -Name $name } } #end getprocess() stopprocess -name notepad -confirm

662

Windows PowerShell przewodnik po skryptach

Tworzenie plikw z szablonamiNaley utworzy szablony, ktrych bdzie mona uywa do tworzenia rnych rodzajw skryptw. Mog to by np. szablony dla skryptw opartych na podsystemie WMI, interfejsie ADSI lub obiektach ADO. Podczas tworzenia takich szablonw naley uwzgldni nastpujce elementy:

Do szablonu naley doda regularnie uywane funkcje. Nie naley trwale wpisywa konkretnych wartoci, ktre mog by wymagane w acuchach znakowych opisujcych poczenia, takich jak nazwa serwera, cieka do pliku wejciowego itp. Zamiast tego wartoci tego typu naley okrela przy pomocy zmiennych. W szablonach nie naley umieszcza trwaej informacji o numerze wersji. W miejscach, ktre wymagaj modyfikacji, aby szablon sta si uyteczny, naley koniecznie umieszcza odpowiedni komentarz.

Pisanie funkcjiPoniej przedstawiono kilka sugestii, ktre naley uwzgldnia podczas pisania wasnych funkcji:

Naley tworzy wysoko specjalizowane funkcje. Dobra funkcja robi dobrze tylko jedn rzecz. Tworzone funkcje powinny by cakowicie samowystarczalne. Dobra funkcja powinna by przenona. W miar moliwoci naley umieszcza funkcje wewntrz skryptu w kolejnoci alfabetycznej. Poprawia to zarwno czytelno skryptu, jak i moliwoci jego utrzymywania. Naley stosowa opisowe nazwy funkcji, takie jak np. funhelp, funline lub funcomputepercentage. Osobicie lubi poprzedza nazwy funkcji przedrostkiem fun, aby unikn moliwoci przypadkowego uycia jako nazwy funkcji sowa kluczowego, a take aby poprawi widoczno i czytelno funkcji. Mona rwnie stosowa cae sowo function, ale sdz, e jest ono zbyt dugie. Kada funkcja powinna posiada jeden punkt wejcia. Kada funkcja powinna posiada jeden punkt wyjciowy (kocowy). Naley stosowa parametry, aby unikn problemw zwizanych z zasigiem zmiennych lokalnych i globalnych. W miar moliwoci naley implementowa typowe parametry: -verbose, -debug, -whatif i -confirm, co uatwi ponowne wykorzystywanie tego samego kodu.

Tworzenie i nazywanie zmiennych oraz staychPodczas tworzenia i nazywania zmiennych i staych naley uwzgldnia nastpujce uwagi:

Dodatek D: Wskazwki dotyczce tworzenia skryptw

663

Naley unika stosowania magicznych liczb. Naley take unika stosowania literaw uywanych wprost w wywoaniach metod lub funkcji. Zamiast tego naley utworzy sta, ktrej nazwa bdzie na tyle opisowa, e kada osoba czytajca kod bdzie moga si domyle, jakie jest jego przeznaczenie. Np. w skrypcie ServiceDependencies.ps1 wystpuje liczba odpowiedzialna za szeroko wcicia wywietlanych wynikw. Warto tej liczby jest okrelana poprzez pozycj okrelonego znaku w wywietlanych wynikach. Zamiast wic okreli t liczb po prostu jako +14, zostaa utworzona staa o opisowej nazwie. Wicej informacji na temat tego skryptu znajduje si w rozdziale 12, zatytuowanym Rozwizywanie problemw zwizanych z systemem Windows. Omawiany fragment tego skryptu zosta przytoczony poniej:New-Variable -Name c_padline -value 14 -option constant Get-WmiObject -Class Win32_DependentService -computername $computer | Foreach-object ` { "=" * ((([wmi]$_.dependent).pathname).length + $c_padline)

Nie naley ponownie wykorzystywa zmiennych. Zmienne uyte ponownie do innych celw nazywane s zmiennymi rozproszonymi (ang. unfocused variables). Kada zmienna powinna suy tylko do jednego celu. Takie zmienne nazywane s zmiennymi skoncentrowanymi (ang. focused variables). Naley nadawa zmiennym opisowe nazwy. Naley minimalizowa zasig zmiennych. Jeli dana zmienna ma by uywana tylko wewntrz pewnej funkcji, to naley j zadeklarowa wewntrz tej funkcji. Zamiast staych naley stara si stosowa zmienne przeznaczone tylko do odczytu. Naley pamita, e staej nie mona usun ani zmieni jej wartoci. Naley unika bezporedniego wpisywania wartoci w wywoaniach metod lub w roboczej czci skryptu. Zamiast tego naley stosowa zmienne o odpowiedniej wartoci. W miar moliwoci naley stara si grupowa w jedn sekcj wszystkie zmienne wystpujce na tym samym poziomie skryptu. Naley unika stosowania notacji wgierskiej nie ma bowiem takiej potrzeby. Naley pamita, e w programie Windows PowerShell praktycznie wszytko jest obiektem, a wic nadawanie zmiennej np. nazwy $objWMI nie wnosi do skryptu adnej dodatkowej wartoci. Istniej jednak przypadki, w ktrych dobrze jest poprzedza nazwy zmiennych przedrostkami w rodzaju: bln, int, dbl, err, dte lub str. Wynika to z faktu, e program Windows PowerShell posiada bardzo siln kontrol typw, cho na podstawie jego dziaania mona by sdzi, e takiej kontroli nie posiada. Naley unika w skryptach tworzenia zmiennych globalnych. Zamiast tego naley stara si stosowa przekazywanie zmiennych do funkcji przez referencj [ref].

Dodatek E

Oglne wskazwki dotyczce rozwizywania problemwW dodatku tym zebrane zostay rne wskazwki dotyczce rozwizywania problemw. Kolejno prezentowania tych wskazwek niekoniecznie stanowi odzwierciedlenie ich wanoci. Zawsze naley sprawdza, czy nie popeniono adnych bdw w pisowni nazw polece typu cmdlet, nazw waciwoci, nazw wywoywanych metod itp. Jedna z cech programu Windows PowerShell polega na tym, e nie generuje on bdw po uruchomieniu skryptu zawierajcego nieprawidowo zapisan nazw waciwoci. Po uruchomieniu pokazanego poniej fragmentu kodu naley zwrci uwag, e nie generuje on adnych komunikatw ani adnych bdw. Nic nie wskazuje wic, e uyta zostaa niewaciwa nazwa waciwoci klasy WMI Win32_Service.Naley pamita, e pisownia jest wana.PS C:\> $wmi = Get-WmiObject -Class win32_service PS C:\> $wmi.badproperty PS C:\>

Jest to szczeglnie atwy do popenienia bd. Zwykle zaczyna si on od wpisania polecenia w oknie konsoli programu Windows PowerShell. Jeli uytkownik zdecyduje si na dodanie do tego polecenia czego jeszcze, moe uy klawisza ze strzak skierowan w gr i doda na kocu polecenia symbol potoku. Jeli polecenie bdzie szczeglnie uyteczne, uytkownik moe zechcie umieci je w skrypcie, a wic jego nastpnym krokiem bdzie oczyszczenie wynikw ze zbdnych kolumn i dodanie na pocztku nagwkw (co spowoduje przerwanie potoku). Zostao to pokazane na zamieszczonym poniej przykadzie. Linia z instrukcj Get-WmiObject koczy si znakiem potoku, po ktrym nastpuje wywoanie funkcji wywietlajcej nazw komputera. Problem jest nastpujcy: taka operacja spowoduje przerwanie potoku i skrypt wypisze tylko jedn lini: Zalenoci pomidzy usugami na komputerze localhost. Poniewa w tym przykadzie miao miejsce wywoanie funkcji, wic skrypt nie wygeneruje adnego bdu.Nie naley przerywa potokuParam($computer = "localhost") function funline ($strIN) { $num = $strIN.length for($i=1 ; $i -le $num ; $i++) { $funline = $funline + "=" } Write-Host -ForegroundColor yellow $strIN Write-Host -ForegroundColor darkYellow $funline } Get-WmiObject -Class Win32_DependentService -computername $computer | funline("Zalenoci pomidzy usugami na komputerze $($computer)") Foreach-object `

665

666

Windows PowerShell przewodnik po skryptach{ [wmi]$_.Antecedent [wmi]$_.Dependent }

Z drugiej strony, gdyby skrypt nie wywoywa funkcji, to zostaby wygenerowany bd. Zostao to zademonstrowane na pokazanym poniej przykadzie. Naley zauway, e w tym przypadku, tak samo jak w poprzednim, linia z poleceniem Get-WmiObject koczy si znakiem potoku. Przerwanie potoku nastpuje poprzez wypisanie tekstu Usugi zalene na komputerze lokalnym.Get-WmiObject -Class Win32_DependentService | "Usugi zalene na komputerze lokalnym" Foreach-object ` { [wmi]$_.Antecedent [wmi]$_.Dependent }

Uruchomienie pokazanego powyej fragmentu kodu spowoduje wygenerowanie bdu. Tre tego bdu informuje uytkownika, e nie mona stosowa wyrae w rodku potoku, co oczywicie miao miejsce w tym przypadku.Expressions are only permitted as the first element of a pipeline. At C:\Users\EDWILS~1.NOR\AppData\Local\Temp\temp.ps1:4 char:44 + "Usugi zalene na komputerze lokalnym"