Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

PowerShell

Wstęp

Preinstalowany w Windows 7, PowerShell jest następcą wiersza poleceń (cmd) o znacznie większych możliwościach, np. daje dostęp do obiektów systemowych i aplikacji bibliotek COM, platformy .NET i interfejsu WMI, jak również oferuje konstrukcje programistyczne takie jak pętle. Jest pomyślany jako nadzbiór cmd, więc prawie wszystko co możesz zrobić w starym wierszu poleceń, tutaj możesz zrobić w ten sam sposób. PowerShell czerpie z dobrej tradycji systemu UNIX i łączy ją z potęgą .NET Framework oraz języków takch jak Perl, PHP, Python i C#.

Podstawowe polecenia PowerShella to tzw. cmdlety. Mają one postać czasownik-podmiot, np. Get-Alias (wielkość liter bez znaczenia). Gdy czasownikiem jest „get-”, to można go pominąć. Cmdlety mogą posiadać aliasy, w szczególności polecenia standardowego wiersza poleceń Windows (cmd.exe) są aliasami stosownych cmdletów. Polecenie które nie zostanie rozpoznane jako alias, funkcja, nazwa cmdletu ani wyrażenie, jest traktowane jako wywołanie aplikacji zewnętrznej (dla plików niewykonywalnych wykonywana jest aplikacja związana z rozszerzeniem pliku).

Domyślnie powłoka PowerShell nie zezwala na wykonywanie żadnych niepodpisanych skryptów. Aby to zmienić uruchom PowerShell w trybie administratora i wykonaj: set-executionpolicy remotesigned
(potem naciśnij „y”).

Do pisania skryptów PowerShella najlepiej użyć PowerShell ISE (ang. Integrated Scripting Environment) - programu który wchodzi w skład Windows 7 (podświetla składnię i takie tam).

Skrypt (z domyślnym rozszerzeniem *.psl) można uruchomić w ISE albo w PowerShellu przechodząc do katalogu skryptu i wykonując .\nazwa_skryptu.psl.

W przeciwieństwie do systemu UNIX, potok PowerShella nie przekazuje ciągów znakowych, ale obiekty platformy .NET.

Trick: Aby w PowerShellu wkleić zawartość schowka, nie zadziała Ctrl+C – po prostu kliknij prawym przyciskiem myszki w oknie PowerShella.

Przykłady

get-help cmdlet [-detailed | -examples | -full]
wyświetla pomoc na temat wskazanego cmdleta
get-help about-konstrukcja
opis konstrukcji składniowej języka, np. for
get-help about
lista wszystkich dokumentów „About”
get-location | get-member
wyświetla składowe cmdletu get-location
get-process | sort-object -property ws -descending | select-object -first 10
pierwszych 10 procesów z listy procesów posortowanych po wielkości obszaru roboczego
get-process | where-object { $_.ws -gt 10000000 }
procesy spełniające określony warunek
ps | ? { $_.ws -gt 20MB }
procesy zużywające więcej niż 20MB pamięci RAM
ps -p "iexplore" | kill
ubija wszystkie instancje Internet Explorera
$( Get-Process; Get-Service )
sekwencyjne wykonywanie poleceń
get-process | select-object name, product
wyświetla również informację skąd pochodzi proces (z jakiego programu), nie tylko nazwę procesu; select-object służy do wycinania z obiektów tylko potrzebnych własności
Get-ChildItem c:\windows\system32 | Group-Object Extension | sort count -desc
grupowanie plików po rozszerzeniach i sortowanie według plików w każdej grupie
Get-ChildItem c:\windows\system32 | Select-Object extension -Unique
unikalne rozszerzenia plików w podanym katalogu
Get-ChildItem c:\windows | Measure-Object -Property length -min -max -average -sum
coś jak funkcje agregujące w SQLu
Get-Service | Tee-Object -var a | Where-Object { $_.Status -eq „Running” } | Tee-Object -filepath g:\uslugi.txt
Tee-Object jest odpowiednikiem tee UNIXowego
Get-ChildItem . recurse | Sort-Object length -descending | Select-Object -first 20 | Write-Output
20 największych plików w drzewie katalogów o korzeniu w bieżącym katalogu

Porównywanie list obiektów:

  $before = Get-Process
  ...
  $after = Get-Process
  Compare-Object $before $after
get-service | group-object status
grupuje obiekty wg wskazanej własności
netstat | select-string ldap
wyświetla te wiersze wyniku netstat.exe które zawierają słowo „ldap”

Użyteczne aliasy:

  • ?: Where-Object
  • %: Foreach-Object

Wypychanie na ekran

Write-Host
taki stdout
Write-Host "{0} jest dostępny pod adresem {1}. Informacja z dnia: {2:d}." -f $a, $b, $c
łańcuch parametryzowany
Write-Host "$a jest dostępny pod adresem $b. Informacja z dnia: $c"
to samo
Write-Warning
ostrzeżenie
Write-Error
błąd
Out-Printer
wypisuje do drukarki
Out-File myfile.txt
wypisuje do pliku

Formatowanie

Jeżeli potoku nie kończy wywołanie funkcji formatującej, PowerShell automatycznie przekazuje dane cmdletowi Out-Default, który używa predefiniowanego formatowania zapisanego w pliku XML w
katalogu instalacyjnym PowerShell.

out-default
formatowanie standardowe
out-host -p
formatowanie standardowe z podziałem na strony
out-null
/dev/null
format-wide
lista dwukolumnowa
format-list
lista szczegółowa
format-table
tabela
Get-Process | Format-Table -p id,processn*,working*
wskazane kolumny opisu procesów
Get-Process | Select-Object id, processn*, working* | Format-Table
to samo
out-gridview
siatka danych windows forms

Uniwersalny model nawigacji

Get-PSDrive
pokazuje różne repozytoria (system plików, rejestr, zmienne środowiskowe, certyfikaty, zmienne/aliasy/funkcje PowerShella) z jednolitym sposobem dostępu do składowych
Set-Location
zmiana katalogu bieżącego (alias cd)
cd hklm
\software: przejście do klucza rejestru
Get-ChildItem
lista obiektów podrzędnych (aliasy dir, ls)
Get-Content
wywołanie zawartości elementu (aliasy type, cat)
New-Item
tworzenie elementu (alias mkdir)
mkdir IT-Visions
tworzy katalog/klucz rejestru o podanej nazwie
New-Item -Name "Witryna" -Value "www.IT-Visions.de" -type String
tworzy klucz rejestru (liść) o podanej nazwie
Get-Location
informacja o katalogu bieżącym (alias pwd)

Z UNIXowego shella mamy znaczenie symboli ., .., ~, []

$p = @(get-process)
wynik polecenia get-process (kolekcję procesow) przypisujemy do zmiennej p

Zmienne mogą mieć zadeklarowany typ (będący klasą .NET):

  $a = [int] 5
  $a = [System.DateTime] "1972-8-1"
foreach ($element in $kolekcja) { write-host $element }
iteracja elementów kolekcji
Function Temp { Get-ChildItem C:\temp }
definiowanie funkcji

Bibliografia

<

ul>

  • Windows PowerShell. Podstawy, H.Switchtenberg, Helion 2009,
  • Linux Magazine, Nr 3(73)/2010.
    Share and Enjoy:
    • del.icio.us
    • Facebook
    • Google Bookmarks
    • Śledzik
    • Blip
    • Blogger.com
    • Gadu-Gadu Live
    • LinkedIn
    • MySpace
    • Wykop
  • Zostaw komentarz

    XHTML: Możesz użyć następujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>