Polecenia i skrypty konsoli Windows PowerShell Laboratorium Systemów Operacyjnych - zajęcia nr 9 1 Konsola Windows PowerShell PowerShell zbudowany w jest w metodologi obiektowej. W dużym uproszeniu można powiedzieć, że wszystkie dostępne elementy są tutaj obiektami a nie jak w Linuxie plikami tekstowymi. Uruchomienie konsoli Windows PowerShell. Konsolę Windows PowerShell można uruchomić na wiele sposobów np. ALT-R powershell, Win+powershell (wybieramy konsolę z odpowiednimi uprawnieniami lub środowisko programowania skryptów PowerShell ISE) itd. Wybór między konsolą a środowiskiem ISE zależy od zadania do wykonania oraz własnych preferencji. Polecenie cmdlets (Command-Lets). Nazwa polecenia (cmdlet) jest dwuczłonowa, składa się z czasownika i rzeczownika: Verb-Noun. Czasownik określa operację(verb) jaką interpreter ma wykonać na kontekście rzeczownika (Noun). Cmdlet zostanie natychmiast wykonane gdy potwierdzimy nasz zamiar wciskając klawisz [Enter]. Na przykład cmdlet Get-Verb wyświetli listę dostępnych czasowników (operacji). Nazwy cmdlet ów mogą być długie i mało wygodne w szybkich interaktywnych sesjach konsoli. Istnieją więc aliasy dla wielu najczęściej wykonywanych poleceń. Listę aliasów można podejrzeć poleceniem Get-Alias. Uwaga, zwyczajowo w skryptach nie używa się aliasów tylko pełne nazwy cmdlet ów. Aliasy mają zwykle postać znaną Państwu z konsoli CMD lub powłoki Linuxa np. alias ls spowoduje wyświetlenie zawartości bieżącego katalogu. Gdy wykonamy polecenie Get-Alias ls otrzymam z jakim cmdlet em skojarzony jet alias (ls). W ten sposób mogą Państwo poznać większość podstawowych cmdlet ów służących do zarządzania katalogami i plikami w PowerShell u System pomocy. Lista cmdlet ów jest obszerna i cały czas podlega zmianom, więc korzystanie z nich wymaga posiadania aktualnych plików pomocy. Można je uzyskać uruchamiając w konsoli z prawami administratora polecenie Upadate-Help. System pomocy jest rozbudowany, szczególnie w środowisku ISE. W konsoli podstawowe polecenia pomocy to: Get-Help treść [-full -online -examples -ShowWindow], gdzie treść może być nazwą polecenia lub konceptu, który nas interesuje. Więcej informacji: Get-Help get-help -full Get-Command - lista wszystkich poleceń Get-Member - lista własności i metod dostępnych w interesującym nas obiekcie Get-Module - podaje listę modułów PowerShella, które zostały zaimportowane lub mogą być zaimportowane w bieżącej sesji 1
Zmienne i operatory. Powershell jest zorientowany obiektowo i dysponuje większością typów zmiennych znanych z innych języków obiektowych. Zwarty opis dotyczący dostępnych zmiennych i operatorów zawarty jest w pliku PowerShell LangRef v4.pdf, który powinni Państwo pobrać ze strony: http://www.microsoft.com/en-us/download/details.aspx?id=42554 i zapoznać się z nim. Operacje We/Wy w konsoli Wprowadzenie wielu poleceń w pojedynczej linii możliwe jest odseparowując polecenia znakiem średnika ; : $a = 1,2,3,4,5; $b = $a[2]; Write-Host $b Kontynuacja linii możliwa jest po skorzystaniu z znaku odwróconego apostrofu ( ): Write-Host To jest kontynuacja linii. Gdy polecenia przetwarzane są potokowo można złamać linię, wstawiając separator między poszczególnymi poleceniami. Zamiana sposobu wyświetlania tekstu Zmiana koloru wyświetlanego tekstu: Write-Host "tekst" -foregroundcolor "green" Zmiana koloru tła: Write-Host "tekst" -backgroundcolor Pisanie w negatywie: Write-Warning "Wystąpił błąd." Aby wyświetlić wartość zmiennej tekstowej można skorzystać z polecenia Write-Output $zmienna. Do pobrania znaków wejściowych z konsoli $a = Read-Host "Please enter your name" należy skorzystać z polecenia: Read-Host. Czyszczenie okna konsoli: Clear-Host lub alias cls Kopiowanie / Wklejanie Aby włączyć możliwość prostego kopiowania i wklejania do konsoli Windows PowerShell, należy wykonać następujące kroki: 1. Uruchomić Windows PowerShell, kliknąć prawym przyciskiem myszy ikonę w lewym górnym rogu, wybrać Properties. 2. W oknie Windows PowerShell Properties na zakładce Options wybrać QuickEdit Mode, kliknąć OK. Aby skopiować tekst z konsoli PowerShell należy zaznaczyć tekst i nacisnąć Enter. Aby wkleić tekst do konsoli należy kliknąć w obszarze konsoli prawym przyciskiem myszy Czytanie z pliku tekstowego Aby przeczytać zawartość pliku tekstowego należy skorzystać z polecenia Get-Content, podając jako parametr ścieżkę do pliku: $a = Get-Content C:\{}Scripts\{}Test.txt Każda linia w pliku posiada swój numer. Numer ten zapisany jest w tablicy $a[ indeks ]. Aby odnieść się do poszczególnych linii należy użyć odpowiednich indeksów (numerów lini). Aby określić liczbę linii, słów, znaków w pliku tekstowym należy skorzystać z polecenia: Get-Content c:\{}scripts\test.txt Measure-Object -line -word -character 2
Zapisywanie do pliku tekstowego Aby zapisać dane w pliku tekstowym należy skorzystać z polecenia: Out-File: Get-Process Out-File C:\Scripts\Test.txt Aby dołączyć dane do pliku, który już posiada zawartość należy skorzystać z parametru append: Get-Process Out-File C:\Test.txt append Można także skorzystać z strumieni np.: Get-Process > C:\Scripts\Test.txt Polecenie Export-CSV zapisuje dane w formacie CSV (rozdzielając je przecinkami): Get-Process Export-CSV C:\Test.csv Dane można wydrukować za pomocą polecenia Out-Printer Dane mające postać tabeli wygodnie jest wyprowadzać za pomocą polecenia Out-GridView np.: Get-Process Out-GridView Sortowanie danych Aby posortować dane zwracane w PowerShell, należy przekierować wyjściowy strumień danych do polecenia Sort-Object określając kryterium, zgodnie z którym chce się dane posortować: Get-Process Sort-Object ID Można dodać parametry descending lub -ascending aby określić kolejność sortowania: Get-Process Sort-Object ID -descending Można posortować uwzględniając wiele właściwości: Get-Process Sort-Object ProcessName, ID Obiekty Zaglądanie do obiektu Aby uzyskać informacje o właściwościach i metodach obiektu, należy uzyskać dostęp do instancji tego obiektu, a następnie przekierować obiekt do polecenia Get-Member. Przykładowo, poniższe polecenie zwraca właściwości i metody dostępne przy pracy z procesami: Get-Process Get-Member Wyświetlanie właściwości Aby uzyskać dostęp do właściwości obiektu, należy przekierować wyjściowy strumień danych do polecenia Select-Object: Get-Process Select-Object Name, Company Praca z Windows Management Instrumentation (WMI) Technologia WMI powstała wcześniej niż PowerShell i jest elementem każdego współczesnego systemu Windows. WMI jest microsoftową implementacją modelu Common Information Model (CIM). Model ten definiuje zbiór klas dostarczających informacji o systemie Windows, które pozwalają na bezpośredni dostęp od różnych aspektów systemów lokalnych jak i zdalnych. W ogólności jest to repozytorium klas związanych z różnymi aspektami zarówno systemu operacyjnego jak i sprzętu. Jeżeli na przykład dodajemy do systemu nową funkcjonalność np rolę serwera DNS, dzięki WMI ta funkcjonalność jest automatycznie instalowano oraz tworzone są instancję odpowiednich obiektów którymi możemy zarządzać. Dostęp do WMI możliwy jest z konsoli CMD za pomocą programu wmic. Program ten pozwala na uzyskanie dowolnej informacji o komputerze. Gdy korzystamy z PowerShell, aby uzyskać informacje o komputerze przy wykorzystaniu technologi WMI, należy skorzystać z polecenia Get-WMIObject podając jako parametr nazwę klasy: Get-WMIObject Win32 BIOS Jeżeli klasa nie występuje w obszarze nazw cimv2, należy skorzystać z parametru -namespace: 3
Get-WMIObject SystemRestore -namespace root\default Aby uzyskać dostęp do danych na innym komputerze, należy skorzystać z parametru -computername: Get-WMIObject Win32 BIOS -computername k327 Aby ograniczyć zwracane dane, należy skorzystać z zapytania WQL i parametru -query: Get-WMIObject -query "Select * From Win32 Service Where State = Stopped " Tworzenie obiektów COM Aby rozpocząć pracę z obiektami COM, należy skorzystać z polecenia New-Object z parametrem -comobject podając identyfikator programu tzw. ProgID: $a = New-Object -comobject "Excel.Application" $a.visible = $True 2 Skrypty PowerShell Prawa do uruchamiania skryptów. Wykonywanie skryptów w PowerShell poddane jest pewnym restrykcjom tj. należy nabyć odpowiednie prawa wykonywania aby móc uruchomić skrypt. Domyślnie mogą być uruchamiane tylko skrypty podpisane przez zaufanego wystawcę certyfikatu. Aby uruchomić skrypt lokalnie niezależnie od czy został podpisany cyfrowo, czy nie, należy zmienić prawa na RemoteSigned korzystąc z polecenia Set-ExecutionPolicy. Bieżący status można sprawdzić poleceniem Get-ExecutionPolicy. Uruchamianie skryptów Skrypty można uruchomić z konsoli wpisując jego pełną ścieżkę do niego np. C: \skrypty\skrypt.ps1. Jeśli skrypt znajduje się bieżącym katalogu wystarczy podanie nazwy np. skrypt.ps1, gdyby to zwiodło to wpisujemy.\skrypt.ps1. W przypadku gdy nazwa lub ścieżka dostępu zawiera spacje należy pełną nazwę ująć w znakach cudzysłowu. Skrypt można uruchomić bez uruchamiania konsoli PowerShell np. z konsoli CMD lub linii komend Win+R, wywołując powershell.exe -noexit C:\Skrypty\skrypt.ps1. Parametr -noexit pozostawia okno konsoli po wykonaniu skryptu. Gdy konieczne jest wykonanie skryptu z prawami administratora uruchamia się skrypt wywołując interpreter z parametrem -RunAsAdministrator np. powershell.exe C:\Skrypty\skrypt.ps1 -RunAsAdministrator Argumenty linii poleceń. Dostęp do argumentów z którymi uruchamiany skrypt możliwy jest przez zmienną $args, która jest indeksowaną listą. Argumenty są indeksowane od 0, więc np. drugi argument znajduje się w zmiennej $args[1] itd. Dostęp do ostatniego argumentu można uzyskać przez wywołanie $args[-1]. Komentarze w tekście skryptu można umieść w pojedynczej osobnej linii zaczynającej się od znaku # lub w bloku wielu linii ograniczonych znakami <# i #> Instrukcje warunkowe. If ma ogólną postać: i f ( warunek ) { i n s t r u k c j e wykonywane j e s l i warunek z o s t a n i e s p e l n i o n y } e l s e i f ( warunek2 ) { i n s t r u k c j e wykonywane j e s l i warunek2 z o s t a n i e s p e l n i o n y } e l s e { i n s t r u k c j e j e s l i warunek i warunek2 n i e zostana s p e l n i o n e } 4
switch służy do wielokrotnego wyboru w zależności od wartości parametru: switch ( $parametr ) { 1 { i n s t r u k c j e, gdy $parametr eq 1} 2 { i n s t r u k c j e, gdy $parametr eq 2} 3 { i n s t r u k c j e, gdy $parametr eq 3} 4 { i n s t r u k c j e, gdy $parametr eq 4} d e f a u l t { i n s t r u k c j e gdy $parmetr eq inna wartosc } } Pętle For Pętlę for tworzy się według schematu f o r ( $ i =1; $ i l e 1 0 ; $ i++) { i n s t r u k c j e } For Pętlę foreach tworzy się według schematu f o r e a c h ( $a in $args ) { i n s t r u k c j e } Pętle warunkowe while i until. do { i n s t r u k c j e } while ( warunek ) Pętla until do { i n s t r u k c j e } u n t i l ( warunek ) Pętla while 3 Literatura Literatura dotycząca PowerShell a jest obszerna i łatwo dostępna w internecie np. książka Tobiasa Weltnera Mastering PowerShell. Pełna dokumentacja oraz kursy dostępne są na stronach Microsoftu. Dużo informacji można znaleźć na stronach grup użytkowników Powershella np.: http://powershellmagazine.com, http://powershell.com, http://powershell.org, http://poshcode.org Na stronach http://www.howtogeek.com znajdą Państwo serię krótkich artykułów wprowadzających w zagadnienia PowerShell a np. http://www.howtogeek.com/141495/geek-school-writing-your-first-full-powershell-script/ 5