Idź profesjonalnie: przewodnik zaawansowanego użytkownika dotyczący programu PowerShell

Jeśli zmagałeś się z systemem Windows 10, z pewnością słyszałeś o PowerShell. Jeśli ostatnio próbowałeś zrobić coś wymyślnego z Win7 / 8.1, prawdopodobnie pojawi się też PowerShell. Po latach polegania na wierszu poleceń systemu Windows i połączonych ze sobą plikach wsadowych nadszedł czas, aby skupić się na czymś potężniejszym, bardziej adaptacyjnym - lepszym.

PowerShell jest ogromnym dodatkiem do zestawu narzędzi systemu Windows i może wywołać trochę strachu, biorąc pod uwagę ten ogrom. Czy to język skryptowy, powłoka poleceń, wosk do podłóg? Czy musisz połączyć polecenie cmdlet z utworzoną klasą .Net, aby działać z dostawcami? I dlaczego wszystkie dokumenty pomocy technicznej mówią o administratorach - czy muszę być profesjonalnym administratorem systemu Windows, aby z tego korzystać?

Zrelaksować się. PowerShell jest potężny, ale nie musi onieśmielać.

Poniższy przewodnik jest przeznaczony dla tych, którzy uruchomili jedno lub dwa polecenia systemu Windows lub jimmied plik wsadowy. Potraktuj to jako krok po kroku transformację z ciekawego programu PowerShell do obsługi programu PowerShell.

Krok 1: podkręć to

Pierwszą rzeczą, której będziesz potrzebować, jest sam PowerShell. Jeśli używasz systemu Windows 10, masz już zainstalowany program PowerShell 5 - najnowszą wersję. (Aktualizacja rocznicowa Win10 ma wersję 5.1, ale nie będziesz znać różnicy w porównaniu z aktualizacją jesienną 5.0). Windows 8 i 8.1 są dostarczane z programem PowerShell 4, który jest wystarczająco dobry, aby zmoczyć stopy. Instalacja programu PowerShell w systemie Windows 7 nie jest trudna, ale wymaga dodatkowej ostrożności - i należy oddzielnie zainstalować .Net Framework. JuanPablo Jofre szczegółowo opisuje, jak zainstalować WMF 5.0 (Windows Management Framework), który obejmuje PowerShell, oprócz narzędzi, których prawdopodobnie nie będziesz używać na początku, w MSDN.

PowerShell oferuje dwa interfejsy. Zaawansowani użytkownicy wybiorą pełnowartościowy graficzny interfejs użytkownika, znany jako Integrated Scripting Environment (ISE). Początkującym najlepiej jednak służy konsola PowerShell, prosty interfejs tekstowy przypominający wiersz poleceń systemu Windows, a nawet DOS 3.2.

Aby uruchomić PowerShell jako administrator w systemie Windows 10, kliknij przycisk Start i przewiń listę aplikacji do Windows PowerShell. Kliknij tę linię, kliknij prawym przyciskiem myszy Windows PowerShell i wybierz Uruchom jako administrator. W systemie Windows 8.1 poszukaj programu Windows PowerShell w folderze systemu Windows. W Win7 znajduje się w folderze Akcesoria. Możesz uruchomić PowerShell jako „zwykły” użytkownik, wykonując tę ​​samą sekwencję, ale klikając lewym przyciskiem myszy.

W dowolnej wersji systemu Windows do wyszukania programu PowerShell można użyć funkcji wyszukiwania systemu Windows. W systemie Windows 8.1 i Windows 10 możesz umieścić go w „menu zasilania” Ctrl-X (kliknij prawym przyciskiem myszy puste miejsce na pasku zadań i wybierz opcję Właściwości; na karcie Nawigacja zaznacz pole wyboru Zastąp wiersz polecenia). Po otwarciu dobrze jest przypiąć PowerShell do paska zadań. Tak, tak ci się spodoba.

Krok 2: Wpisz staromodne polecenia systemu Windows

Zdziwiłbyś się, jak bardzo składnia wiersza poleceń systemu Windows działa zgodnie z oczekiwaniami w programie PowerShell.

Na przykład cdzmienia katalogi (inaczej foldery) i dirnadal wyświetla listę wszystkich plików i folderów zawartych w bieżącym folderze.

W zależności od tego, jak uruchomisz konsolę PowerShell, możesz rozpocząć od c:\Windows\system32lub o godz c:\Users\. W przykładzie ze zrzutem ekranu używam cd ..(zwróć uwagę na spację), aby przejść o jeden poziom w górę, a następnie uruchamiam, diraby wyświetlić wszystkie pliki i podfoldery w C:\katalogu.

Krok 3: Zainstaluj pliki pomocy

Polecenia takie jak cdi dirnie są natywnymi poleceniami programu PowerShell. Są aliasami - zastępują prawdziwe polecenia programu PowerShell. Aliasy mogą być przydatne dla tych z nas, którzy mają pamięć palców, która jest trudna do przezwyciężenia. Ale nawet nie zaczynają dotykać najważniejszych części programu PowerShell.

Aby zacząć helppoznawać sam program PowerShell, wpisz, a następnie polecenie, które znasz. Na przykład na zrzucie ekranu piszę help dir.

Pomoc programu PowerShell informuje, że dirjest to alias polecenia programu PowerShell Get-ChildItem. Rzeczywiście, jeśli wpiszesz get-childitemu PS C:\>szybka, widać dokładnie, co widziałeś z dirpoleceniem.

Jak zauważono na dole zrzutu ekranu, pliki pomocy dla programu PowerShell nie są instalowane automatycznie. Aby je odzyskać (ty nie chcesz, aby je), zalogować się do PowerShell w trybie administratora, a następnie wpisz update-help. Instalacja plików pomocy zajmie kilka minut, a może brakować kilku modułów - nie udało się zainstalować Pomocy dla NetWNV i SecureBoot na moim komputerze testowym. Ale kiedy skończysz, pełny system pomocy będzie na Twoje zawołanie.

Od tego momentu wpisz, get-helpa następnie polecenie („cmdlet” w PowerShell mówić, wymawiane „polecenie-pozwól”), które Cię dotyczy, i zobacz całą pomoc dotyczącą tego elementu. Na przykład get-help get-childitemtworzy podsumowanie get-childitemopcji. Prosi również o wpisanie wariacji na temat. Zatem, co następuje:

get-help get-childitem -examples

tworzy siedem szczegółowych przykładów użycia get-childitem. Polecenie PowerShell

get-help get-childitem -detailed

zawiera te siedem przykładów, a także szczegółowe wyjaśnienie każdego parametru dostępnego dla polecenia get-childitemcmdlet.

Krok 4: Uzyskaj pomoc dotyczącą parametrów

Na help dirzrzucie ekranu, można zauważyć, istnieją dwa ofert przewidziane SYNTAXdla get-childitem. Fakt, że istnieją dwie oddzielne składnie polecenia cmdlet, oznacza, że ​​istnieją dwa sposoby jego uruchomienia. Jak rozdzielić składnie - i co oznaczają parametry? Odpowiedź jest prosta, jeśli znasz sztuczkę.

Aby uzyskać wszystkie szczegóły dotyczące parametrów dla polecenia get-childitemcmdlet lub innego polecenia cmdlet, użyj -fullparametru w następujący sposób:

get-help get-childitem -full

To tworzy listę, wiersz po wierszu, tego, co można zrobić za pomocą polecenia cmdlet i co może (lub nie!) Się wydarzyć. Zobacz zrzut ekranu.

Przeglądając szczegóły parametrów, można dość łatwo stwierdzić, że get-childitemmożna ich użyć do pobrania elementów „podrzędnych” (takich jak nazwy podfolderów lub nazwy plików) w określonej lokalizacji, z określonymi dopasowaniami znaków lub bez. Na przykład:

get-childItem “*.txt” -recurse

pobiera listę wszystkich *.txtplików „ ” w bieżącym folderze i wszystkich podfolderach (ze względu na -recurseparametr). Mając na uwadze, że:

get-childitem “HKLM:\Software”

zwraca listę wszystkich kluczy rejestru wysokiego poziomu w HKEY_LOCAL_MACHINE\Software.

Jeśli kiedykolwiek próbowałeś dostać się do rejestru za pomocą wiersza poleceń systemu Windows lub pliku wsadowego, jestem pewien, że możesz zobaczyć, jak potężny musi być ten rodzaj dostępu.

Krok 5: Podaj imiona

Jest powód, dlaczego cmdlet widzieliśmy do tej pory wyglądają tak samo: get-childitem, update-help, a get-helpwszystko zgodnie z tą samą czasownik-rzeczownik konwencję. Na szczęście wszystkie polecenia cmdlet programu PowerShell używają tej konwencji z czasownikiem poprzedzającym (w liczbie pojedynczej) rzeczownik. Ci z Was, którzy spędzili tygodnie zmagając się z niekonsekwentnie nazwanymi poleceniami VB i VBA, mogą odetchnąć z ulgą.

Aby zobaczyć, dokąd zmierzamy, przyjrzyj się niektórym z najczęściej używanych poleceń cmdlet (dzięki blogowi Hey, Scripting Guy! Eda Wilsona). Zacznij od poleceń cmdlet, które sięgają do twojego systemu i wyciągnij przydatne informacje, takie jak następujące:

  • set-location: Ustawia bieżące miejsce pracy w określonej lokalizacji
  • get-content: Pobiera zawartość pliku
  • get-item: Pobiera pliki i foldery
  • copy-item: Kopiuje element z jednej lokalizacji do drugiej
  • remove-item: Usuwa pliki i foldery
  • get-process: Pobiera procesy uruchomione na komputerze lokalnym lub zdalnym
  • get-service: Pobiera usługi działające na komputerze lokalnym lub zdalnym
  • invoke-webrequest: Pobiera zawartość ze strony internetowej w Internecie

Aby zobaczyć, jak działa określone polecenie cmdlet, użyj get-help, jak w

get-help copy-item -full

Na podstawie opisu pomocy możesz łatwo dowiedzieć się, czego chce polecenie cmdlet. Na przykład, jeśli chcesz skopiować wszystkie swoje pliki i foldery z Documentsdo c:\temp, użyj:

copy-item c:\users\[username] \documents\* c:\temp

Podczas wpisywania tego polecenia zobaczysz kilka miłych akcentów wbudowanych w środowisko PowerShell. Na przykład, jeśli wpiszesz copy-ii naciśniesz klawisz Tab, PowerShell wypełni Copy-Itemi spację. Jeśli błędnie wpiszesz polecenie cmdlet, a PowerShell nie będzie w stanie tego zrozumieć, otrzymasz bardzo dokładny opis tego, co poszło nie tak.

Wypróbuj to polecenie cmdlet. (Może próbować zmusić Cię do zainstalowania programu, który przeczyta pole „informacje”. Jeśli tak, zignoruj ​​je).

invoke-webrequest askwoody.com

Otrzymasz zwięzłą listę deklaracji zawartości strony internetowej, nagłówków, obrazów, linków i nie tylko. Widzisz, jak to działa? Zauważ na get-helpliście, invoke-webrequestże polecenie invoke-webrequestcmdlet „zwraca kolekcje formularzy, linków, obrazów i innych istotnych elementów HTML” - dokładnie to, co powinieneś zobaczyć na ekranie.

Niektóre polecenia cmdlet pomagają kontrolować lub usprawniać sam PowerShell:

  • get-command: Wyświetla wszystkie dostępne polecenia cmdlet (to długa lista!)
  • get-verb: Wyświetla wszystkie dostępne czasowniki (lewe połówki poleceń cmdlet)
  • clear-host: Czyści wyświetlanie w programie głównym

Różne parametry (pamiętaj get-help) pozwalają ci zawęzić polecenia i zawęzić opcje, które mogą ci się przydać. Na przykład, aby wyświetlić listę wszystkich poleceń cmdlet, które współpracują z usługami systemu Windows, spróbuj wykonać następujące czynności:

get-command *-service

Zawiera listę wszystkich czasowników, które są dostępne z servicerzeczownikiem. Oto wynik:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Te polecenia cmdlet można łączyć z innymi poleceniami cmdlet, aby zagłębić się w prawie każdą część programu PowerShell. W tym miejscu pojawiają się rury.

Krok 6: Wprowadź rury

Jeśli kiedykolwiek korzystałeś z wiersza poleceń systemu Windows lub przepychałeś się przez plik wsadowy, wiesz o przekierowaniu i potokach. Mówiąc prościej, zarówno przekierowanie (  >znak), jak i potoki ( |znak) pobierają dane wyjściowe z akcji i umieszczają je w innym miejscu. Możesz na przykład przekierować dane wyjściowe dirpolecenia do pliku tekstowego lub „potokować” wynik pingpolecenia do a find, aby odfiltrować interesujące wyniki, na przykład:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

W drugim poleceniu powyżej findpolecenie szuka łańcucha packetsw potokowym wyjściu askwoody.com pingi umieszcza wszystkie pasujące wiersze w pliku o nazwie temp2.txt.

Być może zaskakujące, pierwsze z tych poleceń działa dobrze w PowerShell. Aby uruchomić drugie polecenie, potrzebujesz czegoś takiego:

ping askwoody.com | select-string packets | out-file temp2.txt

Korzystanie z przekierowania i potoków znacznie rozszerza możliwości wiersza poleceń systemu Windows: zamiast na przykład przewijać ekran w dół w poszukiwaniu ciągu tekstowego, można utworzyć potokowe polecenie systemu Windows, które przeprowadzi weryfikację za Ciebie.

PowerShell ma możliwość tworzenia potoków, ale nie ogranicza się do tekstu. Zamiast tego PowerShell umożliwia przekazanie całego obiektu z jednego polecenia cmdlet do drugiego, gdzie „obiekt” to połączenie danych (zwanych właściwościami) i działań (metod), które mogą być użyte na danych.

Jednak najtrudniejsze jest wyrównanie obiektów. Rodzaj obiektu dostarczanego przez jedno polecenie cmdlet musi pasować do rodzajów obiektów akceptowanych przez otrzymujące polecenie cmdlet. Tekst to bardzo prosty rodzaj obiektu, więc jeśli pracujesz z tekstem, układanie elementów jest łatwe. Inne obiekty nie są tak prymitywne.

Jak to rozgryźć? Witamy w poleceniu get-membercmdlet. Jeśli chcesz wiedzieć, jaki typ obiektu tworzy polecenie cmdlet, przepuść go get-member. Na przykład, jeśli próbujesz dowiedzieć się, jakie procesy działają na twoim komputerze i zawęziłeś opcje do get-processcmdletu, oto jak dowiesz się, co get-processprodukuje cmdlet:

get-process | get-member

Uruchomienie tego polecenia tworzy długą listę właściwości i metod dla get-process, ale na samym początku listy możesz zobaczyć typ obiektu, który get-process tworzy:

TypeName: System.Diagnostics.Process

Poniższy zrzut ekranu informuje również, że get-processma właściwości zwane Handles, Name, NPM, PM, SI, VM, i WS.

Jeśli chcesz manipulować danymi wyjściowymi programu get-process, aby móc z nim pracować (w przeciwieństwie do wyświetlania długiej listy aktywnych procesów na monitorze), musisz znaleźć inne polecenie cmdlet, które będzie działać System.Diagnostics.Processjako dane wejściowe. Aby znaleźć chętny cmdlet, po prostu użyj… czekaj na to… PowerShell:

get-command -Parametertype System.Diagnostics.Process

To tworzy listę wszystkich poleceń cmdlet, które mogą obsłużyć System.Diagnostics.Process.

Niektóre polecenia cmdlet są znane z pobierania prawie każdego rodzaju danych wejściowych. Najważniejszym z nich where-object. Być może w mylący sposób where-objectprzechodzi przez każdy element przesłany w potoku, jeden po drugim i stosuje dowolne żądane kryteria wyboru. Jest specjalny marker o nazwie $_. który pozwala przechodzić przez każdy element w rurze, pojedynczo.

Załóżmy, że chcesz wymyślić listę wszystkich procesów uruchomionych na komputerze, które nazywane są „ svchost” - w języku PowerShell, które chcesz dopasować we Namewłaściwości  svchost. Wypróbuj to polecenie PowerShell:

get-process | where-object {$_.Name -eq “svchost”}

Polecenie where-objectcmdlet sprawdza każdy System.Diagnostics.Processelement, porównuje .Nameelement z „ svchost”; jeśli pozycja pasuje, wypluwa koniec rury i wpisuje na monitorze. Zobacz zrzut ekranu.