Ed Wilson 5.0. Windows PowerShell Krok po kroku. Wydanie trzecie. Przekład: Natalia Chounlamany, Marek Włodarz

Podobne dokumenty
Ed Wilson. Windows PowerShell Krok po kroku 3.0. Przekład: Marek Włodarz

Microsoft Windows PowerShell 5.0 / Ed Wilson. Warszawa, Spis treści

Korzystanie z edytora zasad grupy do zarządzania zasadami komputera lokalnego w systemie Windows XP

Samsung Universal Print Driver Podręcznik użytkownika

Z pojedynczym obiekcie zasady grupy znajdziemy dwa główne typy ustawień:

Instalowanie i konfigurowanie Windows Server 2012 R2

Konta uŝytkowników. Konta uŝytkowników dzielą się na trzy grupy: lokalne konta uŝytkowników, domenowe konta uŝytkowników, konta wbudowane

IBM SPSS Statistics Wersja 25. Windows Instrukcja instalacji (licencja autoryzowanego użytkownika) IBM

Podręcznik instalacji Command WorkStation 5.6 z aplikacjami Fiery Extended Applications 4.2

Microsoft Exchange Server 2013

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

1 Powłoka programu Windows PowerShell Skrypty programu Windows PowerShell Zarządzanie dziennikami... 65

Instalacja Webroot SecureAnywhere przy użyciu GPO w Active Directory

Pracownia internetowa w szkole ZASTOSOWANIA

Przewodnik instalacji i rozpoczynania pracy. dla DataPage+ 2012

William R. Stanek. Vademecum Administratora 2012 R2. Windows Server. Podstawy i konfiguracja. Przekład: Leszek Biolik

Aktualizacje oprogramowania Podręcznik użytkownika

Systemy operacyjne. Zasady lokalne i konfiguracja środowiska Windows 2000

Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0.

IBM SPSS Statistics Wersja 22. Windows - Instrukcja instalacji (licencja autoryzowanego użytkownika)

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika)

Ustawienia personalne

Przewodnik instalacji i rozpoczynania pracy. Dla DataPage+ 2013

Dokument zawiera instrukcję samodzielnej Instalacji Microsoft SQL Server 2008 R2 RTM - Express na potrzeby systemu Sz@rk.

Instrukcja Instalacji

IBM SPSS Statistics Version 22. Windows - Instrukcja instalacji (licencja wielokrotna)

IBM SPSS Statistics dla systemu Windows Instrukcje dotyczące instalacji (jeden użytkownik)

Podręcznik instalacji

Wstęp... ix. 1 Omówienie systemu Microsoft Windows Small Business Server

Instrukcja instalacji

1 Implementowanie i konfigurowanie infrastruktury wdraŝania systemu Windows... 1

ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4

Client Management Solutions i Mobile Printing Solutions

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja

Rozdział 5. Administracja kontami użytkowników

IBM SPSS Statistics dla systemu Windows Instrukcje dotyczące instalacji (licencja lokalna)

11. Rozwiązywanie problemów

IBM SPSS Statistics dla systemu Windows Instrukcje instalacji (licencja sieciowa)

Instrukcja instalacji programu e STOMis wraz z pakietem Microsoft SQL Server 2005 Express Edition. e STOMis

Packet Tracer - Nawigacja w IOS

Ćwiczenie Nr 4 Administracja systemem operacyjnym z rodziny Microsoft Windows

Ćwiczenie Nr 6 Przegląd pozostałych najważniejszych mechanizmów systemu operacyjnego Windows

IBM SPSS Statistics - Essentials for Python: Instrukcje instalacji dla Windows

Szybki start instalacji SUSE Linux Enterprise Server 11 SP1

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Systemy operacyjne i sieci komputerowe Szymon Wilk Konsola MMC 1

Połączenia. Obsługiwane systemy operacyjne. Instalowanie drukarki przy użyciu dysku CD Oprogramowanie i dokumentacja

G DATA TechPaper. Aktualizacja rozwiązań G DATA Business do wersji 14.1

Instrukcja instalacji programu SYSTEmSM

Laboratorium - Zarządzanie systemem plików poprzez wbudowane oprogramowanie w systemie Windows XP

Client Management Solutions i Mobile Printing Solutions

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

IBM SPSS Statistics Wersja 24. Windows Instrukcja instalacji (licencja wielokrotna) IBM

Dokument zawiera instrukcję samodzielnej Instalacji Microsoft SQL Server 2005 Express Edition Service Pack 3 na potrzeby systemu Sz@rk.

Wymagania do zdalnej instalacji agentów firmy StorageCraft

Client Management Solutions i Universal Printing Solutions

Aktualizacje oprogramowania Podręcznik użytkownika

INFORMATOR TECHNICZNY WONDERWARE

Instrukcja instalacji aplikacji i konfiguracji wersji sieciowej. KomKOD

Spis treści. Strona 1 z 20

IBM SPSS Statistics - Essentials for R: Instrukcje instalacji dla Windows

Zadanie 5. Automatyzacja tworzenia kont użytkowników

Instrukcja instalacji oprogramowania dla środowiska Windows

Zadanie 2. Tworzenie i zarządzanie niestandardową konsolą MMC

Połączenia. Instalowanie drukarki lokalnie (Windows) Co to jest drukowanie lokalne?

AKTYWNY SAMORZĄD. Instrukcja instalacji, aktualizacji i konfiguracji.

Państwowa Wyższa Szkoła Zawodowa w Gorzowie Wlkp. Laboratorium architektury komputerów

UNIFON podręcznik użytkownika

Laboratorium - Zarządzanie systemem plików poprzez wbudowane oprogramowanie w systemie Windows Vista

IBM SPSS Statistics dla systemu Linux Instrukcje instalacji (licencja sieciowa)

Instalacja aplikacji

G DATA TechPaper Aktualizacja rozwiązań G DATA Business do wersji 14.2

Dodatki. Dodatek A Octave. Język maszyn

Windows Vista Instrukcja instalacji

Program PortaScan wersja Instrukcja obsługi

IBM SPSS Modeler Social Network Analysis 16 podręcznik instalowania i konfigurowania

INSTRUKCJA INSTALACJI

Instalacja i podstawowa konfiguracja aplikacji ImageManager

Spis treści

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

IBM SPSS Statistics Wersja 24. Mac OS Instrukcja instalacji (licencja autoryzowanego użytkownika) IBM

MONITOROWANIE WINDOWS Z NETCRUNCHEM 7 P A G E 1

Krok 2 (Mac). Konfigurowanie serwera WD Sentinel (czynność jednorazowa)

SKRó CONA INSTRUKCJA OBSŁUGI

Projektowanie i implementacja infrastruktury serwerów

Zamawianie Taxi Instrukcja użytkownika

HP Designjet Partner Link. Instrukcje

Kancelaria Prawna.WEB - POMOC

Laboratorium A: Podstawy administrowania serwerem

Instalacja systemów operacyjnych i tworzenie domeny

Ćwiczenie Zmiana sposobu uruchamiania usług

Laboratorium - Zarządzanie systemem plików poprzez wbudowane oprogramowanie w systemie Windows 7

Synchronizator plików (SSC) - dokumentacja

Instrukcja instalacji oprogramowania pixel-fox

Pracownia internetowa w szkole podstawowej (edycja jesień 2005)

Tomasz Greszata - Koszalin

Logowanie do aplikacji TETA Web. Instrukcja Użytkownika

IBM SPSS Statistics dla systemu Windows Instrukcje dotyczące instalacji (licencja sieciowa)

dr inż. Tomasz Krzeszowski

Transkrypt:

Ed Wilson Windows PowerShell Krok po kroku 5.0 Wydanie trzecie Przekład: Natalia Chounlamany, Marek Włodarz APN Promise, Warszawa 2016

Windows PowerShell 5.0 Krok po kroku Authorized Polish translation of the English language edition entitled: Windows PowerShell Step by Step, Third Edition, ISBN 978-0-7356-7511-7, by Ed Wilson, published by Pearson Education, Inc, publishing as Microsoft Press, A Division Of Microsoft Corporation. Copyright 2015 by Ed Wilson 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 Pearson Education, Inc. Polish language edition published by APN PROMISE SA Copyright 2016 Autoryzowany przekład z wydania w języku angielskim, zatytułowanego: Windows PowerShell Step by Step, Third Edition, ISBN 978-0-7356-7511-7, by Ed Wilson, opublikowanego przez Pearson Education, Inc, publikującego jako Microsoft Press, oddział Microsoft Corporation. APN PROMISE SA, biuro: ul. Kryniczna 2, 03-934 Warszawa tel. +48 22 35 51 600, fax +48 22 35 51 699 e-mail: mspress@promise.pl Książka ta przedstawia poglądy i opinie autorów. Przykłady firm, produktów, osób i wydarzeń opisane w niniejszej książce są fikcyjne i nie odnoszą się do żadnych konkretnych firm, produktów, osób i wydarzeń, chyba że zostanie jednoznacznie stwierdzone, że jest inaczej. Ewentualne podobieństwo do jakiejkolwiek rzeczywistej firmy, organizacji, produktu, nazwy domeny, adresu poczty elektronicznej, logo, osoby, miejsca lub zdarzenia jest przypadkowe i niezamierzone. Nazwa Microsoft oraz znaki towarowe wymienione na stronie http://www.microsoft.com/ about/legal/en/us/intellectualproperty/trademarks/en-us.aspx są zastrzeżonymi znakami towarowymi grupy Microsoft. Wszystkie inne znaki towarowe są własnością ich odnośnych właścicieli. APN PROMISE SA dołożyła wszelkich starań, aby zapewnić najwyższą jakość tej publikacji. Jednakże nikomu nie udziela się rękojmi ani gwarancji. APN PROMISE SA nie jest w żadnym wypadku odpowiedzialna za jakiekolwiek szkody będące następstwem korzystania z informacji zawartych w niniejszej publikacji, nawet jeśli APN PROMISE została powiadomiona o możliwości wystąpienia szkód. ISBN: 978-83-7541-179-9 Przekład: Natalia Chounlamany, Marek Włodarz Korekta: Ewa Swędrowska Skład i łamanie: MAWart Marek Włodarz

Spis treści Wprowadzenie....xi 1 Przegląd cech Windows PowerShell 5.0.... 1 Istota Windows PowerShell.... 1 Korzystanie z poleceń cmdlet... 3 Instalowanie Windows PowerShell... 3 Wdrażanie Windows PowerShell w starszych systemach operacyjnych.... 4 Korzystanie z narzędzi wiersza poleceń.... 4 Problemy dotyczące zabezpieczeń.... 6 Kontrolowanie wykonywania poleceń cmdlet.... 6 Potwierdzanie akcji.... 8 Wstrzymywanie potwierdzania poleceń.... 9 Posługiwanie się Windows PowerShell.... 10 Wywoływanie Windows PowerShell.... 10 Konfigurowanie konsoli Windows PowerShell.... 11 Przekazywanie opcji do poleceń cmdlet.... 12 Korzystanie z opcji pomocy.... 12 Poznawanie poleceń: ćwiczenia krok po kroku... 20 Podsumowanie rozdziału 1.... 22 2 Korzystanie z poleceń cmdlet.... 23 Podstawy poleceń cmdlet... 23 Korzystanie z cmdlet Get-ChildItem.... 24 Uzyskiwanie listingu katalogu.... 24 Formatowanie listingu katalogu przy użyciu polecenia Format-List.... 26 Korzystanie z polecenia cmdlet Format-Wide.... 27 Formatowanie listingu katalogu przy użyciu Format-Table.... 29 Formatowanie danych wyjściowych przy użyciu Out-GridView.... 30 Korzystanie z polecenia Get-Command.... 37 Wyszukiwanie poleceń cmdlet za pomocą symboli wieloznacznych.... 37 Korzystanie z polecenia Get-Member.... 45 Korzystanie z polecenia Get-Member do badania właściwości i metod.... 46 Korzystanie z polecenia New-Object.... 52 Tworzenie i korzystanie z obiektu wshshell.... 52 Korzystanie z polecenia Show-Command.... 54 Jak nazewnictwo poleceń cmdlet pomaga w nauce.... 56 Grupowanie czasowników Windows PowerShell... 57 Dystrybucja czasowników Windows PowerShell.... 58 Tworzenie profilu Windows PowerShell.... 60 iii

iv Spis treści Stosowanie poleceń cmdlet: ćwiczenia krok po kroku.... 62 Podsumowanie rozdziału 2.... 66 3 Dostawcy PowerShell.... 67 Istota dostawców Windows PowerShell.... 67 Dostawca aliasów.... 68 Dostawca certyfikatów... 71 Dostawca środowiska.... 78 Dostawca systemu plików.... 83 Dostawca funkcji.... 88 Korzystanie z dostawcy rejestru do zarządzania zawartością rejestru systemu Windows.... 90 Dwa dyski rejestru.... 91 Krótsza droga do tworzenia nowego klucza rejestru.... 98 Radzenie sobie z brakującą właściwością rejestru...101 Dostawca zmiennych.................................................... 102 Poznawanie dostawców Windows PowerShell: ćwiczenia krok po kroku... 106 Podsumowanie rozdziału 3....110 4 Korzystanie z funkcji zdalnych i zadań PowerShell...111 Funkcje zdalne Windows PowerShell....111 Klasyczna praca zdalna....111 WinRM....117 Korzystanie z zadań Windows PowerShell....124 Korzystanie z mechanizmów zdalnych i zadań Windows PowerShell: ćwiczenia krok po kroku....134 Podsumowanie rozdziału 4....138 5 Używanie skryptów Windows PowerShell...139 Po co pisać skrypty Windows PowerShell?....139 Podstawy skryptowania...141 Jak uruchomić skrypt Windows PowerShell....141 Włączanie obsługi skryptów w Windows PowerShell...142 Przechodzenie z wiersza poleceń do skryptu....145 Ręczne uruchamianie skryptów Windows PowerShell....148 Zmienne i stałe....150 Korzystanie z wyrażenia While...156 Budowanie wyrażenia While w Windows PowerShell...157 Praktyczny przykład wykorzystania wyrażenia While.... 159 Używanie specjalnych funkcji Windows PowerShell....159 Korzystanie z wyrażenia Do...While....160 Stosowanie operatora zakresu....161 Działania na tablicach....161 Rzutowanie znaków na wartości ASCII i odwrotnie....162

Spis treści v Korzystanie z wyrażenia Do...Until...162 Porównanie konstrukcji Do...Until w Windows PowerShell i w VBScript....163 Stosowanie wyrażenia Do w Windows PowerShell....163 Wyrażenie For....165 Wyrażenie For w Windows PowerShell....166 Korzystanie z wyrażenia Foreach.... 168 Przedterminowe opuszczanie wyrażenia Foreach.... 169 Wyrażenie If....171 Wykorzystywanie operatorów przypisania i porównania....172 Ocenianie wielu warunków....174 Wyrażenie Switch....174 Korzystanie z wyrażenia Switch.... 175 Kontrolowanie dopasowywania....177 Tworzenie wielu folderów: ćwiczenia krok po kroku.... 178 Podsumowanie rozdziału 5....181 6 Praca z funkcjami...183 Czym są funkcje....183 Wykorzystanie funkcji w celu ułatwienia ponownego użycia kodu....191 Dołączanie funkcji w środowisku Windows PowerShell....193 Korzystanie z techniki dot-sourcing.... 193 Korzystanie z funkcji dołączonych....195 Dołączanie pomocy do funkcji....197 Korzystanie z obiektu here-string... 197 Stosowanie dwóch parametrów wejściowych....200 Stosowanie ograniczeń typów w funkcjach...204 Używanie więcej niż dwóch parametrów wejściowych....207 Wykorzystanie funkcji do kapsułkowania logiki biznesowej....209 Wykorzystanie funkcji w celu ułatwienia modyfikowania kodu...212 Istota filtrów....217 Tworzenie funkcji: ćwiczenia krok po kroku.... 221 Podsumowanie rozdziału 6....224 7 Tworzenie zaawansowanych funkcji i modułów....225 Atrybut [cmdletbinding]....225 Łatwe komunikaty szczegółowe...226 Automatyczne sprawdzanie parametrów....227 Dodawanie obsługi parametru przełącznika -WhatIf.... 230 Obsługa przełącznika -Confirm.... 231 Specyfikowanie domyślnego zbioru parametrów....232 Atrybut Parameter....233 Właściwość Mandatory.... 234 Właściwość Position.... 235

vi Spis treści Właściwość ParameterSetName.... 236 Właściwość ValueFromPipeline.... 237 Właściwość HelpMessage.... 238 Moduły...239 Lokalizowanie i ładowanie modułów....239 Instalowanie modułów...244 Tworzenie modułu....257 Tworzenie zaawansowanej funkcji i instalowanie modułu: ćwiczenia krok po kroku....264 Podsumowanie rozdziału 7....268 8 Korzystanie z Windows PowerShell ISE....269 Uruchamianie Windows PowerShell ISE....269 Poruszanie się po narzędziu Windows PowerShell ISE....270 Korzystanie z panelu skryptu....273 Dopełnianie tabulatorem i IntelliSense....274 Korzystanie ze wstawek kodu w Windows PowerShell ISE....276 Używanie wstawek Windows PowerShell ISE do tworzenia kodu....276 Tworzenie nowych wstawek Windows PowerShell ISE....278 Usuwanie wstawek zdefiniowanych przez użytkownika....279 Korzystanie z przystawki Commands: ćwiczenia krok po kroku.... 280 Podsumowanie rozdziału 8....283 9 Stosowanie profili Windows PowerShell....285 Sześć profili PowerShell....285 Istota sześciu profili Windows PowerShell....286 Badanie zmiennej $profile.... 286 Ustalanie, czy konkretny profil istnieje.... 289 Tworzenie nowego profilu....289 Uwarunkowania projektowe profili....290 Korzystanie z jednego lub więcej profili....291 Korzystanie z profilu All Users, All Hosts.... 293 Korzystanie z własnego pliku....294 Grupowanie zbliżonej funkcjonalności w modułach....296 Gdzie umieścić moduł profilu...296 Tworzenie profilu: ćwiczenia krok po kroku.... 297 Podsumowanie rozdziału 9....300 10 Korzystanie z WMI....303 Istota modelu WMI....304 Posługiwanie się obiektami i przestrzeniami nazw....305 Wyliczanie dostawców WMI...309 Korzystanie z klas WMI....310 Odpytywanie WMI....314

Spis treści vii Uzyskiwanie informacji o usługach: ćwiczenia krok po kroku.... 319 Podsumowanie rozdziału 10....325 11 Odpytywanie WMI...327 Alternatywne metody łączenia się z WMI....327 Selektywne odczytywanie danych ze wszystkich instancji....336 Wybieranie wielu właściwości...337 Wybieranie konkretnych instancji....340 Stosowanie operatorów....342 Skracanie składni....345 Praca z oprogramowaniem: ćwiczenia krok po kroku.... 348 Podsumowanie rozdziału 11....355 12 Zdalne kwerendy WMI....357 Używanie WMI wobec systemów zdalnych....357 Dostarczanie alternatywnych poświadczeń dla połączenia zdalnego....359 Wykorzystanie mechanizmu zdalnego Windows PowerShell do wywoływania WMI....362 Wykorzystanie CIM do odpytywania klas WMI....363 Praca ze zdalnymi rezultatami....365 Redukowanie rozmiaru danych za pomocą parametrów Windows PowerShell....368 Redukowanie rozmiaru danych za pomocą kwerendy WQL...370 Uruchamianie zadań WMI....372 Korzystanie z mechanizmów zdalnych Windows PowerShell WMI: ćwiczenia krok po kroku....375 Podsumowanie rozdziału 12....377 13 Wywoływanie metod w klasach WMI....379 Wykorzystywanie poleceń cmdlet WMI do wykonywania metod instancji....379 Bezpośrednie stosowanie metody Terminate.... 381 Korzystanie z polecenia cmdlet Invoke-WmiMethod.... 383 Korzystanie z akceleratora typu [wmi].... 385 Wykorzystanie WMI do pracy z metodami statycznymi....386 Wykonywanie metod instancji: ćwiczenia krok po kroku.... 389 Podsumowanie rozdziału 13....392 14 Korzystanie z poleceń CIM....393 Eksplorowanie klas WMI przy użyciu poleceń CIM....393 Korzystanie z polecenia cmdlet Get-CimClass i parametru -ClassName.... 394 Wyszukiwanie metod klas WMI....395 Filtrowanie klas przy użyciu kwalifikatora....398 Odczytywanie instancji klas WMI....401 Redukowanie liczby zwracanych właściwości i instancji...402

viii Spis treści Czyszczenie wyjścia polecenia....403 Praca ze skojarzeniami....404 Odczytywanie instancji klas WMI: ćwiczenia krok po kroku................... 411 Podsumowanie rozdziału 14....414 15 Praca z Active Directory....415 Tworzenie obiektów w Active Directory...415 Tworzenie OU....415 Dostawcy ADSI....417 Nazwy LDAP....420 Tworzenie użytkowników....426 Czym jest kontrola konta użytkownika?....429 Praca z użytkownikami....431 Tworzenie wielu jednostek organizacyjnych: ćwiczenia krok po kroku.... 446 Podsumowanie rozdziału 15....452 16 Korzystanie z modułu AD DS....453 Istota modułu Active Directory....453 Instalowanie modułu Active Directory....453 Wprowadzenie do modułu Active Directory....455 Korzystanie z modułu Active Directory....456 Wyszukiwanie wzorców operacji....457 Poznawanie struktury Active Directory....462 Przemianowywanie lokacji Active Directory....466 Zarządzanie użytkownikami....467 Tworzenie użytkownika....470 Wyszukiwanie i odblokowywanie kont użytkowników Active Directory...471 Selektywne wybieranie kont użytkowników...473 Wyszukiwanie nieużywanych kont użytkowników....476 Aktualizowanie obiektów Active Directory: ćwiczenia krok po kroku... 479 Podsumowanie rozdziału 16....482 17 Wdrażanie AD DS przy użyciu Windows PowerShell....483 Wdrażanie nowego lasu przy użyciu modułu Active Directory....483 Dodawanie nowego kontrolera domeny do istniejącej domeny....490 Dodawanie kontrolera domeny tylko do odczytu....493 Przygotowywanie kontrolera domeny i dodawanie go do lasu: ćwiczenia krok po kroku....495 Podsumowanie rozdziału 17....497 18 Debugowanie skryptów....499 Debugowanie w Windows PowerShell....499 Trzy rodzaje błędów....499 Korzystanie z polecenia cmdlet Set-PSDebug....506

Spis treści ix Śledzenie skryptu....507 Krokowe wykonywanie skryptu....511 Włączanie trybu ścisłego...516 Debugowanie skryptu....520 Ustawianie punktów wstrzymania....521 Ustawianie punktu wstrzymania według numeru wiersza...521 Ustawianie punktu wstrzymania dla zmiennej....524 Ustawianie punktu wstrzymania dla polecenia....528 Reagowanie na punkty wstrzymania...530 Wyliczanie punktów wstrzymania....532 Włączanie i wyłączanie punktów wstrzymania....534 Usuwanie punktów wstrzymania....534 Debugowanie funkcji i skryptów: ćwiczenia krok po kroku.... 535 Podsumowanie rozdziału 18....539 19 Obsługa błędów....541 Obsługa brakujących parametrów....541 Tworzenie domyślnej wartości dla parametru....542 Ustawianie parametru jako wymaganego....543 Ograniczanie wyboru....544 Korzystanie z PromptForChoice do ograniczania wyboru....545 Wykorzystanie Test-Connection do sprawdzania dostępności komputerów...546 Wykorzystanie operatora -contains do badania zawartości tablicy...548 Wykorzystanie operatora -contains do testowania właściwości....550 Obsługiwanie brakujących uprawnień....553 Stosowanie metody prób i błędów....553 Sprawdzenie uprawnień i wyjście...554 Obsługa niedostępnych dostawców WMI....555 Niewłaściwe typy danych....565 Błędy przekroczenia zakresu....569 Stosowanie funkcji sprawdzania zakresu....569 Narzucanie ograniczeń na parametry...571 Używanie konstrukcji Try...Catch...Finally....572 Przechwytywanie wielu błędów....575 Wykorzystywanie metody PromptForChoice do ograniczania wyboru i stosowanie Try Catch Finally: ćwiczenia krok po kroku.... 578 Podsumowanie rozdziału 19....580 20 Korzystanie z przepływów pracy Windows PowerShell....581 Do czego służą przepływy pracy?....581 Wymagania dotyczące przepływów pracy....582 Prosty przepływ pracy....582 Równoległość w Windows PowerShell....584 Aktywności przepływu pracy....587

x Spis treści Polecenia Windows PowerShell jako aktywności...588 Niedozwolone podstawowe polecenia cmdlet....589 Nieautomatyczne polecenia cmdlet aktywności....589 Aktywności równoległe....590 Punkty kontrolne przepływów pracy Windows PowerShell....591 Czym są punkty kontrolne....591 Rozmieszczanie punktów kontrolnych....591 Dodawanie punktów kontrolnych....592 Dodawanie sekwencyjnej aktywności do przepływu pracy...595 Tworzenie przepływu pracy i dodawanie punktów kontrolnych: ćwiczenia krok po kroku....597 Podsumowanie rozdziału 20....599 21 Zarządzanie funkcją Windows PowerShell DSC....601 Wprowadzenie do funkcji Desired State Configuration....601 Proces DSC...603 Parametry konfiguracji...606 Ustawianie zależności...607 Kontrolowanie niekontrolowanych zmian konfiguracji....608 Modyfikowanie zmiennych środowiskowych....610 Tworzenie konfiguracji DSC i dodawanie zależności: ćwiczenia krok po kroku... 614 Podsumowanie rozdziału 21....617 22 Korzystanie z repozytorium PowerShell Gallery....619 Zapoznawanie się z PowerShell Gallery....619 Konfigurowanie i wykorzystywanie modułu PowerShellGet....621 Instalowanie modułu z PowerShell Gallery....624 Konfigurowanie zaufanych lokalizacji instalacji....624 Odinstalowywanie modułu....625 Wyszukiwanie i instalowanie modułów z PowerShell Gallery: ćwiczenia krok po kroku....626 Podsumowanie rozdziału 22....628 A Zalecenia dotyczące skryptów Windows PowerShell...629 B Krótki przewodnik po wyrażeniach regularnych....637 C Czasowniki PowerShell i ich polskie znaczenie....641 Indeks....649 O autorze...678

Wprowadzenie Windows PowerShell to de facto standard dla administratorów systemów Windows. W ramach programu Microsoft Engineering Common Criteria wsparcie dla funkcji zarządczych Windows PowerShell zapewniają wszystkie produkty serwerowe m.in. Microsoft SQL Server, Exchange, System Center oraz SharePoint. Znajomość, a nawet biegłe opanowanie, tej technologii jest już nie tyle mile widziane, lecz stanowi wręcz podstawowe wymaganie w ofertach pracy. Książka Windows PowerShell 5.0 Krok po kroku oferuje solidny fundament dla specjalisty IT, który chce być na bieżąco z tą kluczową technologią zarzadzania. Kto powinien przeczytać tę książkę Książka ta ma na celu szybko przygotować specjalistów IT do efektywnego wykorzystywania technik Windows PowerShell 5.0. Książka Windows PowerShell 5.0 Krok po kroku jest adresowana szczególnie do następujących osób: Konsultanci sieci Windows Zainteresowani standaryzacją i automatyzacją procesów instalacyjnych oraz konfiguracją komponentów sieciowych Microsoft.NET. Administratorów sieci Windows Zainteresowani automatyzacją codziennych zadań zarządzania systemami Windows lub komponentami sieciowymi.net. Microsoft Certified Solutions Experts (MCSEs) oraz Microsoft Certified Trainers (MCTs) Windows PowerShell jest kluczowym komponentem wielu cykli szkoleniowych i egzaminów certyfikacyjnych firmy Microsoft. Ogólny personel techniczny Zainteresowani gromadzeniem informacji i konfigurowaniem ustawień na komputerach Windows. Użytkownicy zaawansowani Zainteresowani uzyskaniem maksymalnej mocy i konfigurowalności swojego komputera Windows, czy to w domu, czy w niezarządzanym środowisku pracy. Założenia Autor oczekuje, że Czytelnik zna system operacyjny Windows, toteż nie zamieszcza wyjaśnień bazowych terminów sieciowych czy systemowych. Książka zakłada też, że Czytelnik ma przynajmniej podstawowe przygotowanie w zakresie programowania xi

xii Wprowadzenie obiektowego i rozumie pojęcia i stosowalność takich technik, jak metody, właściwości czy rzutowanie. Przydatna będzie też przynajmniej podstawowa znajomość platformy.net. Bardziej szczegółowe zagadnienia dotyczące programowania obiektowego, projektowania i skryptowania są wyjaśniane, gdy się pojawią. Być może nie jest to książka dla Ciebie, jeśli Książka ta nie jest przewodnikiem referencyjnym po Windows PowerShell 5.0, ale ma na celu wprowadzić Czytelnika w świat PowerShell i zachęcić go do dalszych eksperymentów i poznawania środowiska na własną rękę. Oznacza to jednak, że szczególnie pogłębione, ezoteryczne tematy nie zostały w niej omówione. Choć pojawiają się niektóre zaawansowane zagadnienia, w ogólności zaczynamy od bardzo podstawowych pojęć i zmierzamy w kierunku bardziej złożonych zagadnień. Z drugiej strony, jeśli ktoś nigdy nie używał komputera i nie orientuje się w elementarnych pojęciach dotyczących systemów operacyjnych, sieci czy programowania, ta książka zdecydowanie nie jest przeznaczona dla niego. Struktura książki Niniejszą książkę można podzielić na trzy części. Pierwsza część poświęcona jest wierszowi polecenia Windows PowerShell. Druga zawiera omówienie skryptów Windows PowerShell. W trzeciej części znaleźć można opis bardziej zaawansowanych technik Windows PowerShell, a także możliwości stosowania Windows PowerShell do realizowania różnych zadań zarządczych. Ta trzyczęściowa struktura jest umowna i nie została odzwierciedlona w konkretnym podziale na strony, jednak może pomóc w przystąpieniu do lektury tej dość długiej książki. Niniejsza książka nie stanowi szczegółowego kompendium wiedzy, a raczej ogólny przegląd możliwości Windows PowerShell. Każdy rozdział oferuje nowe doświadczenia, techniki i umiejętności. Osoby zainteresowane wybranym tematem mogą wykorzystać zdobytą wiedzę, przystępując do bardziej zaawansowanych szkoleń. Na przykład, czytelnicy, których w wyniku lektury rozdziału 21 zafascynuje funkcja DSC, powinni pamiętać, że poznali dopiero przedsmak jej możliwości. Istnieje szereg specjalistów MVP Windows PowerShell koncentrujących się na tym jednym aspekcie technologii Windows PowerShell.

Wprowadzenie xiii W którym miejscu rozpocząć lekturę Poszczególne części książki Windows PowerShell 5.0 Krok po kroku poświęcone są różnym technologiom. W zależności od własnych potrzeb i posiadanej znajomości narzędzi Microsoft można skoncentrować się na różnych częściach książki. Poniższa tabela może pomóc w zaplanowaniu lektury. Jeśli jesteś Nowicjuszem Windows PowerShell Specjalistą IT, który zna podstawy Windows PowerShell i chce jedynie nauczyć się zarządzać zasobami sieciowymi Postępuj następująco Skoncentruj się na rozdziałach 1 3 oraz 5 9 lub przeczytaj całą książkę od początku do końca. Przewertuj rozdziały 1 3, jeśli potrzebujesz przypomnieć sobie podstawowe zagadnienia. Poczytaj o nowych technologiach w rozdziałach 4, 14 oraz 20 22. Zainteresowany Active Directory Przeczytaj rozdziały 15 17. Zainteresowany skryptami Windows PowerShell Zaznajomiony z wersją Windows PowerShell 3.0 Zaznajomiony z wersją Windows PowerShell 4.0 Przeczytaj rozdziały 5 8, 18 oraz 19. Przeczytaj rozdział 1, przejrzyj rozdziały 8 i 18, a następnie przeczytaj rozdziały 20 22. Przeczytaj rozdział 1, przejrzyj rozdziały 8, 18 i 21, a następnie przeczytaj rozdział 22. Wszystkie rozdziały zawierają dwa ćwiczenia, w których można krok po kroku przetestować zdobyte umiejętności. Wymagania systemowe Do wykonania ćwiczeń praktycznych zawartych w książce potrzebne będą następujące elementy sprzętowe i programowe: Windows 10, Windows 7, Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 lub Windows Server 2008 z Service Pack 2. Komputer z procesorem 1,6 GHz lub szybszym (zaleca się 2 GHz) 1 GB (w systemie 32-bitowym) lub 2 GB (64-bitowym) pamięci RAM 3,5 GB dostępnego miejsca na dysku Napęd dyskowy 5400 RPM lub szybszy Karta graficzna wspierająca DirectX 9 o rozdzielczości 1024 x 768 lub wyższej Połączenie z Internetem w celu pobrania oprogramowania lub omawianych przykładów

xiv Wprowadzenie W zależności od konfiguracji Windows do uruchomienia pewnych poleceń niezbędne mogą być uprawnienia administratora lokalnego. Pobieranie skryptów Większość rozdziałów książki zawiera przykłady kodu, które można wpisywać własnoręcznie, aby wypróbować nowe umiejętności i techniki. Wszystkie przykładowe skrypty można pobrać z następującej strony: http://aka.ms/ps3e/files Z tej strony należy pobrać plik PS3E_675117_Scripts.zip. Instalowanie skryptów Postępuj zgodnie z poniższą instrukcją w celu zainstalowania na swoim komputerze skryptów, które można wykorzystać w prezentowanych w tej książce ćwiczeniach. 1. Rozpakuj plik PS3E_675117_Scripts.zip pobrany z witryny książki. 2. Jeśli wyświetlony zostanie monit, przejrzyj umowę licencyjną. Jeśli akceptujesz jej warunki, zaznacz opcję Accept, a następnie kliknij przycisk Next. Korzystanie ze skryptów Pliki skryptów zostaną rozpakowane do folderów, których nazwy odpowiadają rozdziałom książki. Podziękowania Chciałbym podziękować za pomoc następującym osobom: moim redaktorom Kathy Krause oraz Jaime Odell z firmy OTSI, za przekształcenie tekstu w coś przypominającego prawdziwą angielszczyznę i wskazywanie mi różnych konwencji Microsoft; mojemu recenzentowi i przyjacielowi Brian Wilhite, Microsoft PFE, którego spostrzegawczość ochroniła mój profesjonalny wizerunek; Jason Walker z Microsoft Consulting Services oraz Gary Siepser i Ashley McGlone z Microsoft PFE, którzy przejrzeli mój konspekt i dostarczyli wiele sugestii. Na koniec wreszcie chcę podziękować mojej żonie Teresie Wilson, Windows PowerShell MVP (znanej także jako Scripting Wife), która przeczytała każdą stronę i dodała liczne sugestie, które będą bardzo przydatne początkującym skrypciarzom.

Wprowadzenie xv Errata, aktualizacje i wsparcie dla książki Dołożyliśmy wszelkich starań, aby zapewnić poprawność tej książki i dołączonych do niej materiałów. Errata tej książki będzie dostępna na stronie: http://aka.ms/ps3e/errata Czytelników, którzy odkryją błędy niewyszczególnione na liście, prosimy o ich zgłoszenie za pośrednictwem tej samej strony. Dodatkowe informacje można uzyskać, wysyłając email do działu Microsoft Press Book Support: mspinput@microsoft.com Należy mieć jednak na uwadze, że powyższe adresy nie służą do uzyskiwania pomocy technicznej w zakresie działania oprogramowania oraz sprzętu firmy Microsoft. Do tego celu służy strona: http://support.microsoft.com Darmowe e-booki wydawnictwa Microsoft Press Wydawnictwo Microsoft Press oferuje różne darmowe e-booki, począwszy od ogólnych przeglądów technicznych po dogłębne analizy specjalistycznych zagadnień. Są one dostępne w formacie PDF, EPUB lub Mobi for Kindle i gotowe do pobrania za strony: http://aka.ms/mspressfree Warto regularnie tam zaglądać w poszukiwaniu nowych tytułów! Państwa opinia jest dla nas cenna Wydawnictwo Microsoft Press na pierwszym miejscu stawia satysfakcję czytelników, dlatego Państwa zdanie jest dla nas bardzo ważne. Prosimy o wyrażenie opinii na temat tej książki na poniższej stronie: http://aka.ms/tellpress Zdajemy sobie sprawę z tego, jak zajęci bywają nasi czytelnicy, dlatego ograniczyliśmy się do kilku pytań. Odpowiedzi są przesyłane bezpośrednio do redaktorów w wydawnictwie Microsoft Press (ankiety są anonimowe). Z góry dziękujemy za opinie!

xvi Wprowadzenie Zostańmy w kontakcie Pozostańmy w stałym kontakcie. Można nas znaleźć w serwisie Twitter: http://twitter. com/microsoftpress.

ROZDZIAŁ 1 Przegląd cech Windows PowerShell 5.0 Po zapoznaniu się z tym rozdziałem Czytelnik będzie umiał: Określić podstawowe zastosowania i możliwości Windows PowerShell. Zainstalować Windows PowerShell. Korzystać z podstawowych narzędzi wiersza polecenia wewnątrz Windows PowerShell Korzystać z systemu pomocy. Uruchamiać podstawowe polecenia cmdlet. Uzyskiwać pomoc na temat poleceń cmdlet. Wersja Windows PowerShell 5.0 zapewnia ogromne możliwości administratorom sieci systemów Windows. Dzięki połączeniu siły dojrzałego języka skryptowego z dostępem do narzędzi wiersza poleceń, interfejsów Windows Management Instrumentation (WMI), a nawet VBScript (Microsoft Visual Basic Scripting Edition), Windows PowerShell zapewnia skuteczność i łatwość stosowania. Implementacja setek poleceń cmdlet oraz zaawansowanych funkcji tworzy środowisko, w którym można dokonywać skomplikowanych zmian za pomocą prostych, czytelnych linii kodu. Jako część standardu Microsoft Common Engineering Criteria, Windows PowerShell szybko staje się podstawowym rozwiązaniem zarządzania dla platformy Windows. Istota Windows PowerShell Zapewne największą przeszkodą dla wielu administratorów sieci w przejściu do korzystania z Windows PowerShell 5.0 jest niezrozumienie, co to naprawdę jest. Pod wieloma względami jest to zamiennik dla sędziwej powłoki CMD (command polecenie). I rzeczywiście, w systemie Windows Server 2012 w trybie Core możliwe jest zastąpienie powłoki CMD przez Windows PowerShell, tak że po uruchomieniu serwera używa on PowerShell jako domyślnego interfejsu użytkownika. 1

2 Rozdział 1: Przegląd cech Windows PowerShell 5.0 Jak można się przekonać, po uruchomieniu Windows PowerShell można używać w nim dobrze znanych poleceń, na przykład cd do zmiany katalogu roboczego lub dir do wyświetlenia jego zawartości tak samo jak w oknie CMD. PS C:\Windows\System32> cd\ PS C:\> dir Directory: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 7/10/2015 7:07 PM FSO d----- 7/9/2015 5:24 AM PerfLogs d-r--- 7/9/2015 6:59 AM Program Files d-r--- 7/10/2015 7:27 PM Program Files (x86) d-r--- 7/10/2015 7:18 PM Users d----- 7/10/2015 6:00 PM Windows PS C:\> Można również połączyć tradycyjne polecenia interpretera CMD z innymi narzędziami, takimi jak fsutil, co prezentuje kolejny przykład: PS C:\> md c:\test Directory: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 7/11/2015 11:14 AM test PS C:\> fsutil file createnew c:\test\myfile.txt 1000 File c:\test\myfile.txt is created PS C:\> cd c:\test PS C:\test> dir Directory: C:\test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/11/2015 11:14 AM 1000 myfile.txt PS C:\test> Przykłady te prezentują interaktywne wykorzystanie Windows PowerShell. Interaktywność jest jedną z głównych funkcji Windows PowerShell. Aby użyć PowerShell interaktywnie, wystarczy otworzyć jego okno zachęty i zacząć wpisywać polecenia po jednym na raz, albo łącząc je ze sobą, podobnie jak w pliku wsadowym. Do tego tematu powrócę później, gdyż najpierw muszę przedstawić bardziej podstawowe informacje.

Istota Windows PowerShell 3 Korzystanie z poleceń cmdlet Oprócz aplikacji konsolowych systemu Windows i wbudowanych poleceń w środowisku PowerShell dostępne są polecenia cmdlet (wymawiane jako komandlet ), budujące jego prawdziwą potęgę. Polecenia cmdlet mogą być tworzone przez każdego. Zespół programistów Windows PowerShell w firmie Microsoft przygotował podstawowy zbiór poleceń, ale oprócz tego powstały setki poleceń opracowanych przez inne grupy projektowe. Większość poleceń jest dołączona do systemu Windows 10, aczkolwiek niektóre pakiety stanowią część specjalistycznych programów, takich jak Microsoft Exchange czy Microsoft SQL Server. Polecenia cmdlet są plikami wykonywalnymi, które wykorzystują funkcjonalności wbudowane w środowisko PowerShell i dzięki temu są tak łatwe do napisania. Nie są to skrypty zawierające nieskompilowany kod są zbudowane przy wykorzystaniu usług specjalnej przestrzeni nazw Microsoft.NET Framework. Windows PowerShell 5.0 w wersji dla Windows 10 wyposażony jest w około 1300 poleceń cmdlet i w miarę dodawania nowych funkcji lub ról dołączane są kolejne. Polecenia te mają na celu zapewnienie administratorom sieci czy konsultantom dostępu do siły Windows PowerShell bez konieczności tworzenia złożonych skryptów. Jedną z głównych przewag PowerShell jest to, że wszystkie polecenia wykorzystują standardową konwencję nazewniczą określaną terminem czasownik-rzeczownik (verb-noun), na przykład Get-Help ("otrzymaj pomoc"), Get-EventLog lub Get- Process. Polecenia używające czasownika Get (weź, pobierz) wyświetlają informacje o elemencie umieszczonym po prawej stronie łącznika. Polecenia używające czasownika Set (ustal, określ) powodują ustawienie odpowiednich cech elementu po prawej stronie łącznika. Na przykład polecenie cmdlet Set-Service pozwala (między innymi) zmienić tryb uruchomieniowy usługi (ang. service). Wszystkie polecenia używają jednego ze standardowych czasowników. W celu wyświetlenia listy tych czasowników można użyć polecenia cmdlet Get-Verb. W Windows PowerShell 5.0 występuje około stu zaakceptowanych czasowników. Instalowanie Windows PowerShell Windows PowerShell 5.0 jest dołączony do systemu operacyjnego Windows 10. W witrynie Microsoft Download Center dostępny jest pakiet Windows Management Framework 5.0, który zawiera zaktualizowane wersje Windows Remote Management (WinRM), WMI oraz Windows PowerShell 5.0. Nie istnieje pakiet dla systemu Windows 10, gdyż oprogramowanie jest zawarte w samym systemie. Instalacja pakietu Windows Management Framework 5.0 w systemach Windows 7, Windows 8.1, Windows Server 2008 R2, Windows Server 2012 oraz Windows Server 2012 R2 wymaga uruchomienia.net Framework 4.5.

4 Rozdział 1: Przegląd cech Windows PowerShell 5.0 Wdrażanie Windows PowerShell w starszych systemach operacyjnych Po pobraniu pakietu instalacyjnego z witryny http://www.microsoft.com/downloads można wdrożyć go na komputerach przedsiębiorstwa wykonując jedno z poniższych działań: Utworzyć pakiet instalacyjny Windows Management Framework i ogłosić go dla odpowiedniej jednostki organizacyjnej (OU) lub zbioru jednostek. Utworzyć obiekt zasad grupy (GPO) instalacji oprogramowania w usługach AD DS i połączyć go z odpowiednią jednostką organizacyjną. Dołączyć pakiet jako zaaprobowany do serwera SUS (Software Update Services), jeśli jest dostępny. Umieścić pakiet Windows Management Framework 5.0 w centralnym udziale plikowym, aby użytkownicy mogli go zainstalować we własnym zakresie. Jeśli wdrożenie odbywa się na pojedynczym komputerze, a nie w całym przedsiębiorstwie, najprostszą metodą wdrażania będzie pobranie pakietu i przejście przez kroki kreatora instalacji. Uwaga Aby móc zacząć używać narzędzi wiersza poleceń Windows PowerShell, należy uruchomić powłokę, wybierając Start Run PowerShell. Pojawi się okno polecenia ze znakiem zachęty PS>, w którym można zacząć wpisywać polecenia. Korzystanie z narzędzi wiersza poleceń Jak wspomniałem wcześniej, z wnętrza Windows PowerShell można bezpośrednio wywoływać narzędzia trybu wiersza poleceń. Przewagą wykorzystania PowerShell jako środowiska dla tych narzędzi, w przeciwieństwie do korzystania z tradycyjnego interpretera CMD, są funkcje przekierowywania wyjścia i formatowania dostępne w PowerShell. Dodatkowo, jeśli mamy już pliki wsadowe (.cmd lub.bat) wykorzystujące istniejące narzędzia wiersza poleceń, można je łatwo zmodyfikować, aby mogły być uruchamiane w środowisku PowerShell. Poniższa procedura ilustruje dołączenie wyników polecenia ipconfig do pliku tekstowego. Wywoływanie polecenia ipconfig 1. Uruchom powłokę Windows PowerShell, wybierając Start Run Windows PowerShell. Okno poleceń PowerShell otworzy się domyślnie w głównym folderze zalogowanego użytkownika np. C:\Users\Ed. 2. Wpisz polecenie ipconfig /all:

Korzystanie z narzędzi wiersza poleceń 5 PS C:\> ipconfig /all 3. Przekieruj wyniki polecenia ipconfig /all do pliku tekstowego, jak poniżej: PS C:\> ipconfig /all >ipconfig.txt 4. Otwórz utworzony plik w Notatniku, aby przejrzeć jego zawartość: PS C:\> notepad ipconfig.txt Wpisywanie pojedynczych poleceń jest oczywiście użyteczne, ale zazwyczaj potrzebujemy więcej niż jednego, aby zrealizować założony cel na przykład zgromadzić informacje konfiguracyjne potrzebne do rozwiązania problemów z instalacją lub niedostateczną wydajnością. I tu objawia się przewaga Windows PowerShell. W przeszłości w takim przypadku trzeba było albo napisać plik wsadowy, albo wpisywać kolejne polecenia ręcznie. Oto przykład prostego pliku wsadowego rejestrującego informacje przydatne do rozwiązywania problemów z siecią: TroubleShoot.bat ipconfig /all >C:\tshoot.txt route print >>C:\tshoot.txt hostname >>C:\tshoot.txt net statistics workstation >>C:\tshoot.txt Oczywiście przy ręcznym wpisywaniu poleceń musielibyśmy czekać na wykonanie każdego polecenia przed wywołaniem kolejnego. W takiej sytuacji łatwo można zagubić się we właściwej sekwencji lub wpisać kolejne polecenie przed zakończeniem przetwarzania poprzedniego, co doprowadzi do bezużytecznych wyników. Windows PowerShell eliminuje ten problem. Można teraz wpisać wiele poleceń w jednym wierszu, po czym odejść od komputera lub zająć się innymi zadaniami, podczas gdy system generuje wyniki. Nie ma potrzeby tworzenia pliku wsadowego w tym celu. Wskazówka Można wpisywać wiele poleceń w jednym wierszu Windows PowerShell, aby zostały wykonane po kolei. Poszczególne polecenia należy rozdzielać średnikami. Poniższy przykład prezentuje wywołanie wielu poleceń w jednym wierszu. Uruchamianie wielu poleceń 1. Otwórz okno poleceń Windows PowerShell, wybierając Start Run (Uruchom) PowerShell. Okno poleceń Windows PowerShell otworzy się domyślnie w głównym folderze zalogowanego użytkownika. 2. Wpisz polecenie ipconfig /all, przesyłając wynik do pliku tekstowego Tshoot.txt przy użyciu znaku przekierowania (>): ipconfig /all >tshoot.txt

6 Rozdział 1: Przegląd cech Windows PowerShell 5.0 3. W tym samym wierszu wpisz średnik i dopisz polecenie print. Wynik tego polecenia dodaj do pliku Tshoot.txt, używając znaku przekierowania z dołączeniem (>>). Wiersz polecenia będzie wyglądał następująco: ipconfig /all >tshoot.txt; route print >>tshoot.txt 4. Nadal w tym samym wierszu wstaw kolejny średnik i dodaj polecenie hostname, ponownie kierując wynik do pliku Tshoot.txt, używając znaku przekierowania z dołączeniem: ipconfig /all >tshoot.txt; route print >>tshoot.txt; hostname >>tshoot.txt 5. Dołącz polecenie net statistics workstation, oddzielając je od poprzednich znakiem średnika i dołączając wyjście polecenia do pliku Tshoot.txt. Ostateczna postać wiersza polecenia będzie wyglądać następująco: ipconfig /all >tshoot.txt; route print >>tshoot.txt; hostname >>tshoot.txt; net statistics workstation >>tshoot.txt Problemy dotyczące zabezpieczeń Biorąc pod uwagę ogromną elastyczność i wszechstronność Windows PowerShell, powstają nieuniknione obawy dotyczące zabezpieczeń systemowych. Jednak problemy te zostały uwzględnione już na etapie projektowania powłoki PowerShell. Po uruchomieniu Windows PowerShell domyślnie wybierany jest główny folder bieżącego użytkownika. Gwarantuje to, że znajdujemy się w katalogu, w którym dysponujemy uprawnieniami do wykonywania szeregu działań. Jest to znacznie bezpieczniejsze, niż zaczynanie od głównego katalogu dysku lub katalogu systemowego. Wykonywanie skryptów jest domyślnie zablokowane i można nim łatwo zarządzać poprzez Zasady grupy. Możliwe jest również włączenie tej funkcjonalności dla określonego użytkownika lub sesji. Kontrolowanie wykonywania poleceń cmdlet Każdemu chyba zdarzyło się otworzyć interpreter CMD, wpisać jakieś polecenie i nacisnąć Enter, aby sprawdzić, co ono robi. Jednak co by było, gdyby tym poleceniem było Format C:\? Czy na pewno chcielibyśmy sformatować dysk C w naszym komputerze? W tym podrozdziale pokażę niektóre parametry, które pozwalają sterować sposobem wykonywania poleceń cmdlet. Choć nie wszystkie polecenia obsługują te parametry, robi to większość poleceń dołączonych do Windows PowerShell. Trzy parametry przełącznika (nazywane również parametrami przełącznika), których można użyć do sterowania wykonywaniem, to -WhatIf, -Confirm oraz suspend. Suspend nie jest w istocie parametrem przełącznika przekazywanym do polecenia cmdlet, ale

Problemy dotyczące zabezpieczeń 7 działaniem, które można podjąć po zgłoszeniu potwierdzenia, a zatem dodatkową metodą kontrolowania wykonywania poleceń. Uwaga Aby użyć parametru -WhatIf, należy wpisać całe polecenie cmdlet i dopisać po nim -WhatIf na końcu listy parametrów. Opcja ta jest dostępna tylko dla poleceń zmieniających stan systemu. Z tego względu nie można (ani nie ma potrzeby) stosowania parametru -WhatIf dla poleceń informacyjnych, takich jak Get-Process. Polecenia cmdlet zmieniające stan systemu (na przykład Set-Service) wspierają tryb prototypowy, który jest włączany poprzez użycie parametru przełącznika -WhatIf. To, czy dane polecenie obsługuje ten parametr, jest zależne od programisty tworzącego cmdlet. Zespół projektowy Windows PowerShell zaleca implementację parametru -WhatIf we wszystkich poleceniach, które mogą dokonywać zmian. Poniższy przykład prezentuje wykorzystanie parametru przełącznika -WhatIf: Użycie parametru -WhatIf do prototypowania polecenia 1. Otwórz okno Windows PowerShell, o ile nie zostało uruchomione wcześniej. 2. Uruchom program Notatnik. W tym celu wpisz notepad i naciśnij Enter, jak pokazano poniżej: notepad 3. Zidentyfikuj proces związany z uruchomioną sesją Notatnika, używając polecenia cmdlet Get-Process. Wpisz dostateczną część nazwy procesu, aby ją zidentyfikować, uzupełniając pozostałą część gwiazdką (*) w ten sposób nie trzeba wpisywać całej (niekiedy długiej) nazwy procesu. Get-Process note* 4. Przejrzyj wynik polecenia Get-Process, aby znaleźć identyfikator procesu. Wynik polecenia z mojego komputera jest przedstawiony poniżej. Trzeba pamiętać, że niemal na pewno numer procesu na innym komputerze będzie się różnił od pokazanego: Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 114 8 1544 8712...54 0.00 3756 notepad 5. Użyj parametru -WhatIf, aby się przekonać, co by się stało po użyciu polecenia Stop-Process wobec identyfikatora znalezionego w punkcie 4 (w kolumnie Id wyniku). Parametr -Id pozwala podać identyfikator procesu w poleceniu. Polecenie to w moim przypadku wygląda następująco: Stop-Process -id 3756 -whatif

8 Rozdział 1: Przegląd cech Windows PowerShell 5.0 6. Przejrzyj wynik polecenia. Informuje ono, że jego prawdziwe wykonanie spowoduje zatrzymanie procesu notepad o identyfikatorze wskazanym w poleceniu: What if: Performing the operation "Stop-Process" on target "notepad (3756)". (What if: Wykonanie operacji "Stop-Process" wobec celu "notepad (3756)") Potwierdzanie akcji Jak wiemy już z poprzedniego podpunktu, możemy wykorzystać parametr -WhatIf do wykonania polecenia w trybie prototypowym. W ten sposób możemy dowiedzieć się, co polecenie zrobi. Jeśli jednak chcemy być monitowani przed rzeczywistym wykonaniem polecenia, możemy użyć parametru -Confirm. Potwierdzanie wykonania poleceń 1. Otwórz okno Windows PowerShell, uruchom program Notatnik i zidentyfikuj jego proces, tak jak w krokach 1 4 poprzedniego ćwiczenia. 2. Użyj parametru -Confirm, aby wymusić monitowanie dla polecenia Stop-Process w celu zatrzymania procesu Notepad zidentyfikowanego przy pomocy polecenia Get-Process note*. Stop-Process -id 3756 -confirm Polecenie Stop-Process wywołane z parametrem -Confirm wyświetli następujący monit. Confirm Are you sure you want to perform this action? Performing operation "Stop-Process" on Target "notepad (3756)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): (Potwierdź Czy na pewno chcesz wykonać to działanie? Tak Tak na wszystkie Nie Nie na wszystkie Wstrzymaj Pomoc (domyślnie Tak)) 3. Wpisz y i naciśnij Enter. Notatnik zostanie zamknięty, a Windows PowerShell wyświetli znak zachęty, jak poniżej: PS C:\> Wskazówka W celu wstrzymania wykonywania polecenia należy w monicie potwierdzenia wpisać s i nacisnąć Enter.

Problemy dotyczące zabezpieczeń 9 Wstrzymywanie potwierdzania poleceń Możliwość wyświetlania monitu o potwierdzenie przed wykonaniem polecenia jest niezwykle użyteczna i niekiedy może być krytycznym elementem utrzymywania najwyższego możliwego poziomu dostępności systemu. Łatwo można sobie wyobrazić sytuację, gdy wpisujemy długie, skomplikowane polecenie, po czym przypominamy sobie, że najpierw trzeba sprawdzić coś innego. Na przykład możemy chcieć zatrzymać wiele procesów, ale musimy przejrzeć ich szczegóły, aby się upewnić, że wymusimy zatrzymanie nieodpowiedniego procesu. W takiej sytuacji, zamiast kasować pracowicie wpisany wiersz (i musieć wprowadzić go ponownie później), możemy posłużyć się opcją wstrzymania wykonania polecenia. Wstrzymywanie wykonywania polecenia cmdlet 1. Otwórz okno Windows PowerShell, uruchom program Notatnik i zidentyfikuj jego proces, tak jak w krokach 1 4 ćwiczenia Użycie parametru -WhatIf do prototypowania polecenia. Wynik na moim komputerze jest pokazany poniżej. Trzeba pamiętać, że niemal na pewno identyfikator procesu na innym komputerze będzie się różnił od pokazanego: Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 39 2 944 400 29 0.05 3576 notepad 2. Użyj parametru -Confirm, aby wymusić monitowanie przed wykonaniem polecenia Stop-Process, jak poniżej: Stop-Process -id 3576 -confirm Polecenie wyświetli monit podobny do pokazanego w poprzednim przykładzie. 3. Aby wstrzymać wykonanie polecenia Stop-Process, wpisz s. Znak zachęty PowerShell zmieni się na podwójną strzałkę, jak poniżej: PS C:\>> 4. Użyj polecenia Get-Process, aby uzyskać listę uruchomionych procesów o nazwach zaczynających się na literę n, jak poniżej: Get-Process n* Na moim komputerze występowały dwa takie procesy: uruchomiony przeze mnie proces Notepad oraz jeszcze jeden, związany z jedną z usług systemowych: Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 269 168 4076 2332...98 0.19 1632 NisSrv 114 8 1536 8732...54 0.02 3576 notepad

10 Rozdział 1: Przegląd cech Windows PowerShell 5.0 5. Powróć do monitu potwierdzenia, wpisując exit i naciskając Enter. Monit o potwierdzenie zostanie wyświetlony ponownie. 6. Wpisz y i naciśnij Enter, aby zatrzymać proces Notepad. Nie ma już dalszych potwierdzeń, zatem znak zachęty zmieni się na standardowy, jak poniżej: PS C:\> Posługiwanie się Windows PowerShell W tej części zajmiemy się uzyskiwaniem dostępu do powłoki Windows PowerShell i konfigurowaniem konsoli. Wywoływanie Windows PowerShell Po zainstalowaniu Windows PowerShell w systemie Windows jest on natychmiast dostępny do użycia. Jednak ciągłe sięganie do menu Start czy też używanie sekwencji klawiszy Windows+R w celu wywołania monitu run jest czasochłonne i niewygodne. W przypadku systemu Windows 10 problem jest nieco mniejszy, gdyż można po prostu wpisać PowerShell na ekranie Start. Dla większej wygody wolałem przypiąć Windows PowerShell oraz PowerShell ISE do ekranu Start. W systemie Windows Server 2012 R2 w trybie Core zdecydowałem się zastąpić domyślną powłokę CMD konsolą Windows PowerShell. Jest to idealne rozwiązanie dla mnie i mojego sposobu pracy, zatem napisałem skrypt, który to realizuje. Skrypt ten może być wywoływany podczas logowania, aby automatycznie wykonać niezbędne zmiany. W systemie Windows 10 skrypt dodaje skróty do konsoli Windows PowerShell i PowerShell ISE do ekranu Start oraz paska zadań pulpitu. W Windows 7 skróty tworzone są w pasku zadań i menu Start. Skrypt ten działa tylko w systemach w języku angielskim. Aby móc użyć go w systemach lokalizowanych w innych językach, trzeba zmienić wartości zmiennych $pintostart oraz $pintotaskbar na odpowiedniki w tych językach. Uwaga Korzystanie ze skryptów Windows PowerShell omówione jest w rozdziale 5, Używanie skryptów PowerShell. Rozdział ten zawiera szczegółowe informacje, jak działają skrypty i jak należy je uruchamiać. Skrypt nosi nazwę PinToStart.ps1 i wygląda następująco: PinToStart.ps1 $pintostart = "Pin to Start" $file = @((Join-Path -Path $PSHOME -childpath "PowerShell.exe"), (Join-Path -Path $PSHOME -childpath "powershell_ise.exe") ) Foreach($f in $file)

Posługiwanie się Windows PowerShell 11 {$path = Split-Path $f $shell=new-object -com "Shell.Application" $folder=$shell.namespace($path) $item = $folder.parsename((split-path $f -leaf)) $verbs = $item.verbs() foreach($v in $verbs) {if($v.name.replace("&","") -match $pintostart){$v.doit()}} Konfigurowanie konsoli Windows PowerShell Konsola Windows PowerShell ma wiele konfigurowalnych aspektów. Możliwe elementy można umieścić w pliku konfiguracyjnym PSconsole. Aby wyeksportować bieżącą konfigurację do pliku, można użyć polecenia Export-Console, jak w poniższym przykładzie: PS C:\> Export-Console myconsole Plik PSConsole zostanie zapisany w bieżącym katalogu z domyślnym rozszerzeniem.psc1. Jest to plik w formacie XML. Domyślny (niezmodyfikowany) plik konfiguracji konsoli został przedstawiony poniżej: <?xml version="1.0" encoding="utf-8"?> <PSConsoleFile ConsoleSchemaVersion="1.0"> <PSVersion>5.0.10224.0</PSVersion> <PSSnapIns /> </PSConsoleFile> Kontrolowanie opcji uruchamiania PowerShell 1. Okno PowerShell można uruchomić bez paska tytułu, używając argumentu -NoLogo, jak poniżej: PowerShell -nologo 2. Aby uruchomić konkretną wersję Windows PowerShell (przy założeniu, że jest zainstalowana na komputerze), można użyć argumentu -Version: PowerShell -version 3 3. Uruchomienie Windows PowerShell przy użyciu wskazanego pliku konfiguracyjnego wymaga użycia argumentu -PSConsoleFile, jak poniżej: PowerShell -psconsolefile myconsole.psc1 4. Możliwe jest uruchomienie Windows PowerShell w celu wykonania określonego polecenia, po czym nastąpi samoczynne wyjście (zamknięcie konsoli). W tym celu należy użyć argumentu -Command. Samo polecenie do wykonania musi być poprzedzone znakiem & i ujęte w nawiasy klamrowe, jak poniżej: Powershell -command "& {Get-Process}"

12 Rozdział 1: Przegląd cech Windows PowerShell 5.0 Przekazywanie opcji do poleceń cmdlet Jedną z najbardziej użytecznych cech Windows PowerShell jest standaryzacja składni używanej przez polecenia cmdlet. Znacząco upraszcza to naukę obsługi powłoki i języka. Tabela 1-1 zawiera listę najczęściej stosowanych parametrów. Trzeba pamiętać, że nie wszystkie parametry są implementowane we wszystkich poleceniach. Jeśli jednak dany parametr jest zaimplementowany, zostanie zinterpretowany w taki sam sposób przez każde polecenie, gdyż interpretację wykonuje sam silnik PowerShell. Tabela 1-1 Typowe parametry Parametr -WhatIf -Confirm -Verbose -Debug -ErrorAction -ErrorVariable -OutVariable -OutBuffer Znaczenie Powoduje, że polecenie nie jest wykonywane, ale wyświetlana jest informacja, co nastąpiłoby po jego wykonaniu (tryb prototypu). Nakazuje wyświetlanie monitu przed właściwym wykonaniem polecenia. Powoduje wyświetlanie bardziej szczegółowych informacji o wykonaniu polecenia. Powoduje wyświetlanie informacji debugowania. Nakazuje wykonanie określonego działania, gdy wystąpi błąd. Dopuszczalne akcje to Continue (kontynuuj), Ignore (ignoruj), Inquire (pytaj), Silently- Continue (kontynuuj bez powiadamiania), Stop (zatrzymaj) oraz Suspend (wstrzymaj). Poleca użycie określonej zmiennej do przechowania informacji o błędzie. Jest to uzupełnienie standardowej zmiennej $Error. Nakazuje przekierowanie informacji wyjściowych do wskazanej zmiennej. Nakazuje przechowanie określonej liczby obiektów przed wywołaniem następnego polecenia cmdlet w ciągu przekazywania (pipeline). Uwaga Aby uzyskać informacje pomocy na temat dowolnego polecenia cmdlet, należy użyć polecenia Get-Help <nazwa cmdlet>. Na przykład Get-Help Get-Process zwraca informacje o składni i stosowaniu polecenia Get-Process. Korzystanie z opcji pomocy Jednym z pierwszych poleceń, które należy wywołać przy rozpoczynaniu pracy z Windows PowerShell, jest Update-Help. Wynika to z faktu, że Windows PowerShell nie jest domyślnie wyposażony w pliki pomocy dla wszystkich poleceń cmdlet. Nie oznacza to, że taka pomoc nie istnieje jedynie to, że pomoc wykraczająca poza podstawową składnię wymaga pobrania dodatkowych materiałów.

Korzystanie z opcji pomocy 13 Domyślna instalacja Windows PowerShell 5.0 zawiera liczne moduły, które zmieniają się pomiędzy różnymi wdrożeniami zależnie od wersji systemu operacyjnego, zainstalowanych w nim funkcji i aktywnych ról. W istocie Windows PowerShell 5.0 zainstalowany w systemie Windows 7 zawiera mniej modułów i poleceń, niż dostępne w stacji roboczej Windows 10. Nie oznacza to jednak chaosu, gdyż najważniejsze polecenia cmdlet core nie zmieniają się pomiędzy poszczególnymi instalacjami. Różnice pomiędzy instalacjami wynikają z faktu, że dodatkowe funkcje i role systemu operacyjnego często powodują doinstalowanie nowych modułów Windows Power- Shell i związanych z nimi poleceń cmdlet. Modułowa budowa Windows PowerShell wymaga dodatkowej uwagi podczas aktualizowania plików pomocy. Proste wywołanie Update-Help nie uaktualni wszystkich modułów dostępnych w określonym systemie. W rzeczywistości niektóre moduły mogą w ogóle nie obsługiwać aktualizacji pomocy w tym wypadku próba uaktualnienia wygeneruje błąd. Najprostszą metodą upewnienia się, że aktualizacja obejmie wszystkie możliwe elementy, jest użycie parametru -Module oraz przełącznika -Force. Polecenie powodujące uaktualnienie pomocy dla wszystkich zainstalowanych modułów (tych, które wspierają aktualizację pomocy) będzie wyglądało następująco: Update-Help -Module * -Force Rezultat uruchomienia polecenia Update-Help w typowym systemie klienckim Windows 10 przedstawia rysunek 1-1. Rysunek 1-1 Błędy wyświetlane po próbie aktualizacji pomocy w modułach, które nie obsługują aktualizacji.

14 Rozdział 1: Przegląd cech Windows PowerShell 5.0 Sposobem na uniknięcie wyświetlania ekranu pełnego błędów jest wywołanie polecenia Update-Help z przełącznikiem blokującym wyświetlanie wszystkich komunikatów o błędach: Update-Help -Module * -Force -ea 0 Podejście takie powoduje jednak, że nigdy nie będziemy mieć pewności, czy rzeczywiście uzyskaliśmy zaktualizowaną treść pomocy dla wszystkich elementów, dla których jest to możliwe. Lepszym podejściem byłoby ukrycie błędów pojawiających się w trakcie procesu aktualizacji, ale wyświetlenie tych, które występują po jego zakończeniu. Dodatkową korzyścią takiego podejścia jest wyświetlenie błędów procesu czyszczącego (cleaner). Technikę tę ilustruje skrypt UpdateHelpTrackErrors.ps1. Pierwszą rzeczą, jaką robi ten skrypt, jest wyczyszczenie stosu błędów poprzez wywołanie metody clear. Następnie skrypt wywołuje polecenie cmdlet Update-Help z parametrem -Module i przełącznikiem -Force. Dodatkowo użyty jest przełącznik -ErrorAction (ea widoczne w kodzie skryptu to alias) z wartością 0 (zero). Powoduje to, że błędy nie są wyświetlane podczas przebiegu polecenia. Skrypt kończy pętla For, przechodząca przez zgromadzone komunikaty błędów i wyświetlająca zarejestrowane wyjątki. Cały skrypt został przedstawiony poniżej. UpdateHelpTrackErrors.ps1 $error.clear() Update-Help -Module * -Force -ea 0 For ($i = 0 ; $i -lt $error.count ; $i ++) { "'nerror $i" ; $error[$i].exception } Uwaga Informacje dotyczące pisania skryptów Windows PowerShell i wykorzystywania pętli For znaleźć można w rozdziale 5. W trakcie wykonywania skryptu wyświetlany jest pasek postępu. Po jego ukończeniu wyświetlane są wszystkie napotkane błędy. Skrypt i powiązane z nim komunikaty błędów są widoczne na rysunku 1-2. Mogłoby się wydawać, że ustalenie, które moduły otrzymały zaktualizowane pliki pomocy, umożliwia również wykorzystanie przełącznika -Verbose dla polecenia Update- Help. Jednak dane wyjściowe powodują tak szybkie przewijanie ekranu, że trudno jest cokolwiek na nim zobaczyć. Aby rozwiązać ten problem, można przekierować wyjście polecenia do pliku tekstowego. W przykładzie poniżej wszystkie moduły próbują zaktualizować swoje pliki pomocy. Pełne komunikaty zwrotne są kierowane do pliku updatedhelp.txt zlokalizowanego w folderze fso na dysku C. Update-Help -module * -force -verbose 4>>c:\fso\updatedhelp.txt

Korzystanie z opcji pomocy 15 Rysunek 1-2 Wyczyszczone wyjście błędów dla procesu aktualizacji pomocy Windows PowerShell zapewnia wysoki poziom odkrywalności (ang. discoverability); innymi słowy, aby nauczyć się korzystać z PowerShell, należy po prostu zacząć go używać. Ważną rolę w tym praktycznym poznawaniu pełnią serwery pomocy online. System pomocy w Windows PowerShell jest dostępny kilkoma metodami. Jedną z nich jest wspomniane wcześniej polecenie cmdlet Get-Help. Aby uzyskać informacje o stosowaniu tego polecenia, można je wywołać podając je jako parametr: Get-Help Get-Help This command prints out help about the Get-Help cmdlet. The output from this cmdlet is illustrated here: Spowoduje to wyświetlenie informacji o składni polecenia, podobnych do pokazanych poniżej 1 : NAZWA Get-Help PODSUMOWANIE Wyświetla informacje o poleceniach i koncepcjach Windows PowerShell. 1 Pliki pomocy Windows PowerShell są zazwyczaj dostępne tylko w języku angielskim i taki rezultat uzyska Czytelnik na swoim komputerze. W tym miejscu zdecydowaliśmy się umieścić tłumaczenie informacji zwracanych przez polecenie, ale należy pamiętać, że przynajmniej w czasie pracy nad tą książką polska wersja informacji pomocy nie była dostępna (wszystkie przypisy pochodzą od tłumacza).

16 Rozdział 1: Przegląd cech Windows PowerShell 5.0 SKŁADNIA Get-Help [[-Name] <String>] [-Category <String[]>] [-Component <String[]>] [-Full] [-Functionality <String[]>] [-Path <String>] [-Role <String[]>] [<CommonParameters>] Get-Help [[-Name] <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Path <String>] [-Role <String[]>] -Detailed [<CommonParameters>] Get-Help [[-Name] <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Path <String>] [-Role <String[]>] -Examples [<CommonParameters>] Get-Help [[-Name] <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Path <String>] [-Role <String[]>] -Online [<CommonParameters>] Get-Help [[-Name] <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Path <String>] [-Role <String[]>] -Parameter <String> [<CommonParameters>] Get-Help [[-Name] <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Path <String>] [-Role <String[]>] -ShowWindow [<CommonParameters>] OPIS Polecenie cmdlet Get-Help informacje o poleceniach i koncepcjach Windows PowerShell, w tym o poleceniach cmdlet, funkcjach, poleceniach CIM, przepływach, dostawcach, aliasach i skryptach. Aby uzyskać pomoc na temat polecenia Windows PowerShell, wpisz "Get-Help" uzupełnione o nazwę polecenia, tak jak: Get-Help Get-Process. Aby uzyskać listę wszystkich tematów pomocy zainstalowanych w systemie, wpisz: Get-Help *. Można wyświetlić cały temat pomocy lub użyć parametrów cmdlet Get-Help do uzyskania wybranych fragmentów, takich jak opis składni, parametrów lub przykłady zastosowania. Koncepcyjne tematy pomocy w Windows PowerShell zaczynają się od prefiksu "about_", na przykład "about_comparison_operators". Aby wyświetlić wszystkie tematy "about_", wpisz: Get-Help about_*. Aby wyświetlić konkretny temat, wpisz: Get-Help about_<topic-name>, na przykład Get-Help about_comparison_operators. Aby uzyskać pomoc dla dostawcy Windows PowerShell, należy wpisać "Get-Help", a następnie nazwę dostawcy. Na przykład, do uzyskiwania pomocy dotyczącej dostawcy Certificate służy polecenie Get-Help Certificate. Oprócz stosowania "Get-Help" można również wpisać "help" lub "man", co spowowoduje wyświetlanie informacji po jednym ekranie na raz, albo "<cmdlet-name> -?", co daje efekt identyczny jak Get-Help, ale działa tylko dla poleceń. Get-Help pobiera zawartość pomocy z plików pomocy (help) zainstalowanych na komputerze. Bez plików pomocy Get-Help wyświetla tylko podstawowe informacje o poleceniach. Niektóre moduły Windows PowerShell są wyposażone w pliki pomocy. Jednak począwszy od wersji Windows PowerShell 3.0 moduły dołączone do systemu Windows nie zawierają plików pomocy. Aby pobrać lub uaktualnić pliki pomocy dla modułu Windows PowerShell 3.0, należy posłużyć się cmdlet Update-Help.

Korzystanie z opcji pomocy 17 Zawartość tematów pomocy jest również dostępna w trybie online w TechNet Library. Aby uzyskać wersję online tematu pomocy, należy użyć parametru Online, na przykład: Get-Help Get-Process -Online. Wszystkie tematy pomocy znajdują się w witrynie dostępnej pod adresem: http://go.microsoft.com/fwlink/?linkid=107116. Jeśli wpiszesz "Get-Help" uzupełnione o dokładną nazwę tematu pomocy lub słowo unikatowe dla tego tematu, zostanie wyświetlona treść tego tematu. Jeśli wpiszesz słowo lub wzorzec występujący w wielu tematach, Get-Help wyświetli listę pasujących tytułów. Jeśli użyjesz słowa, które nie występuje w żadnym tytule tematu pomocy, Get- Help wyświetli listę tematów, które zawierają to słowo w swojej treści. Get-Help może odczytywać tematy pomocy dla wszystkich obsługiwanych języków. Get- Help najpierw szuka plików pomocy dla ustawień językowych zdefiniowanych w systemie Windows, następnie dla lokalizacji nadrzędnej, tak jak "pt" (portugalski) dla "pt-br" (portugalski brazylijski), a następnie dla języka zastępczego. Począwszy od wersji Windows PowerShell 3.0, jeśli Get-Help nie znajdzie pomocy w żadnym z tych języków, wyszuka temat pomocy w języku angielskim ("en-us"), zanim zwróci komunikat o błędzie lub wyświetli automatycznie wygenerowaną podpowiedź. Informacje o symbolach używanych przez Get-Help w diagramach składniowych poleceń udostępnia temat about_command_syntax. Informacje o atrybutach parametrów, takich jak Required lub Position, zawiera temat about_parameters. O ROZWIĄZYWANIU PROMLEMÓW: W wersjach Windows PowerShell 3.0 i 4.0 polecenie Get-Help nie znajduje tematów about w modułach, które nie zostały zaimportowane do bieżącej sesji. Jest to powszechnie znany problem. Aby zobaczyć temat about w module, należy zaimportować moduł, używając polecenia cmdlet Import-Module lub uruchamiając dowolne polecenie cmdlet z modułu. ŁĄCZA POWIĄZANE Online Version: http://go.microsoft.com/fwlink/p/?linkid=289584 Updatable Help Status Table (http://go.microsoft.com/fwlink/?linkid=270007) Get-Command Get-Member Get-PSDrive about_command_syntax about_comment_based_help about_parameters UWAGI Aby zobaczyć przykłady, wpisz: "get-help Get-Help -examples". Aby uzyskać więcej informacji, wpisz: "get-help Get-Help -detailed". Aby uzyskać informacje techniczne, wpisz: "get-help Get-Help -full". Aby uzyskać pomoc online, wpisz: "get-help Get-Help -online" Cenną zaletą systemu pomocy Windows PowerShell jest to, że nie tylko wyświetla informacje o składni poleceń, ale udostępnia trzy poziomy wyświetlania: normalny, szczegółowy i pełny. Dodatkowo można uzyskać informacje o koncepcjach działania Windows PowerShell. Funkcja ta jest odpowiednikiem podręcznika instruktażowego online. Aby uzyskać listę wszystkich artykułów koncepcyjnych, należy użyć polecenia Get-Help about*, zwracającego listę wszystkich tematów z prefiksem about. Get-Help about*

18 Rozdział 1: Przegląd cech Windows PowerShell 5.0 Wyobraźmy sobie, że nie pamiętamy dokładnej nazwy polecenia cmdlet, którego chcielibyśmy użyć, ale pamiętamy, że to było cmdlet get. W celu odszukania tej nazwy możemy posłużyć się znakiem zastępczym, takim jak gwiazdka (*), jak poniżej: Get-Help get* Technika znaków zastępczych może być dalej rozszerzana. Jeśli pamiętamy, że chodziło o polecenie get i że pierwszą literą rzeczownika w nazwie było p, możemy użyć następującej składni, aby uzyskać listę pasujących poleceń: Get-Help get-p* Po ustaleniu, o które polecenie chodziło, może pojawić się problem, że nie mamy pewności co do prawidłowej składni. W takim przypadku możemy sięgnąć po parametr przełącznika -Examples, który zademonstruje składnię polecenia na przykładach. Poniższe polecenie Get-Help spowoduje wyświetlenie przykładów zastosowania (z komentarzami) dla polecenia cmdlet Get-PSDrive: Get-Help Get-PSDrive -examples Czytelnik łatwo zauważy, że uzyskane dane znacznie przekraczają pojemność jednego ekranu. Zawartość pomocy można wyświetlać po jednym ekranie na raz, używając funkcji Help. Funkcja ta przesyła wprowadzone przez użytkownika dane do polecenia Get-Help, a odbierane informacje zwrotne przekierowuje do narzędzia more.com. Powoduje to wyświetlenie jednego ekranu informacji oraz znaku zachęty More (Dalej). Naciśnięcie klawisza Enter wyświetla wówczas kolejne wiersze (po jednym), zaś klawiszem spacji można przewinąć cały kolejny ekran. Uwaga Trzeba pamiętać, że przy korzystaniu z Windows PowerShell ISE funkcja stronicowania nie będzie działać, zatem nie zauważymy żadnej różnicy pomiędzy Get-Help i Help. W tym środowisku obydwa polecenia zachowują się tak samo. Jednak należy się spodziewać, że przy pracy w Windows PowerShell ISE użytkownik będzie korzystał raczej z polecenia Show-Command, a nie Get-Help, aby uzyskać informacje o składni i zastosowaniu. Rysunek 1-3 prezentuje przykład sformatowanego wyjścia dla tematu pomocy przekraczającego objętość jednego ekranu, wywołanego poprzez funkcję Help. Ciągłe wpisywanie Get-Help może okazać się męczące ostatecznie, to aż osiem znaków! Rozwiązaniem jest utworzenie aliasu dla polecenia cmdlet. to skrócona nazwa (kombinacja znaków), która wywoła odpowiedni program lub polecenie. Przedstawiona poniżej procedura Tworzenie aliasu dla cmdlet Get-Help przypisze to polecenie do kombinacji klawiszy GH.

Korzystanie z opcji pomocy 19 Rysunek 1-3 Wykorzystanie funkcji Help do wyświetlania informacji po jednej stronie na raz Uwaga Przed utworzeniem nowego aliasu warto sprawdzić, czy polecenie cmdlet nie ma już go zdefiniowanego, używając polecenia Get-. Następnie można użyć New- -, aby przypisać poleceniu unikatową kombinację klawiszy. Tworzenie aliasu dla cmdlet Get-Help 1. Otwórz konsolę Windows PowerShell, wybierając Start Run Windows PowerShell. 2. Wywołaj alfabetycznie posortowaną listę aktualnie zdefiniowanych aliasów i sprawdź, czy istnieje alias dla polecenia Get-Help oraz czy kombinacja G+H jest aktualnie wolna. Listę tę można uzyskać poniższym poleceniem: Get- sort 3. Po upewnieniu się, że nie istnieje jeszcze alias dla polecenia Get-Help i że żadne inne nie ma przypisanego skrótu GH, sprawdź składnię dla polecenia New-. Użyj przełącznika -Full, aby wyświetlić pełny tekst pomocy: Get-Help New- -full 4. Użyj polecenia New-, aby przypisać skrót G+H do polecenia cmdlet Get-Help. New- gh Get-Help

20 Rozdział 1: Przegląd cech Windows PowerShell 5.0 Poznawanie poleceń: ćwiczenia krok po kroku W kolejnych ćwiczeniach poznamy posługiwanie się narzędziami wiersza poleceń w Windows PowerShell. Przekonamy się, że korzystanie z tych narzędzi jest równie proste jak w interpreterze CMD; jednak dzięki stosowaniu tych narzędzi w środowisku Windows PowerShell uzyskujemy dostęp do nowych poziomów funkcjonalności. Korzystanie z narzędzi wiersza poleceń 1. Otwórz konsolę Windows PowerShell, jeśli nie jest jeszcze uruchomiona. 2. Zmień bieżący katalog na główny katalog dysku C, wpisując cd c:\. cd c:\ 3. Wyświetl listę plików w katalogu głównym, używając polecenia dir: dir 4. Utwórz nowy katalog w głównym katalogu dysku C, używając polecenia md: md mytest 5. Uzyskaj listę wszystkich plików i katalogów zaczynających się od litery m. dir m* 6. Zmień katalog bieżący na katalog roboczy Windows PowerShell. Do tego celu użyj polecenia cmdlet Set-Location i zmiennej $pshome: Set-Location $pshome 7. Uzyskaj listę liczników pamięci dotyczących dostępnej wielkości, używając pokazanego poniżej polecenia typeperf.exe 2. typeperf "\memory\available bytes" 8. Po wyświetleniu kilku kolejnych odczytów licznika w oknie Windows PowerShell przerwij działanie polecenia, naciskając Ctrl+C. 9. Wyświetl bieżącą konfigurację startową za pomocą polecenia bcdedit (zwróć uwagę, że to polecenie wymaga uprawnień administracyjnych): bcdedit 10. Zmień bieżący katalog na C:\Mytest utworzony wcześniej: Set-Location c:\mytest 2 W lokalizowanej (nie-angielskiej) wersji systemu Windows należy użyć zlokalizowanej wersji nazw liczników. W przypadku wersji polskiej odpowiedni licznik nosi nazwę \pamięć\dostępne bajty (wielkość liter nie ma znaczenia).

Poznawanie poleceń: ćwiczenia krok po kroku 21 11. Utwórz plik o nazwie mytestfile.txt w katalogu C:\Mytest. Użyj narzędzia fsutil, aby utworzyć plik o wielkości 1000 bajtów. W tym celu posłuż się następującym poleceniem: fsutil file createnew mytestfile.txt 1000 12. Wyświetl listę wszystkich plików w katalogu Mytest przy użyciu polecenia cmdlet Get-ChildItem: 13. Wyświetl aktualną datę za pomocą polecenia Get-Date. 14. Wyczyść ekran przy użyciu polecenia cls. 15. Wyświetl listę wszystkich poleceń cmdlet wbudowanych w Windows PowerShell. W tym celu posłuż się poleceniem Get-Command. 16. Użyj polecenia Get-Command do pobrania polecenia Get-. W tym celu posłuż się parametrem -Name, podając nazwę polecenia Get- jako wartość parametru: Get-Command -name Get- Na tym kończy się to ćwiczenie. Zamknij konsolę Windows PowerShell, wpisując exit i naciskając klawisz Enter. W kolejnym ćwiczeniu użyjemy różnych opcji pomocy do uzyskania informacji o różnych poleceniach cmdlet. Uzyskiwanie pomocy 1. Uruchom konsolę Windows PowerShell, wybierając Start Run Windows PowerShell. Konsola uruchomi się domyślnie w katalogu głównym bieżącego użytkownika. 2. Użyj cmdlet Get-Help do uzyskania informacji o poleceniu Get-Help w następujący sposób: Get-Help Get-Help 3. Wyświetl szczegółowe informacje pomocy o poleceniu Get-Help, używając przełącznika -Detailed: Get-Help Get-Help -detailed 4. Odczytaj pogłębione informacje techniczne o poleceniu Get-Help, używając przełącznika -Full: Get-Help Get-Help -full 5. Aby uzyskać tylko listę przykładów użycia polecenia, użyj przełącznika -Examples: Get-Help Get-Help -examples

22 Rozdział 1: Przegląd cech Windows PowerShell 5.0 6. Wyświetl listę informacyjnych tematów pomocy, podając prefiks about z symbolem wieloznacznym * (gwiazdka) jako parametr: Get-Help about* 7. Wyświetl listę tematów pomocy dotyczących poleceń get. W tym celu użyj jako parametru słowa get z symbolem wieloznacznym: Get-Help get* 8. Wyświetl listę tematów pomocy dla poleceń set: Get-Help set* Na tym kończy się to ćwiczenie. Zamknij konsolę Windows PowerShell, wpisując exit i naciskając klawisz Enter. Podsumowanie rozdziału 1 Aby Wywołać zewnętrzne polecenie lub narzędzie trybu wiersza poleceń Wywołać sekwencyjnie wiele zewnętrznych poleceń lub narzędzi Uzyskać listę uruchomionych procesów Zatrzymać proces Zasymulować efekt polecenia cmdlet przed rzeczywistym wykonaniem żądanej akcji Spowodować uruchomienie Windows PowerShell, wykonanie określonego polecenia cmdlet i zamknięcie Windows PowerShell Spowodować wyświetlanie monitu o potwierdzenie zatrzymania procesu Zrób to Wpisz nazwę polecenia (bez rozszerzenia) po znaku zachęty Windows PowerShell. Wpisz kolejne polecenia w jednym wierszu Windows PowerShell, rozdzielając je średnikami. Użyj polecenia cmdlet Get-Process. Użyj polecenia cmdlet Stop-Process, stosując nazwę lub identyfikator procesu w roli parametru. Użyj przełącznika -WhatIf. Użyj polecenia PowerShell, podając jako parametr uruchomieniowy nazwę cmdlet ujętą w nawiasy klamrowe i poprzedzoną symbolem &. Użyj polecenia cmdlet Stop-Process z parametrem -Confirm.

ROZDZIAŁ 2 Korzystanie z poleceń cmdlet Po zapoznaniu się z tym rozdziałem Czytelnik będzie umiał: Używać poleceń cmdlet Windows PowerShell w podstawowym zakresie Wykorzystać Get-Command do uzyskania listy poleceń cmdlet Konfigurować wyświetlanie wyników Konfigurować opcje wyszukiwania poleceń cmdlet Korzystać z polecenia Get-Member Korzystać z polecenia New-Object Używać polecenia Show-Command Umieszczenie ogromnej liczby poleceń cmdlet w Windows PowerShell sprawia, że powłoka ta jest natychmiast użyteczna dla administratorów sieci i innych osób, które muszą wykonywać najrozmaitsze zadania konserwacyjne i administracyjne w systemach biurkowych i serwerowych. W tym rozdziale poznamy wiele użytecznych poleceń cmdlet, dobranych z myślą o zaprezentowaniu siły i elastyczności Windows PowerShell. Jednak prawdziwą korzyścią, jaką Czytelnik może wynieść z tego rozdziału, jest metodologia, której będziemy używać do odkrywania zastosowań różnych poleceń. Podstawy poleceń cmdlet W rozdziale 1, Przegląd cech Windows PowerShell 5.0, pokazaliśmy wykorzystanie różnych dostępnych narzędzi pomocy, aby zademonstrować korzystanie z poleceń cmdlet. Przedstawiliśmy kilka poleceń, które są przydatne przy ustalaniu, jakie polecenia są dostępne i jak należy ich używać. W tym podrozdziale pokażemy kilka innych sposobów posługiwania się poleceniami cmdlet w Windows PowerShell. 23

24 Rozdział 2: Korzystanie z poleceń cmdlet Wskazówka Wpisywanie długich nazw cmdlet jest często nużące, a ponadto podatne na błędy literowe. Aby uprościć ten proces, wystarczy wpisać fragment nazwy polecenia dostateczny do jego jednoznacznego wskazania, po czym nacisnąć klawisz Tab. Co otrzymamy? Samoczynne dopełnienie nazwy (funkcja ta nazywana jest tab completion uzupełnianie tabulatorem). Działa to również dla nazw parametrów i innych wpisywanych elementów, takich jak obiekty.net, katalogi, klucze rejestru i tak dalej. Warto poeksperymentować z tą techniką. Być może już nigdy więcej nie będzie potrzeby wpisywania Get-Command! Jeśli wyszukiwane polecenie cmdlet nie zostało odnalezione, wystarczy kontynuować naciskanie klawisza Tab, powodując pojawianie się kolejnych dopasowań. Ponieważ polecenia cmdlet zwracają obiekty, a nie wartości łańcuchów, można otrzymać dodatkowe informacje o uzyskiwanych obiektach. Te informacje nie byłyby dostępne, gdybyśmy posługiwali się tylko danymi tekstowymi. Aby pobrać informacje z jednego polecenia cmdlet i przekazać je do innego, można użyć znaku potoku (, ang. pipe). Może się to wydawać skomplikowane, ale w rzeczywistości jest to bardzo proste i po ukończeniu tego rozdziału będzie całkowicie naturalne. Na najbardziej podstawowym poziomie rozważmy odczytywanie zawartości katalogu; po uzyskaniu listingu plików zapewne chcielibyśmy określić sposób jego wyświetlenia (sformatowania) na przykład jako tabelę lub listę. Jak można zauważyć, odczytanie informacji o zawartości katalogu i sformatowanie listy to dwie oddzielne operacje. Druga z nich znajdzie się po prawej stronie symbolu potoku. Korzystanie z cmdlet Get-ChildItem W rozdziale 1 posłużyliśmy się poleceniem dir do wyświetlenia listy wszystkich folderów i plików w danym katalogu. Polecenie to działa, gdyż istnieje alias wbudowany w Windows PowerShell, który przypisuje cmdlet Get-ChildItem do sekwencji liter dir. Uzyskiwanie listingu katalogu Listę zawartości katalogu dyskowego uzyskamy wpisując w Windows PowerShell polecenie Get-ChildItem uzupełnione o nazwę katalogu (lub puste, aby uzyskać listing bieżącego katalogu). Przypomnijmy, że można użyć uzupełniania tabulatorem. Wystarczy wpisać get-ch i nacisnąć Tab, aby dopełnić nazwę. Oto przykład polecenia: Get-ChildItem C:\ Uwaga Windows PowerShell nie rozróżnia wielkości liter, zatem get-childitem, Get-childitem i Get-ChildItem zostaną zinterpretowane tak samo dla Windows PowerShell jest to to samo polecenie.

Korzystanie z cmdlet Get-ChildItem 25 W Windows PowerShell nie istnieje w rzeczywistości cmdlet o nazwie dir; powłoka nie odwołuje się też do polecenia dir z czasów DOS. Zamiast tego istnieje wbudowany alias dir dla polecenia cmdlet Get-ChildItem. Dlatego też wynik polecenia dir w Windows PowerShell różni się od wyglądu wyniku polecenia dir w interpreterze CMD.exe. Przy użyciu polecenia cmdlet Get- można sprawdzić, jak wygląda powiązanie pomiędzy dir a Get-ChildItem: PS C:\> Get- dir CommandType Name Version Source ----------- ---- ------- ------ dir -> Get-ChildItem Tak więc zarówno użycie Get-ChildItem, jak i dir zwraca dokładnie tak samo wyglądającą listę, co widać na poniższym przykładzie: PS C:\> dir c:\ Directory: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 7/11/2015 11:55 AM FSO d----- 7/9/2015 5:24 AM PerfLogs d-r--- 7/9/2015 6:59 AM Program Files d-r--- 7/10/2015 7:27 PM Program Files (x86) d-r--- 7/10/2015 7:18 PM Users d----- 7/10/2015 6:00 PM Windows PS C:\> Get-ChildItem c:\ Directory: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 7/11/2015 11:55 AM FSO d----- 7/9/2015 5:24 AM PerfLogs d-r--- 7/9/2015 6:59 AM Program Files d-r--- 7/10/2015 7:27 PM Program Files (x86) d-r--- 7/10/2015 7:18 PM Users d----- 7/10/2015 6:00 PM Windows PS C:\> Analogicznie, jeśli użyjemy polecenia Get-Help, aby uzyskać informacje o dir, otrzymamy ten sam opis, co dla polecenia Get-Help Get-ChildItem. Widać to w poniższym przykładzie (skróconym tylko do nazwy i podsumowania). PS C:\> Get-Help dir select name, synopsis Format-Table -AutoSize Name Synopsis ---- -------- Get-ChildItem Gets the files and folders in a file system drive.

26 Rozdział 2: Korzystanie z poleceń cmdlet PS C:\> Get-Help Get-ChildItem select name, synopsis Format-Table -AutoSize Name Synopsis ---- -------- Get-ChildItem Gets the files and folders in a file system drive. PS C:\> W Windows PowerShell alias i pełna nazwa cmdlet działają w taki sam sposób. y nie umożliwiają zmodyfikowania zachowania polecenia cmdlet do tego celu trzeba użyć własnej, zdefiniowanej przez siebie funkcji lub funkcji proxy. Formatowanie listingu katalogu przy użyciu polecenia Format-List Jak wspomniano wcześniej, wynik jednego polecenia cmdlet można przekierować do innego za pomocą znaku potoku. Poniższy przykład tworzy listing katalogu i kieruje go do polecenia cmdlet Format-List: Get-ChildItem C:\ Format-List Formatowanie wyjścia przy użyciu polecenia cmdlet Format-List 1. Otwórz konsolę Windows PowerShell. 2. Użyj polecenia cmdlet Get-ChildItem do uzyskania listingu katalogu głównego dysku C. Get-ChildItem C:\ 3. Użyj cmdlet Format-List, aby zmienić uporządkowanie listingu katalogu: Get-ChildItem C:\ Format-List 4. Użyj parametru -Property polecenia Format-List, aby wyświetlić tylko nazwy plików i katalogów: Get-ChildItem C:\ Format-List -property name 5. Zmodyfikuj polecenie, aby dodać wielkości plików z katalogu głównego. Niepojawienie się właściwości length oznacza, że katalog główny nie zawiera widocznych (nieukrytych) plików, ponieważ foldery nie posiadają właściwości length. Get-ChildItem C:\ Format-List -property name, length

Korzystanie z cmdlet Get-ChildItem 27 Korzystanie z polecenia cmdlet Format-Wide W taki sam sposób, w jaki wykorzystaliśmy Format-List do przekształcenia wyjścia polecenia na listę, można użyć polecenia Format-Wide do uzyskania bardziej zwartego wyniku. Różnica polega na tym, że Format-Wide umożliwia wybranie tylko jednej właściwości dla wyświetlanych elementów. Możemy jednak określić, w jak wielu kolumnach będą wyświetlane informacje. Domyślnie Format-Wide używa dwóch kolumn. Formatowanie listingu katalogu przy użyciu Format-Wide 1. W oknie Windows PowerShell wywołaj cmdlet Get-ChildItem z nazwą katalogu, uzupełniając polecenie znakiem potoku i poleceniem Format-Wide, jak poniżej: Get-ChildItem C:\ Format-Wide 2. Zmień wyświetlanie na trzykolumnowe i jawnie wskaż wyświetlanie właściwości name (nazwa): Get-ChildItem Format-Wide -Column 3 -Property name 3. Pozwól Windows PowerShell na wyświetlenie tak wielu kolumn, jak to możliwe dla bieżącej szerokości okna i długości nazw. Służy do tego przełącznik -AutoSize: Get-ChildItem Format-Wide -Property name AutoSize 4. Wymuś obcinanie nazw w kolumnach, wybierając liczbę kolumn większą niż wyświetlona w poprzednim przykładzie (zbyt długie nazwy zostaną obcięte, co sygnalizowane jest wielokropkiem na końcu): Get-ChildItem Format-Wide -Property name -Column 8 Formatowanie wyjścia polecenia przy użyciu Format-Wide 1. Uruchom konsolę Windows PowerShell, jeśli nie jest jeszcze otwarta. 2. Użyj polecenia Get-ChildItem do wyświetlenia listingu katalogu C:\Windows: Get-ChildItem C:\Windows 3. Użyj parametru -Recurse, aby nakazać poleceniu Get-ChildItem przejście przez całą zagnieżdżoną strukturę katalogu, uwzględniając tylko pliki.txt. Ukryj błędy, używając parametru -ea (będącego aliasem dla ErrorAction) i przypisując mu wartość 0. Oznacza to, że wszystkie błędy zostaną zignorowane([silentlycontinue]): Get-ChildItem C:\Windows -recurse -include *.txt ea 0 Fragment wyniku jest przedstawiony poniżej: PS C:\> Get-ChildItem C:\Windows -recurse -include *.txt -ea 0 Directory: C:\Windows\InfusedApps\Packages\ Microsoft.3DBuilder_10.0.0.0_x64 8wekyb3d8bbwe\Common

28 Rozdział 2: Korzystanie z poleceń cmdlet Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---l 7/9/2015 7:01 AM 975 ReadMe.txt Directory: C:\Windows\InfusedApps\Packages\Microsoft. BingFinance_4.3.193.0_x86 8wekyb3d8bbwe\_Resources Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/9/2015 7:00 AM 163 index.txt 4. Użyj polecenia cmdlet Format-Wide, aby zmienić wygląd danych wyjściowych, używając parametru -Column o wartości 3: Get-ChildItem C:\Windows -recurse -include *.txt ea 0 Format-Wide -column 3 Wykonanie tego polecenia da wyniki podobne do poniższych (pokazanych w niewielkim fragmencie): PS C:\> Get-ChildItem C:\Windows -recurse -include *.txt -ea 0 Format-Wide -Column 3 Directory: C:\Windows\InfusedApps\Packages\ Microsoft.3DBuilder_10.0.0.0_x64 8wekyb3d8bbwe\Common ReadMe.txt Directory: C:\Windows\InfusedApps\Packages\Microsoft. BingFinance_4.3.193.0_x86 8wekyb3d8bbwe\_Resources index.txt 5. Użyj polecenia Format-Wide, aby zmienić wygląd danych wyjściowych z polecenia Get-ChildItem. Tym razem użyjemy parametru -Property, aby wyspecyfikować właściwość name i pogrupujemy wyniki według wielkości. Pokazany przykład zajmuje dwa wiersze ze względu na szerokość strony, ale w oknie Windows PowerShell jest to jedno polecenie i powinno być wpisane w jednym ciągu. Podczas wpisywania poleceń w oknie PowerShell, po osiągnięciu prawego brzegu okna wiersz jest automatycznie zawijany do następnej linii; nie należy w tym celu naciskać klawisza Enter. Get-ChildItem C:\Windows -recurse -include *.txt Format-Wide -property name -groupby length -column 3 Fragment wyniku pokazany jest poniżej. Zauważmy, że pomimo wskazania 3 kolumn, jeśli nie występują pliki o tej samej długości, użyta została tylko jedna kolumna. PS C:\> Get-ChildItem C:\Windows -recurse -include *.txt >> Format-Wide -property name -groupby length -column 3 >> Get-ChildItem : Access to the path 'C:\Windows\CSC' is denied. At line:1 char:1 + Get-ChildItem C:\Windows -recurse -include *.txt + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Korzystanie z cmdlet Get-ChildItem 29 + CategoryInfo : PermissionDenied: (C:\Windows\CSC:String) [Get- ChildItem], UnauthorizedAccessException + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell. Commands.GetChildItemCommand Length: 975 ReadMe.txt Length: 163 index.txt index.txt index.txt index.txt index.txt Length: 281 Formatowanie listingu katalogu przy użyciu Format-Table Polecenie cmdlet Format-Table pozwala sformatować wyjście innego polecenia jako tabeli. Poniższy przykład przekierowuje wyjście polecenia Get-ChildItem do polecenia Format-Table: Get-ChildItem C:\ Format-Table Formatowanie wyjścia przy użyciu polecenia Format-Table 1. Otwórz konsolę Windows PowerShell, jeśli nie jest jeszcze uruchomiona. 2. Użyj polecenia cmdlet Get-ChildItem, aby uzyskać listing katalogu C:\Windows: Get-ChildItem C:\Windows ea 0 3. Użyj przełącznika -Recurse, aby uzyskać listing wszystkich zagnieżdżonych katalogów i uwzględnij tylko pliki.txt w wyświetlanych wynikach: Get-ChildItem C:\Windows -recurse -include *.txt -ea 0 4. Przekieruj wyjście polecenia do cmdlet Format-Table, aby móc dostosować wygląd listingu: Get-ChildItem C:\Windows -recurse -include *.txt ea 0 Format-Table Wynik polecenia nie różni się jeszcze od zwykłego wyjścia cmdlet. PS C:\> Get-ChildItem C:\Windows -recurse -include *.txt -ea 0 Format-Table Directory: C:\Windows\InfusedApps\Packages\ Microsoft.3DBuilder_10.0.0.0_x64 8wekyb3d8bbwe\Common Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---l 7/9/2015 7:01 AM 975 ReadMe.txt Directory: C:\Windows\InfusedApps\Packages\Microsoft. BingFinance_4.3.193.0_x86 8wekyb3d8bbwe\_Resources

30 Rozdział 2: Korzystanie z poleceń cmdlet Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/9/2015 7:00 AM 163 index.txt Directory: C:\Windows\InfusedApps\Packages\Microsoft. BingNews_4.3.193.0_x86 8wekyb3d8bbwe\_Resources Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/9/2015 7:00 AM 163 index.txt 5. Użyj parametru -Property polecenia cmdlet Format-Table, wybierając właściwości Name, Length oraz LastWriteTime (czas ostatniego zapisu). Demonstruje to poniższy przykład: Get-ChildItem C:\Windows -recurse -include *.txt ea 0 Format-Table -property name, length, lastwritetime W wyniku otrzymamy tabelę zawierającą nazwy, długość i czas zapisu pliku, jak w poniższym przykładzie: PS C:\> Get-ChildItem C:\Windows -recurse -include *.txt -ea 0 Format-Table -property name, length, lastwritetime Name Length LastWriteTime ---- ------ ------------- ReadMe.txt 975 7/9/2015 7:01:50 AM index.txt 163 7/9/2015 7:00:27 AM index.txt 163 7/9/2015 7:00:18 AM index.txt 163 7/9/2015 7:00:14 AM index.txt 163 7/9/2015 7:00:23 AM index.txt 163 7/9/2015 7:01:27 AM index.txt 281 7/9/2015 7:00:31 AM index.txt 163 7/9/2015 7:01:32 AM index.txt 163 7/9/2015 7:01:44 AM Configu... 3128 7/9/2015 7:01:39 AM THIRD P... 1683 7/9/2015 7:02:00 AM index.txt 163 7/9/2015 7:02:00 AM index.txt 163 7/9/2015 6:59:55 AM index.txt 5527 7/9/2015 7:01:21 AM ThirdPa... 20126 7/9/2015 5:20:48 AM Formatowanie danych wyjściowych przy użyciu Out-GridView Polecenie cmdlet Out-GridView różni się zasadniczo od innych formatujących poleceń cmdlet omawianych w tym rozdziale. Jest to polecenie interaktywne nie wykonuje formatowania z myślą o wyświetleniu danych w konsoli Windows PowerShell, lecz odsyła do konsoli zawartość tak, aby mogła ona zostać wykorzystana do przekazania danych wyjściowych w innym formacie. Jednym z najlepszych zastosowań polecenia Out-GridView stanowi wstępna analiza danych przekazanych przez potok, co może

Formatowanie danych wyjściowych przy użyciu Out-GridView 31 ułatwić zapoznanie się z przetwarzanymi danymi. Polecenie umieszcza dane w tabeli w dodatkowym, pływającym oknie. Na przykład poniższy przykład przekazuje dane odczytane przez polecenie Get-Process do polecenia Out-GridView (gps to domyślny alias dla polecenia Get-Process): gps Out-GridView Po zakończeniu przetwarzania cmdlet Get-Process pojawi się okno z informacjami o procesach uporządkowanych w siatkę wierszy i kolumn, przypominającą arkusz kalkulacyjny. Rysunek 2-1 ukazuje okno siatki zawierające dane procesów. Jedną z użytecznych cech polecenia Out-GridView jest fakt, że pasek tytułu okna kontrolki zawiera polecenie, które ją wywołało. Rysunek 2-1 Cmdlet Out-GridView akceptuje potok z wyjściem innego polecenia i wyświetla kontrolkę umożliwiającą dalszą eksplorację danych. Kliknięcie nagłówka kolumny powoduje uporządkowanie (sortowanie) danych według zawartości tej kolumny. Kolejne kliknięcia tego samego nagłówka odwraca porządek (z rosnącego na malejący i odwrotnie). W przykładzie pokazanym na rysunku 2-2 procesy są uporządkowane malejąco według liczby uchwytów (handles) używanych przez każdy proces.

32 Rozdział 2: Korzystanie z poleceń cmdlet Rysunek 2-2 Kliknięcie nagłówka kolumny powoduje posortowanie całej kontrolki według wybranej kolumny w kolejności rosnącej lub malejącej. Cmdlet Out-GridView może przyjmować jako wejście dane z wielu innych poleceń. Rysunek 2-3 demonstruje skutek działania poniższego wyrażenia, zawierającego cmdlet Get-Service (alias gsv), którego wyjście jest skierowane do wejścia cmdlet Out- GridView (zapisanego przy użyciu aliasu ogv): gsv ogv Rysunek 2-3 ilustruje wynikową kontrolkę siatki. Cmdlet Out-GridView automatycznie wykrywa typ danych przekazywanych właściwości, po czym wykorzystuje ten typ do utworzenia przefiltrowanego i posortowanego widoku. Na przykład typ danych dla właściwości Status to łańcuch (string). Kliknięcie przycisku Add Criteria (Dodaj kryteria), zaznaczenie właściwości status i kliknięcie Add (Dodaj) dodaje opcję filtru, która umożliwia różnorodne metody interakcji z tą właściwością. Dostępne opcje obejmują następujące operatory: contains (zawiera), does not contain (nie zawiera), starts with (zaczyna się od), ends with (kończy się na), equals (jest równe), does not equal (nie jest równe), is empty (jest pusty) oraz is not empty (nie jest pusty). Dla właściwości o innym typie danych dostępny będzie inny zestaw operatorów.

Formatowanie danych wyjściowych przy użyciu Out-GridView 33 Rysunek 2-3 Informacje o usługach zdefiniowanych w systemie wyświetlane w kontrolce siatki Out-GridView Aby w pokazanym przykładzie wyfiltrować tylko uruchomione usługi, możemy zmienić operator na equals i wpisać wartość running. Trzeba mieć na uwadze, że wybranie operatora równości wymaga dokładnego wpisywania łańcucha filtrowania, pomijając wielkość liter. Innymi słowy, warunek equals run nie zwróci żadnego wyniku, działać będzie tylko warunek equals running. Z drugiej strony, jeśli wybierzemy np. operator starts with, wystarczy wpisanie jednej litery, aby uzyskać filtrowanie. W przypadkach bardziej urozmaiconych (na przykład przy filtrowaniu nazw usług, a nie ich statusów) można zauważyć dynamiczną zmianę widoku w miarę wpisywania kolejnych znaków w polu filtra (rysunek 2-4).

34 Rozdział 2: Korzystanie z poleceń cmdlet Uwaga Należy mieć na uwadze różnice w zachowaniu różnych filtrów. Zależnie od wybranego operatora automatyczna aktualizacja widoku może być niezwykle użyteczna. Działa to szczególnie skutecznie przy próbach filtrowania danych numerycznych, jeśli nie mamy pewności, jakie są typowe wartości i w jakich przedziałach mogą się znajdować. Ta technika została zaprezentowana na rysunku 2-4. Rysunek 2-4 Kontrolka Out-GridView aktualizuje widok w miarę wprowadzania danych w polu filtra Out-GridView. Po wpisaniu pierwszych dwóch liter nazwy explorer w polu filtra zobaczmy już tylko pojedynczą pasującą nazwę procesu. Dopasowanie ciągu ex znaleźć można w wielu polach m.in. DisplayName czy ProcessName. Wynik został zaprezentowany na rysunku 2-5.

Formatowanie danych wyjściowych przy użyciu Out-GridView 35 Rysunek 2-5 Litery wpisane w polu filtrowania są dopasowywane do wszystkich dostępnych kolumn. Filtrowanie procesów na podstawie właściwości 1. Kliknij niebieski symbol plusa na przycisku Add Criteria (Dodaj kryteria) pod polem filtra. 2. W menu Add Criteria zaznacz pole wyboru CPU(s), po czym kliknij przycisk Add (Dodaj). 3. Kliknij słowo Contains (zawiera) i wybierz opcję Is Not Empty (nie jest pusta) z listy wyboru. Na liście pozostaną tylko procesy z niepustą wartością (czyli te, które miały niepusty czas procesora w chwili wywołania kontrolki). 4. Kliknij niebieski symbol plusa na przycisku Add Criteria. 5. Zaznacz pole wyboru WS(K) (Working Set zestaw roboczy). 6. Kliknij przycisk Add, aby dodać pamięć zestawu roboczego do kryteriów. 7. Zmień operator filtrowania z Is Less Than Or Equal To (jest mniejsze lub równe) na Is Greater Than Or Equal To (jest większe lub równe). 8. Wpisz liczbę 20000 w pole kryterium obok operatora Is Greater Than Or Equal To. Tworzenie posortowanej listy procesów 1. Wpisz poniższe polecenie w konsoli Windows PowerShell: Get-Process 2. Prześlij wyjście polecenia Get-Process do cmdlet Get-Member: Get-Process Get-Member

36 Rozdział 2: Korzystanie z poleceń cmdlet 3. Przeanalizuj listę dostępnych właściwości (kolumna MemberType). Zwróć uwagę, że CPU (procesor) jest właściwością typu ScriptProperty (łańcuchową). 4. Przekieruj rezultaty polecenia Get-Process do polecenia Sort-Object, używając właściwości cpu: Get-Process Sort-Object cpu 5. Wywołaj ponownie poprzednie polecenie, naciskając klawisz ze strzałką w górę, po czym dodaj przełącznik -Descending. Get-Process Sort-Object cpu -Descending 6. Prześlij uzyskany rezultat do polecenia cmdlet Out-GridView. Odpowiednie polecenie wygląda następująco: Get-Process Sort-Object cpu -Descending Out-GridView 7. Następnie usuniemy kolumny z kontrolki siatki. W tym celu prawym klawiszem myszy kliknij nagłówek kolumny. 8. Wybierz polecenie Select Column (Wybierz kolumnę), aby otworzyć okno dialogowe Select Columns. Klikaj poszczególne kolumny, aby dodać je lub usunąć. Okno dialogowe Select Columns zostało zaprezentowane na rysunku 2-6. Rysunek 2-6 Okno dialogowe Select Columns pozwala wyłączyć wyświetlanie części kolumn dostępnych w kontrolce gridview. Uwaga Ponieważ proces wybierania kolumn jest dość powolny, jeśli potrzebujemy tylko wybranych kolumn, lepszą metodą jest użycie polecenia Select-Object do odfiltrowania potrzebnych kolumn, zanim prześlemy je do polecenia Out-GridView.

Korzystanie z polecenia Get-Command 37 Korzystanie z polecenia Get-Command Polecenie cmdlet Get-Command zwraca szczegółowe informacje o każdym dostępnym poleceniu. Do poleceń tych zaliczają się cmdlet, funkcje, przepływy, aliasy oraz pliki wykonywalne (narzędzia zewnętrzne). Przy użyciu Get-Command można uzyskać listę wszystkich poleceń cmdlet zainstalowanych w Windows PowerShell, ale polecenie to jest znacznie bardziej elastyczne i umożliwia wykonywanie znacznie bardziej złożonych działań, niż tylko zwracanie prostej listy. Możemy na przykład użyć symboli wieloznacznych w wyszukiwaniu poleceń. Zademonstrujemy to w kolejnym ćwiczeniu. Wyszukiwanie poleceń cmdlet za pomocą symboli wieloznacznych Wpisanie Get-Command uzupełnione o symbol * zwraca bardzo długą listę dostępnych poleceń. Zwróćmy uwagę, że nie ogranicza się ona do poleceń, funkcji i aliasów Windows PowerShell znajdziemy na niej również wszystkie pliki aplikacji (.exe), które system znalazł w zmiennej środowiskowej PATH (inaczej mówiąc, te, które można wywołać bezpośrednio, bez podawania ścieżki dostępu do pliku wykonywalnego). Get-Command * Wyszukiwanie poleceń przy użyciu cmdlet Get-Command 1. Otwórz konsolę Windows PowerShell, jeśli nie jest uruchomiona. 2. Wyszukaj alias dla polecenia Get-Command. W tym celu użyj polecenia Get-: Get- g* Polecenie to utworzy listę wszystkich zdefiniowanych aliasów, które rozpoczynają się od litery g. Fragment tej listy jest pokazany poniżej: CommandType Name Version Source ----------- ---- ------- ------ gal -> Get- gbp -> Get-PSBreakpoint gc -> Get-Content gcb -> Get-Clipboard 3.1.0.0 Mic... gci -> Get-ChildItem gcm -> Get-Command gcs -> Get-PSCallStack gdr -> Get-PSDrive ghy -> Get-History gi -> Get-Item gjb -> Get-Job

38 Rozdział 2: Korzystanie z poleceń cmdlet gl -> Get-Location gm -> Get-Member gmo -> Get-Module gp -> Get-ItemProperty gps -> Get-Process gpv -> Get-ItemPropertyValue group -> Group-Object gsn -> Get-PSSession gsnp -> Get-PSSnapin gsv -> Get-Service gu -> Get-Unique gv -> Get-Variable gwmi -> Get-WmiObject 3. Jak można zauważyć, alias dla polecenia Get-Command to gcm. W dalszej części ćwiczenia będziemy korzystać z tego aliasu. Na początek użyjemy polecenia Get-Command do zwrócenia informacji o nim samym: gcm Get-Command Wynik tego polecenia jest widoczny poniżej: CommandType Name ModuleName ----------- ---- ---------- Cmdlet Get-Command Microsoft. Powe... Jak pokażemy za chwilę, polecenie zwraca w rzeczywistości znacznie więcej informacji, jednak trzeba je specjalnie sformatować, aby móc je wyświetlić. 4. Przekieruj wyniki działania polecenia Get-Command do polecenia cmdlet Format- List, używając znaku wieloznacznego * do odczytania wszystkich właściwości polecenia Get-Command. Kod ten jest pokazany poniżej: gcm Get-Command Format-List * Polecenie to zwróci wszystkie właściwości polecenia cmdlet Get-Command, jak poniżej: HelpUri DLL Verb Noun HelpFile PSSnapIn : http://go.microsoft.com/fwlink/?linkid=113309 : C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System. Management.Automation\v4.0_3.0.0.0 31bf3856ad364e35\ System.Management.Automation.dll : Get : Command : System.Management.Automation.dll-Help.xml : Microsoft.PowerShell.Core Version : 3.0.0.0 ImplementingType : Microsoft.PowerShell.Commands.GetCommandCommand Definition : Get-Command [[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>] [-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>]

Korzystanie z polecenia Get-Command 39 [-TotalCount <Object[]>] <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>] Get-Command [[-Name] <string[]>] [[-ArgumentList] [-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>] [-CommandType <CommandTypes>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>] DefaultParameterSet : CmdletSet OutputType : {System.Management.Automation.Info, System.Management.Automation.ApplicationInfo, System.Management.Automation.FunctionInfo, System.Management.Automation.CmdletInfo...} Options : ReadOnly Name : Get-Command CommandType : Cmdlet Source : Microsoft.PowerShell.Core Visibility : Public ModuleName : Microsoft.PowerShell.Core Module : RemotingCapability : PowerShell Parameters : {[Name, System.Management.Automation.ParameterMetadata], [Verb, System.Management.Automation.ParameterMetadata], [Noun, System.Management.Automation.ParameterMetadata], [Module, System.Management.Automation. ParameterMetadata]...} ParameterSets : {[[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>] [-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>], [[-Name] <string[]>] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>] [-CommandType <CommandTypes>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>]} 5. Uzyskany wynik jest zbyt obszerny i przez to mało czytelny. W kolejnej próbie użyj parametru -property, specyfikując definition, aby uzyskać jedynie definicję polecenia. Zamiast przepisywania całego wyrażenia, naciśnij strzałkę w górę, aby przywrócić poprzednio wpisane polecenie gcm Get-Command Format-List *. Użyj klawisza Backspace, aby usunąć gwiazdkę, po czym dopisz -property definition (przypomnijmy o uzupełnianiu tabulatorem wystarczy wpisać -p i nacisnąć tabulator, aby uzyskać wpis Property): gcm Get-Command Format-List -property definition

40 Rozdział 2: Korzystanie z poleceń cmdlet Wynikiem polecenia jest definicja polecenia (w tym przypadku Get-Command), pokazana wcześniej. 6. Jak wspomnieliśmy wcześniej, polecenia cmdlet zwracają obiekty, a nie po prostu dane tekstowe. Oznacza to, że można uzyskać definicję polecenia bezpośrednio używając właściwości definition i składni obiektowej (notacji kropkowej), jak poniżej: (gcm Get-Command).definition Wynik tego polecenia jest (z wyjątkiem formatowania) identyczny z uzyskanym wcześniej poprzez cmdlet Format-List. 7. Użyj aliasu gcm z parametrem -Verb (czasownik). Jako wartość dla parametru wpisz se*, jak poniżej: gcm -verb se* Polecenie to zwraca listę wszystkich funkcji i poleceń cmdlet, które zawierają człon czasownika rozpoczynający się od se. Wynik ten wygląda podobnie do poniższego (listing ten został skrócony pełna lista zajęłaby kilkanaście stron książki): CommandType Name Version Source ----------- ---- ------- ------ Function Send-EtwTraceSession 1.0.0.0 Eve... Function Set-AssignedAccess 1.0.0.0 Ass... Function Set-AutologgerConfig 1.0.0.0 Eve... Function Set-BCAuthentication 1.0.0.0 Bra... Function Set-BCCache 1.0.0.0 Bra... Function Set-BCDataCacheEntryMaxAge 1.0.0.0 Bra... Function Set-BCMinSMBLatency 1.0.0.0 Bra... Function Set-BCSecretKey 1.0.0.0 Bra... Function Set-ClusteredScheduledTask 1.0.0.0 Sch... Function Set-DAClientExperienceConfiguration 1.0.0.0 Dir... Function Set-DAEntryPointTableItem 1.0.0.0 Dir... Function Set-Disk 2.0.0.0 Sto... Function Set-DnsClient 1.0.0.0 Dns... Function Set-DnsClientGlobalSetting 1.0.0.0 Dns... Function Set-DnsClientNrptGlobal 1.0.0.0 Dns... Function Set-DnsClientNrptRule 1.0.0.0 Dns... Function Set-DnsClientServerAddress 1.0.0.0 Dns... Function Set-DtcAdvancedHostSetting 1.0.0.0 MsDtc Function Set-DtcAdvancedSetting 1.0.0.0 MsDtc Function Set-DtcClusterDefault 1.0.0.0 MsDtc Function Set-DtcClusterTMMapping 1.0.0.0 MsDtc Function Set-DtcDefault 1.0.0.0 MsDtc Function Set-DtcLog 1.0.0.0 MsDtc Function Set-DtcNetworkSetting 1.0.0.0 MsDtc Function Set-DtcTransaction 1.0.0.0 MsDtc Function Set-DtcTransactionsTraceSession 1.0.0.0 MsDtc Function Set-DtcTransactionsTraceSetting 1.0.0.0 MsDtc Function Set-DynamicParameterVariables 3.3.5 Pester Function Set-EtwTraceProvider 1.0.0.0 Eve...

Korzystanie z polecenia Get-Command 41 Function Set-EtwTraceSession 1.0.0.0 Eve... Function Set-FileIntegrity 2.0.0.0 Sto... Function Set-FileShare 2.0.0.0 Sto... Function Set-FileStorageTier 2.0.0.0 Sto... Function Set-InitiatorPort 2.0.0.0 Sto... Function Set-IscsiChapSecret 1.0.0.0 iscsi Function Set-LogProperties 1.0.0.0 PSD... Function Set-MMAgent 1.0 MMA... Function Set-MpPreference 1.0 Def... Function Set-NCSIPolicyConfiguration 1.0.0.0 Net... Function Set-Net6to4Configuration 1.0.0.0 Net... Function Set-NetAdapter 2.0.0.0 Net... Function Set-NetAdapterAdvancedProperty 2.0.0.0 Net... Function Set-NetAdapterBinding 2.0.0.0 Net... Function Set-NetAdapterChecksumOffload 2.0.0.0 Net... Function Set-NetAdapterEncapsulatedPacketTaskOffload 2.0.0.0 Net... Function Set-NetAdapterIPsecOffload 2.0.0.0 Net... Function Set-NetAdapterLso 2.0.0.0 Net... Function Set-NetAdapterPacketDirect 2.0.0.0 Net... Function Set-NetAdapterPowerManagement 2.0.0.0 Net... Function Set-NetAdapterQos 2.0.0.0 Net... Function Set-NetAdapterRdma 2.0.0.0 Net... Function Set-NetAdapterRsc 2.0.0.0 Net... Function Set-NetAdapterRss 2.0.0.0 Net... Function Set-NetAdapterSriov 2.0.0.0 Net... Function Set-NetAdapterVmq 2.0.0.0 Net... Function Set-NetConnectionProfile 1.0.0.0 Net... Function Set-NetDnsTransitionConfiguration 1.0.0.0 Net... Function Set-NetEventPacketCaptureProvider 1.0.0.0 Net... Function Set-NetEventProvider 1.0.0.0 Net... Function Set-NetEventSession 1.0.0.0 Net... Function Set-NetEventWFPCaptureProvider 1.0.0.0 Net... Function Set-NetFirewallAddressFilter 2.0.0.0 Net... Function Set-NetFirewallApplicationFilter 2.0.0.0 Net... Function Set-NetFirewallInterfaceFilter 2.0.0.0 Net... Function Set-NetFirewallInterfaceTypeFilter 2.0.0.0 Net... Function Set-NetFirewallPortFilter 2.0.0.0 Net... Function Set-NetFirewallProfile 2.0.0.0 Net... Function Set-NetFirewallRule 2.0.0.0 Net... Function Set-NetFirewallSecurityFilter 2.0.0.0 Net... Function Set-NetFirewallServiceFilter 2.0.0.0 Net... Function Set-NetFirewallSetting 2.0.0.0 Net... Function Set-NetIPAddress 1.0.0.0 Net... Function Set-NetIPHttpsConfiguration 1.0.0.0 Net... Function Set-NetIPInterface 1.0.0.0 Net... Function Set-NetIPsecDospSetting 2.0.0.0 Net... Function Set-NetIPsecMainModeCryptoSet 2.0.0.0 Net... Function Set-NetIPsecMainModeRule 2.0.0.0 Net... Function Set-NetIPsecPhase1AuthSet 2.0.0.0 Net... Function Set-NetIPsecPhase2AuthSet 2.0.0.0 Net... Function Set-NetIPsecQuickModeCryptoSet 2.0.0.0 Net... Function Set-NetIPsecRule 2.0.0.0 Net... Function Set-NetIPv4Protocol 1.0.0.0 Net...

42 Rozdział 2: Korzystanie z poleceń cmdlet Function Set-NetIPv6Protocol 1.0.0.0 Net... Function Set-NetIsatapConfiguration 1.0.0.0 Net... Function Set-NetLbfoTeam 2.0.0.0 Net... Function Set-NetLbfoTeamMember 2.0.0.0 Net... Function Set-NetLbfoTeamNic 2.0.0.0 Net... Function Set-NetNat 1.0.0.0 NetNat Function Set-NetNatGlobal 1.0.0.0 NetNat Function Set-NetNatTransitionConfiguration 1.0.0.0 Net... Function Set-NetNeighbor 1.0.0.0 Net... Function Set-NetOffloadGlobalSetting 1.0.0.0 Net... Function Set-NetQosPolicy 2.0.0.0 NetQos Function Set-NetRoute 1.0.0.0 Net... Function Set-NetTCPSetting 1.0.0.0 Net... Function Set-NetTeredoConfiguration 1.0.0.0 Net... Function Set-NetUDPSetting 1.0.0.0 Net... Function Set-NetworkSwitchEthernetPortIPAddress 1.0.0.0 Net... Function Set-NetworkSwitchPortMode 1.0.0.0 Net... Function Set-NetworkSwitchPortProperty 1.0.0.0 Net... Function Set-NetworkSwitchVlanProperty 1.0.0.0 Net... Function Set-OdbcDriver 1.0.0.0 Wdac Function Set-OdbcDsn 1.0.0.0 Wdac Function Set-Partition 2.0.0.0 Sto... Function Set-PcsvDeviceBootConfiguration 1.0.0.0 Pcs... Function Set-PcsvDeviceNetworkConfiguration 1.0.0.0 Pcs... Function Set-PcsvDeviceUserPassword 1.0.0.0 Pcs... Function Set-PhysicalDisk 2.0.0.0 Sto... Function Set-PrintConfiguration 1.1 Pri... Function Set-Printer 1.1 Pri... Function Set-PrinterProperty 1.1 Pri... Function Set-PSRepository 1.0 Pow... Function Set-ResiliencySetting 2.0.0.0 Sto... Function Set-ScheduledTask 1.0.0.0 Sch... Function Set-SmbBandwidthLimit 2.0.0.0 Smb... Function Set-SmbClientConfiguration 2.0.0.0 Smb... Function Set-SmbPathAcl 2.0.0.0 Smb... Function Set-SmbServerConfiguration 2.0.0.0 Smb... Function Set-SmbShare 2.0.0.0 Smb... Function Set-StorageFileServer 2.0.0.0 Sto... Function Set-StoragePool 2.0.0.0 Sto... Function Set-StorageProvider 2.0.0.0 Sto... Function Set-StorageSetting 2.0.0.0 Sto... Function Set-StorageSubSystem 2.0.0.0 Sto... Function Set-StorageTier 2.0.0.0 Sto... Function Set-VirtualDisk 2.0.0.0 Sto... Function Set-Volume 2.0.0.0 Sto... Function Set-VolumeScrubPolicy 2.0.0.0 Sto... Function Set-VpnConnection 2.0.0.0 Vpn... Function Set-VpnConnectionIPsecConfiguration 2.0.0.0 Vpn... Function Set-VpnConnectionProxy 2.0.0.0 Vpn... Function Set-VpnConnectionTriggerDnsConfiguration 2.0.0.0 Vpn... Function Set-VpnConnectionTriggerTrustedNetwork 2.0.0.0 Vpn... Cmdlet Select-Object 3.1.0.0 Mic... Cmdlet Select-String 3.1.0.0 Mic...

Korzystanie z polecenia Get-Command 43 Cmdlet Select-Xml 3.1.0.0 Mic... Cmdlet Send-DtcDiagnosticTransaction 1.0.0.0 MsDtc Cmdlet Send-MailMessage 3.1.0.0 Mic... Cmdlet Set-Acl 3.0.0.0 Mic... Cmdlet Set- 3.1.0.0 Mic... Cmdlet Set-AppBackgroundTaskResourcePolicy 1.0.0.0 App... Cmdlet Set-AppLockerPolicy 2.0.0.0 App... Cmdlet Set-AppxDefaultVolume 2.0.0.0 Appx Cmdlet Set-AppXProvisionedDataFile 3.0 Dism Cmdlet Set-AuthenticodeSignature 3.0.0.0 Mic... Cmdlet Set-BitsTransfer 2.0.0.0 Bit... Cmdlet Set-CertificateAutoEnrollmentPolicy 1.0.0.0 PKI Cmdlet Set-CimInstance 1.0.0.0 Cim... Cmdlet Set-Clipboard 3.1.0.0 Mic... Cmdlet Set-Content 3.1.0.0 Mic... Cmdlet Set-Culture 2.0.0.0 Int... Cmdlet Set-Date 3.1.0.0 Mic... Cmdlet Set-DscLocalConfigurationManager 1.1 PSD... Cmdlet Set-ExecutionPolicy 3.0.0.0 Mic... Cmdlet Set-Item 3.1.0.0 Mic... Cmdlet Set-ItemProperty 3.1.0.0 Mic... Cmdlet Set-JobTrigger 1.1.0.0 PSS... Cmdlet Set-KdsConfiguration 1.0.0.0 Kds Cmdlet Set-Location 3.1.0.0 Mic... Cmdlet Set-PackageSource 1.0.0.0 Pac... Cmdlet Set-PSBreakpoint 3.1.0.0 Mic... Cmdlet Set-PSDebug 3.0.0.0 Mic... Cmdlet Set-PSReadlineKeyHandler 1.1 PSR... Cmdlet Set-PSReadlineOption 1.1 PSR... Cmdlet Set-PSSessionConfiguration 3.0.0.0 Mic... Cmdlet Set-ScheduledJob 1.1.0.0 PSS... Cmdlet Set-ScheduledJobOption 1.1.0.0 PSS... Cmdlet Set-SecureBootUEFI 2.0.0.0 Sec... Cmdlet Set-Service 3.1.0.0 Mic... Cmdlet Set-StrictMode 3.0.0.0 Mic... Cmdlet Set-TpmOwnerAuth 2.0.0.0 Tru... Cmdlet Set-TraceSource 3.1.0.0 Mic... Cmdlet Set-Variable 3.1.0.0 Mic... Cmdlet Set-WinAcceptLanguageFromLanguageListOptOut 2.0.0.0 Int... Cmdlet Set-WinCultureFromLanguageListOptOut 2.0.0.0 Int... Cmdlet Set-WinDefaultInputMethodOverride 2.0.0.0 Int... Cmdlet Set-WindowsEdition 3.0 Dism Cmdlet Set-WindowsProductKey 3.0 Dism Cmdlet Set-WindowsSearchSetting 1.0.0.0 Win... Cmdlet Set-WinHomeLocation 2.0.0.0 Int... Cmdlet Set-WinLanguageBarOption 2.0.0.0 Int... Cmdlet Set-WinSystemLocale 2.0.0.0 Int... Cmdlet Set-WinUILanguageOverride 2.0.0.0 Int... Cmdlet Set-WinUserLanguageList 2.0.0.0 Int... Cmdlet Set-WmiInstance 3.1.0.0 Mic... Cmdlet Set-WSManInstance 3.0.0.0 Mic... Cmdlet Set-WSManQuickConfig 3.0.0.0 Mic...

44 Rozdział 2: Korzystanie z poleceń cmdlet Zwróćmy uwagę, że lista ta zależy od wersji systemu operacyjnego oraz zainstalowanych ról lub oprogramowania jak wspomnieliśmy wcześniej, programy takie jak Microsoft SQL Server lub Microsoft Exchange instalują własne moduły PowerShell. 8. Użyj aliasu gcm z parametrem -Noun (rzeczownik), podając jako wartość o*, jak poniżej: gcm -noun o* To polecenie zwróci listę wszystkich funkcji i poleceń cmdlet, których człon rzeczownika rozpoczyna się od litery o. Wynik będzie podobny do poniższego: CommandType Name Version Source ----------- ---- ------- ------ Function Add-OdbcDsn 1.0.0.0 Wdac Function Disable-OdbcPerfCounter 1.0.0.0 Wdac Function Enable-OdbcPerfCounter 1.0.0.0 Wdac Function Export-ODataEndpointProxy 1.0 Mic... Function Get-OdbcDriver 1.0.0.0 Wdac Function Get-OdbcDsn 1.0.0.0 Wdac Function Get-OdbcPerfCounter 1.0.0.0 Wdac Function Get-OffloadDataTransferSetting 2.0.0.0 Sto... Function Remove-OdbcDsn 1.0.0.0 Wdac Function Set-OdbcDriver 1.0.0.0 Wdac Function Set-OdbcDsn 1.0.0.0 Wdac Cmdlet Compare-Object 3.1.0.0 Mic... Cmdlet ForEach-Object 3.0.0.0 Mic... Cmdlet Group-Object 3.1.0.0 Mic... Cmdlet Measure-Object 3.1.0.0 Mic... Cmdlet New-Object 3.1.0.0 Mic... Cmdlet Register-ObjectEvent 3.1.0.0 Mic... Cmdlet Select-Object 3.1.0.0 Mic... Cmdlet Sort-Object 3.1.0.0 Mic... Cmdlet Tee-Object 3.1.0.0 Mic... Cmdlet Where-Object 3.0.0.0 Mic... Cmdlet Write-Output 3.1.0.0 Mic... 9. Odczytaj tylko składnię polecenia Get-Command, używając parametru -Syntax. Odpowiednie wyrażenie jest przedstawione poniżej: gcm -syntax Get-Command W wyniku tego wyrażenia zostanie wyświetlona składnia polecenia Get-Command, jak poniżej: Get-Command [[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>] [-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>] Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-FullyQualifiedModule <ModuleSpecification[]>] [-CommandType <CommandTypes>]

Korzystanie z polecenia Get-Member 45 [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>] 10. Spróbuj użyć jedynie aliasów, aby uzyskać składnię polecenia Get-Command: gcm -syntax gcm Wynikiem tego wyrażenia nie jest opis składni. Zamiast tego uzyskujemy mało zadowalający rezultat pokazany poniżej: Get-Command Wynika to z faktu, że gcm podane jako wartość parametru nie jest poleceniem cmdlet, ale aliasem i jego jedynym atrybutem jest nazwa właściwego polecenia. Na tym kończy się to ćwiczenie. Zamknij konsolę Windows PowerShell, wpisując exit i naciskając klawisz Enter. Szybki test P. Jakiego polecenia należy użyć, aby odczytać definicję cmdlet Get-Command, posługując się obiektową notacją kropkową? O. (gcm Get-Command).definition Korzystanie z polecenia Get-Member Polecenie cmdlet Get-Member odczytuje informacje o elementach członkowskich obiektu. Choć może nie wydawać się to nadmiernie interesujące, trzeba pamiętać, że wszystko, co zwracają polecenia cmdlet, to obiekty, zatem można wykorzystać Get- Member do poznania metod i właściwości danego obiektu. Jeśli użyjemy na przykład polecenia Get-Member do wyników polecenia Get-ChildItem w systemie plików, uzyskamy listing wszystkich metod i właściwości, których można użyć względem obiektów klas DirectoryInfo lub FileInfo. Obiekty, właściwości i metody Jedną z fundamentalnych cech Windows PowerShell jest fakt, że polecenia cmdlet zwracają obiekty. Czym jednak jest obiekt? Jest to byt, co daje nam możliwość bądź opisania czegoś, bądź zrobienia czegoś. Jeśli nie mamy potrzeby opisywania ani zrobienia czegoś, nie ma żadnego powodu, aby tworzyć obiekt. Zależnie od okoliczności, możemy być bardziej zainteresowani metodami albo właściwościami. Te pierwsze umożliwiają zrobienie czegoś. Te drugie zapewniają możliwość opisania. Ciąg dalszy na stronie następnej

46 Rozdział 2: Korzystanie z poleceń cmdlet Ciąg dalszy ze strony poprzedniej Dla przykładu rozważmy procedurę wynajmowania samochodu. Wiele podróżowałem, gdy pracowałem jako konsultant w firmie Microsoft, i bardzo często musiałem wynająć samochód. Aby ująć to językiem programisty, gdy przybywałem na lotnisko, musiałem udać się do stanowiska wynajmu, gdzie używałem polecenia cmdlet New-Object, aby utworzyć obiekt wynajętysamochód. Od tego momentu interesowały mnie tylko metody dostępne dla obiektu wynajętysamochód. Potrzebowałem metod JedźProstoTąDrogą, StańNaCzerwonym, a być może także OdtwarzajMuzykę. Jednak nie interesowały mnie właściwości tego obiektu. W domu posiadam mały, zgrabny sportowy samochód. Dysponuje on tymi samymi metodami, co obiekt wynajętysamochód, ale utworzyłem obiekt sportowysamochód głównie ze względu na jego właściwości. Jest zielony i ma aluminiowe felgi, składany dach oraz 3,5-litrowy silnik. Choć ma te same metody, co wynajętysamochód, decydującym czynnikiem utworzenia tego obiektu były właściwości, a nie metody. Korzystanie z polecenia Get-Member do badania właściwości i metod Wynik dowolnego polecenia cmdlet można przekierować do polecenia Get-Member, aby zbadać właściwości i metody zwracanego obiektu. Dla przykładu użyjmy polecenia Get-ChildItem dla folderu dyskowego i przekażemy wyjście do Get-Member: Get-ChildItem C:\ Get-Member Korzystanie z polecenia cmdlet Get-Member 1. Otwórz konsolę Windows PowerShell, jeśli nie była wcześniej uruchomiona. 2. Zlokalizuj alias odpowiadający poleceniu Get-Member, korzystając z polecenia Get-: Get- g* 3. Przeglądając listę uzyskanych wyników możemy zauważyć, że alias dla polecenia Get-Member to gm. Przy okazji można też spostrzec (i zapamiętać), że poleceniu Get- odpowiada skrót gal, zaś poleceniu Get-ChildItem skrót gci. Po ustaleniu aliasu dla polecenia cmdlet Get-, można użyć go do znalezienia aliasu dla polecenia Get-Member. W tym celu można użyć następującego polecenia, w którym zamiast pełnej nazwy Get-, jak w poprzednim poleceniu, zastosowany został alias gal. gal g*

Korzystanie z polecenia Get-Member 47 W wyniku wykonania polecenia wyświetlona zostaje poniższa lista zdefiniowanych aliasów rozpoczynających się od litery g: CommandType Name Version Source ----------- ---- ------- ------ gal -> Get- gbp -> Get-PSBreakpoint gc -> Get-Content gcb -> Get-Clipboard 3.1.0.0 Mic... gci -> Get-ChildItem gcm -> Get-Command gcs -> Get-PSCallStack gdr -> Get-PSDrive ghy -> Get-History gi -> Get-Item gjb -> Get-Job gl -> Get-Location gm -> Get-Member gmo -> Get-Module gp -> Get-ItemProperty gps -> Get-Process gpv -> Get-ItemPropertyValue group -> Group-Object gsn -> Get-PSSession gsnp -> Get-PSSnapin gsv -> Get-Service gu -> Get-Unique gv -> Get-Variable gwmi -> Get-WmiObject 4. Przeglądanie uzyskanej listy można sobie uprościć, porządkując ją według właściwości definition. W tym celu możemy użyć polecenia cmdlet Sort-Object, jak poniżej: gal g* Sort-Object -property definition W rezultacie otrzymamy listę par alias cmdlet, posortowaną według nazw poleceń, a nie skrótów, co ułatwia wyszukiwanie, jak poniżej: CommandType Name Version Source ----------- ---- ------- ------ gal -> Get- gci -> Get-ChildItem gcb -> Get-Clipboard 3.1.0.0 Mic... gcm -> Get-Command gc -> Get-Content ghy -> Get-History gi -> Get-Item gp -> Get-ItemProperty gpv -> Get-ItemPropertyValue gjb -> Get-Job gl -> Get-Location gm -> Get-Member gmo -> Get-Module

48 Rozdział 2: Korzystanie z poleceń cmdlet gps -> Get-Process gbp -> Get-PSBreakpoint gcs -> Get-PSCallStack gdr -> Get-PSDrive gsn -> Get-PSSession gsnp -> Get-PSSnapin gsv -> Get-Service gu -> Get-Unique gv -> Get-Variable gwmi -> Get-WmiObject group -> Group-Object 5. Łatwiejszy sposób sprawdzania aliasu wybranego polecenia cmdlet polega na użyciu parametru -Definition polecenia Get- w następujący sposób: gal definition Get-ChildItem 6. Użyj aliasu dla polecenia cmdlet Get-ChildItem i przekieruj wynik do aliasu polecenia Get-Member, jak poniżej: gci gm 7. Aby wyświetlić tylko właściwości dostępne dla obiektów zwracanych przez Get- ChildItem z zastosowaniem przełącznika -Force w celu dołączenia ukrytych plików i folderów, użyj parametru -MemberType z wartością property (właściwość). Tym razem wpisując polecenie posłuż się uzupełnianiem, zamiast używania aliasów, jak poniżej: Get-ChildItem -Force Get-Member -membertype property Wyjście tego polecenia jest pokazane poniżej: TypeName: System.IO.DirectoryInfo Name MemberType Definition ---- ---------- ---------- Attributes Property System.IO.FileAttributes Attributes {get;set;} CreationTime Property datetime CreationTime {get;set;} CreationTimeUtc Property datetime CreationTimeUtc {get;set;} Exists Property bool Exists {get;} Extension Property string Extension {get;} FullName Property string FullName {get;} LastAccessTime Property datetime LastAccessTime {get;set;} LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;} LastWriteTime Property datetime LastWriteTime {get;set;} LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;} Name Property string Name {get;} Parent Property System.IO.DirectoryInfo Parent {get;} Root Property System.IO.DirectoryInfo Root {get;} TypeName: System.IO.FileInfo Name MemberType Definition ---- ---------- ---------- Attributes Property System.IO.FileAttributes Attributes {get;set;}

Korzystanie z polecenia Get-Member 49 CreationTime Property datetime CreationTime {get;set;} CreationTimeUtc Property datetime CreationTimeUtc {get;set;} Directory Property System.IO.DirectoryInfo Directory {get;} DirectoryName Property string DirectoryName {get;} Exists Property bool Exists {get;} Extension Property string Extension {get;} FullName Property string FullName {get;} IsReadOnly Property bool IsReadOnly {get;set;} LastAccessTime Property datetime LastAccessTime {get;set;} LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;} LastWriteTime Property datetime LastWriteTime {get;set;} LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;} Length Property long Length {get;} Name Property string Name {get;} 8. Użyj parametru -MemberType dla polecenia cmdlet Get-Member, aby wyświetlić listę metod dostępnych dla obiektu zwracanego przez polecenie Get-ChildItem. W tym celu należy podać method jako wartość parametru, jak poniżej: Get-ChildItem Get-Member -membertype method 9. W wyniku tego polecenia uzyskamy listę wszystkich metod. Skrócony fragment tego listingu jest pokazany poniżej (zwróćmy uwagę, że informacje zawarte w kolumnie Definition są obcięte ze względu na szerokość okna konsoli): TypeName: System.IO.DirectoryInfo Name MemberType Definition ---- ---------- ---------- Create Method void Create(), void Create(System.Securit... CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjR... CreateSubdirectory Method System.IO.DirectoryInfo CreateSubdirector... Delete Method void Delete(), void Delete(bool recursive) EnumerateDirectories Method System.Collections.Generic.IEnumerable[Sy... EnumerateFiles Method System.Collections.Generic.IEnumerable[Sy... EnumerateFileSystemInfos Method System.Collections.Generic.IEnumerable[Sy... Equals Method bool Equals(System.Object obj) GetAccessControl Method System.Security.AccessControl.DirectorySe... GetDirectories Method System.IO.DirectoryInfo[] GetDirectories(... GetFiles Method System.IO.FileInfo[] GetFiles(string sear... GetFileSystemInfos Method System.IO.FileSystemInfo[] GetFileSystemI... GetHashCode Method int GetHashCode() GetLifetimeService Method System.Object GetLifetimeService() GetObjectData Method void GetObjectData(System.Runtime.Seriali... GetType Method type GetType() InitializeLifetimeService Method System.Object InitializeLifetimeService() MoveTo Method void MoveTo(string destdirname) Refresh Method void Refresh() SetAccessControl Method void SetAccessControl(System.Security.Acc... ToString Method string ToString() 10. Użyj strzałki w górę, aby wyświetlić poprzednie polecenie i zmień parametr method na m*; wynik polecenia będzie dokładnie taki sam, gdyż jedynym typem

50 Rozdział 2: Korzystanie z poleceń cmdlet członkowskim zaczynającym się na literę m jest method. Przykład ten demonstruje jednak możliwość stosowania symboli wieloznacznych w poleceniu: Get-ChildItem Get-Member -membertype m* 11. Użyj parametru -InputObject w poleceniu Get-Member, aby odczytać definicje członkowskie dla każdej właściwości lub metody na liście. Polecenie będzie wyglądać następująco: Get-Member -inputobject Get-ChildItem Wynik (skrócony) polecenia jest pokazany poniżej: TypeName: System.String Name MemberType Definition ---- ---------- ---------- Clone Method System.Object Clone(), System.Object IClon... CompareTo Method int CompareTo(System.Object value), int Co... Contains Method bool Contains(string value) CopyTo Method void CopyTo(int sourceindex, char[] destin... EndsWith Method bool EndsWith(string value), bool EndsWith... Equals Method bool Equals(System.Object obj), bool Equal... GetEnumerator Method System.CharEnumerator GetEnumerator(), Sys... GetHashCode Method int GetHashCode() GetType Method type GetType() GetTypeCode Method System.TypeCode GetTypeCode(), System.Type... IndexOf Method int IndexOf(char value), int IndexOf(char... IndexOfAny Method int IndexOfAny(char[] anyof), int IndexOfA... Insert Method string Insert(int startindex, string value) IsNormalized Method bool IsNormalized(), bool IsNormalized(Sys... LastIndexOf Method int LastIndexOf(char value), int LastIndex... LastIndexOfAny Method int LastIndexOfAny(char[] anyof), int Last... Normalize Method string Normalize(), string Normalize(Syste... PadLeft Method string PadLeft(int totalwidth), string Pad... PadRight Method string PadRight(int totalwidth), string Pa... Remove Method string Remove(int startindex, int count),... Replace Method string Replace(char oldchar, char newchar)... Split Method string[] Split(Params char[] separator), s... StartsWith Method bool StartsWith(string value), bool Starts... Substring Method string Substring(int startindex), string S... ToBoolean Method bool IConvertible.ToBoolean(System.IFormat... ToByte Method byte IConvertible.ToByte(System.IFormatPro... ToChar Method char IConvertible.ToChar(System.IFormatPro... ToCharArray Method char[] ToCharArray(), char[] ToCharArray(i... ToDateTime Method datetime IConvertible.ToDateTime(System.IF... ToDecimal Method decimal IConvertible.ToDecimal(System.IFor... ToDouble Method double IConvertible.ToDouble(System.IForma... ToInt16 Method int16 IConvertible.ToInt16(System.IFormatP... ToInt32 Method int IConvertible.ToInt32(System.IFormatPro... ToInt64 Method long IConvertible.ToInt64(System.IFormatPr... ToLower Method string ToLower(), string ToLower(culturein... ToLowerInvariant Method string ToLowerInvariant() ToSByte Method sbyte IConvertible.ToSByte(System.IFormatP...

Korzystanie z polecenia Get-Member 51 ToSingle Method float IConvertible.ToSingle(System.IFormat... ToString Method string ToString(), string ToString(System... ToType Method System.Object IConvertible.ToType(type con... ToUInt16 Method uint16 IConvertible.ToUInt16(System.IForma... ToUInt32 Method uint32 IConvertible.ToUInt32(System.IForma... ToUInt64 Method uint64 IConvertible.ToUInt64(System.IForma... ToUpper Method string ToUpper(), string ToUpper(culturein... ToUpperInvariant Method string ToUpperInvariant() Trim Method string Trim(Params char[] trimchars), stri... TrimEnd Method string TrimEnd(Params char[] trimchars) TrimStart Method string TrimStart(Params char[] trimchars) Chars ParameterizedProperty char Chars(int index) {get;} Length Property int Length {get;} Na tym kończy się ćwiczenie z poleceniem cmdlet Get-Member. Szybki test P. Jakiego polecenia należy użyć, aby odczytać listę aliasów rozpoczynających się na literę g, posortowaną według właściwości definition? O. gal g* Sort-Object -property definition

52 Rozdział 2: Korzystanie z poleceń cmdlet Korzystanie z polecenia New-Object Stosowanie obiektów Windows PowerShell udostępnia wiele atrakcyjnych możliwości wykonywania działań, które nie są wbudowane w sam mechanizm PowerShell. Możemy sobie przypomnieć, że przy korzystaniu z języka VBScript (Microsoft Visual Basic Scripting Edition) odwoływaliśmy się często do obiektu o nazwie wshshell (powłoki systemowej). Dla tych Czytelników, który nie mieli styczności z tym zagadnieniem, przedstawiam rysunek 2-7, który prezentuje schemat modelu tego obiektu. Rysunek 2-7 Obiekt wshshell języka VBScript udostępnia wiele łatwych w użyciu metod i właściwości, przydatnych w administrowaniu siecią. Tworzenie i korzystanie z obiektu wshshell Aby utworzyć nową instancję obiektu wshshell, użyjemy polecenia cmdlet New-Object z parametrem -ComObject, dostarczając identyfikator programu wscript.shell. Utworzony obiekt przechowamy w zmiennej. Oto przykład: $wshshell = New-Object -comobject "wscript.shell"

Korzystanie z polecenia New-Object 53 Po utworzeniu obiektu i umieszczeniu go w zmiennej można bezpośrednio korzystać z dowolnej metody udostępnianej przez ten obiekt. Demonstruje to poniższy przykład (tym razem są to dwa wiersze kodu): $wshshell = New-Object -comobject "wscript.shell" $wshshell.run("calc.exe") W tym przykładzie najpierw tworzona jest nowa instancja obiektu wshshell. Następnie została wywołana metoda run tego obiektu, aby uruchomić kalkulator. Po utworzeniu obiektu i umieszczeniu go w zmiennej można użyć techniki uzupełniania tabulatorem, aby przeglądać nazwy metod udostępnianych przez obiekt. Technikę tę demonstruje rysunek 2-8. Rysunek 2-8 Uzupełnianie tabulatorem wylicza kolejno metody udostępniane przez obiekt. Tworzenie obiektu wshshell 1. Otwórz konsolę Windows PowerShell, jeśli nie jest jeszcze uruchomiona. 2. Utwórz instancję obiektu wshshell, posługując się poleceniem cmdlet New-Object i umieść obiekt w zmiennej $wshshell. Wymagany kod jest przedstawiony poniżej: $wshshell = New-Object -comobject "wscript.shell" 3. Uruchom program Kalkulator (calc.exe), wywołując metodę run obiektu wsh- Shell. Wykorzystaj uzupełnianie tabulatorem, aby uniknąć konieczności wpisywania całej nazwy metody. Rozpocznij wiersz od nazwy zmiennej, w której został umieszczony obiekt, wpisz kropkę, po czym nazwę metody. Następnie podaj nazwę programu do uruchomienia w nawiasach i cudzysłowach, jak poniżej: $wshshell.run("calc.exe") 4. Posłuż się metodą ExpandEnvironmentStrings, aby wyświetlić ścieżkę do katalogu Windows. Jest ona przechowywana w zmiennej środowiskowej %windir%. Funkcja uzupełniania tabulatorem będzie szczególnie przydatna w przypadku nazwy tej metody. Zmienna środowiskowa musi być umieszczona w cudzysłowach, jak poniżej: $wshshell.expandenvironmentstrings("%windir%") Polecenie to zwróci pełną ścieżkę do katalogu systemu Windows na danym komputerze: C:\WINDOWS