sobota 19. prosince 2009

PowerShell – formátování výstupu,roura

V tomto dílu se podíváme na rozdílné možnosti výstupu toho co jsme zadali do PS.

Za prvé jde o praktičnost a za druhé o přehlednost.Poněvadž to má přímou souvislost s principem roury – anglicky pipe, popřípadě pipeline vrátíme se obloukem k tomu co PowerShell vlastně je.

PowerShell  obsahuje objektovou rouru namísto textové roury jako je tomu u UNIX shellu  - neboli je objektově orientován,z toho vyplývají i jiné možnosti při formátování.Viz  http://cs.wikipedia.org/wiki/Windows_PowerShell

Všimněte si prosím na videu příkazu format a jeho variant takže format-list a rozdíl ve výstupu oproti příkazu bez onoho format,hned po něm následuje příkaz fl a rozdíl?Žádný, fl je takzvaným aliasem pro format-list, aliasy si můžete vytvořit sami a svoje pro cokoliv.Takže je to věc Vaší kreativity jak bude výpis vypadat a co vlastně ve výpisu chcete mít.Export do souboru může být v různých formátech,například někdy později si ukážeme složitější výstupy do tabulky v Excelu,HTML a podobně.Jako poslední příkaz vidíte například možnost barevného rozdělení procesů kdy určíme hranici a kdo konzumuje více než X výstup bude dejme tomu červeně.

Roura zapojí více příkazů a jeden příkaz, předává svůj výstup dalšímu příkazu,ten dalšímu a to až do výsledku na obrazovce.

Jednotlivé příkazy nám odděluje jak vidíte na videu znak  |  .

Takže kreativitě se meze nekladou výhodu jednoznačnou v případě PS mají ti kdo ovládají některý NET jazyk.Vytvořit si cokoliv vlastního není velký problém.Pro inspiraci doporučuji stránky tohoto projektu http://www.powergui.org/kbcategory.jspa?categoryID=21

V některém z dílu se hodlám věnovat právě tomuto projektu podrobněji,rovněž se podíváme na PowershellPro , BGShell a jiné projekty které se k PowerShellu vztahují.

Mimochodem rozhodl jsem se udělat podstatnou změnu při tvorbě videa které ukazuje výstupy použitých příkazů,je celkem stylové že v tom pomohl právě PowerShell.Našel jsem script který napsal Jeffrey Snover a použil ho při prezentaci možností PowerShellu před Billem Gatesem a Rayem Ozziem.Script samozřejmě je dnes upraven kdo chce vědět co umí  a jak se s ním pracuje navštivte http://blogs.msdn.com/powershell/archive/2007/06/03/new-and-improved-start-demo.aspx

Původně jsem chtěl v tomto díle ukázat práci s klávesovými zkratkami – nakonec jsem se rozhodl toto vynechat uplně,kdo PowerShell spustí bude prostě nucen se je naučit.Práci s historií a práci s chybovými hláškami ponechám na další díly.Tam už se budeme  věnovat věcem jako práce s sítí,disky, registry,právy-oprávněními,uživateli,hesly,eventlogem a mnoho dalšího.

Video

Seznam použitých příkazů

Get-Service | where {$_.Status -eq "Running"}
Get-Service | where {$_.Status -eq "Running"} |fl
Get-Service | where {$_.Status -eq "Running"}|format-list
Get-Service | where {$_.Status -eq "Running"} |format-table
Get-Service | where {$_.Status -eq "Running"} |ft
Get-Service | where {$_.Status -eq "Running"} |ogv
Get-Service | where {$_.Status -eq "Running"} | Export-Csv -path "D:\services.csv"
Get-Service | where {$_.Status -eq "Running"} | Export-Csv -path "D:\services.txt"
Get-Service | where {$_.Status -eq "Running"} |format-wide -column 8
$computer = "LocalHost"
$namespace = "root\CIMV2"
Get-WmiObject -class Win32_Service -computername $computer -namespace $namespace |ogv
get-wmiobject win32_service | format-table Name, StartMode -autosize
Get-Process | Where {$_.starttime -ge [datetime]::today}
get-process |fl -property name, basepriority, priorityclass

Get-Process |
   ForEach-Object `
      {if ($_.cpu -lt 100)
            {Write-Host $_.name, $_.cpu -foregroundcolor white}
      elseif ($_.cpu -gt 100)
            {Write-Host $_.name, $_.cpu -foregroundcolor red}}

Odkazy

http://www.powergui.org/kbcategory.jspa?categoryID=21

http://blogs.msdn.com/powershell/archive/2007/06/03/new-and-improved-start-demo.aspx

http://cs.wikipedia.org/wiki/Windows_PowerShell

pondělí 14. prosince 2009

Powershell - processy

V tomto dílu se budeme věnovat základním ukázkám práce s procesy v PowerSshellu,dále jen PS.

Poněvadž zde budou ukázky možností výstupu a práce s operátory nejprve trochu suché teorie.V dalších dílech až budeme probírat možnosti “roury” se k operátorům i k typům výpisu ještě vrátíme.

Porovnávací operátoři:
-eq     = (equal)
-lt     <
-gt     >
-ge     >=
-le     <=
-ne     nerovná se (not equal)
-like     porovnání s výrazem se zástupnými znaky
-notlike     negace porovnání s výrazem se zástupnými znaky
-match     shoda s regulárním výrazem
-notmatch     neshoda s regulárním výrazem

Logičtí operátoři:
Jméno  -    význam
-not     negace
!     negace
-and     a (logický součin)
-or     nebo (logický součet)

Než přistoupíme k ukázkám co vlastně umožnuje spustit PowerShell ?

Spustitelný program
Jak jsme viděli v minulem díle napíšeme  "notepad", spustí se program Notepad.
CmdLet - Vnitřní příkaz
Např. cmdlet "Get-Location", který nám vypíše aktualní pozici v souborovém systému.
Vyhodnotitelný výraz
Např. "11+25".
Funkce
Soubor se skriptem
Alias

Alias
Například "ls" a "dir" ukázka aliasů  k "Get-ChildItem"

To by jsme měli základy,větvení,funkce a podobné věci ,k nim pokročíme později.

Základní příkazy

Get-Process
Start-Process
Stop-Process
Wait-Process
Debug-Process

A nyní co vlastně dnes ukážeme.Příkaz get-process který nam ukáže jaké processy nám běží a ted prosím si všimněte pokud zadáme

$a = get-process

get-process -inputobject $a | format-table -view priority

Jak vypadá výpis,jak máme procesy seřazeny.

Možností je mnoho,postupně jak budeme možnosti PS zkoušet se dostaneme k dalším.

Napřiklad

get-process powershell –fileversioninfo

A hned máme jasno :-)

Nemá význam popisovat všechny možnosti,spoustu si jde sám ozkoušet pomocí nápovědy z níž některé příklady čerpám,jenom bych dodal pomocí PowerShellu můžete hromadně spouštět,zastavovat procesy,spouštět po startu s rozdílnými prioritami hromadně,spolupráce s plánovačem ůloh a eventlogem je samozřejmostí – tomu hodlám věnovat samostatnou kapitolu.

Ve videu uvidíte výpis PowerShellu který rourou posíláme do ogv neboli Out-GridView

To je důvodem proč jsem na začátku článku vzpomínal operátory – nastavte filtr na rovno,větší než,jak se Vám chce a můžete si hrát.Nebo si jenom klikejte na horní lištu podobně jako v task manageru.Dalšími možnostmi výstupu je například txt,excel,csv,xml.

Takže není problem poslat si výpis na 3 procesy nejvíce vytěžující PC,procesy spusštěné dnes při startu,procesy začinající na a protože nás zajímá jen dejme tomu Avast kterému tam běží 3 procesy – všechny začínají na a.

Pokud Vás zajímají pouze  procesy, které byly v provozu méně než X minut můžete je najít například takto:

Get-Process | Where-Object { $_.StartTime -gt `
(Get-Date).AddMinutes(-180) } | Format-Table

Stále jde o opravdu základy práce s procesy,možností je o hodně víc a hlubších.

Myslím že pro dnešek by praktické ukázky stačily ,v příštím díle se vrátíme na začátek a popíšeme si klávesové zkratky pro urychlení práce s PS,formátování textu,typy výstupu a v neposlední řadě práci s historií a můj soukromý tip na ulehčení práce s historií.

A absolutně klíčovou věc práci s chybovými hláškami,osobně si myslím že vnímavý člověk je schopen ji definovat bez jakýchkoliv zkušeností s PS.

Video



Seznam použitých příkazů

get-process
get-process *
get-process help
get-process -name a*
start-process Ccleaner
Stop-process -name Ccleaner
Get-Process | sort CPU | select -last 5


Get-Process | sort CPU | select -last 2|ogv

$a = get-process
get-process -inputobject $a | format-table -view priority


Get-Process | Where-Object { $_.StartTime -gt `
(Get-Date).AddMinutes(-180) } | Format-Table