středa 30. prosince 2009

PowerShell práce s Eventlogem

Dnes si ukážeme jak pracovat s Eventlogem.

Samozřejmostí je práce se vzdálenými stroji ale protože blog je o začínáme ,cmdletům,packům a příkazům které to umožňují se věnovat nebudeme.

Přímo ve videu je vložený popis a upozornění na princip roury,ukázka toho proč je to objektový shell.Filtrace které jsou ve videu předvedeny jsou ukázkové,můžete filtrovat doslova co chcete a z kterého okamžiku Vás výstup zajímá.

Pokud si projdete obzvláště pozorně nastavení Eventlogu a na nastavení plánovače úloh najdete přímo možnost a volby pro spolupráci s PowerShellem,takže například postup událost v EventLogu,přiřazení události k napřiklad plánovači úloh a následné přiřazení k scriptu v Powershellu není problém.

Viz – start programu,nedostatečná práva.No a my událost přiřadíme ke scriptu který požaduje spuštění programu s právy jaké nadefinujeme v dobu tu a tu a řekněme s prioritou vysokou.To je jen malá ukázka co můžete nekombinovat.

Další věc, ve videu uvidíte žádost o přistup do security.Pokud nespustíte Powershell jako admin objeví se Vám hláška přistup nepovolen.Takže si ho pro tento příkaz spustíte jako administrátor,ve videu z důvodu abych to nemusel dělat se celou dobu pohybuji jako Administrátor.Normálně v žádném případě není absolutně důvod.

Základní věc k práci s eventlogem.Spusťte si příkaz get-eventlog nebo get-eventlog systém ,záhy pochopíte proč je nutné pochopit jak filtrovat.No a při té příležitosti nezapomeňte k čemu slouží Ctrl-c a příkaz clear….

Video






Seznam použitých příkazů

get-eventlog –list

get-eventlog system

Get-eventlog Security

get-eventlog system -after (get-date).AddHours(-48) -EntryType Error,Warning | ogv

get-eventlog system -After (get-date).AddHours(-22248) -entryType Error,Warning  | ConvertTo-HTML -Title "Event Log Report" -postContent " Prepared $(get-date)" | out-file EventLogReport.htm

sobota 26. prosince 2009

PowerShell - kde to jsem?Historie

Dnes si ukážeme věc kterou samozřejmě zná každý.Pohyb po disku.Nicméně i tady uvidíte že můžete klidně pracovat tak jak jste byli zvyklí  s cmd ale opět se Vám nabízí pár bonusů pro vylepšení ulehčení.

Než se vrátíme ke krátkému popisu videa pár vlastností na které bych rád upozornil.

Takže zaprvé – perfektní vlastnost pro lajdáky jako já.get-memBer get-MEMBER GET-MEMBER gEt-MeMber , všechny příkazy jsou správně.

No a je zcela lhostejno jak usoudíte kde budou velká ,malá písmena ,case sensitive se nekoná.

Další vlastnost – cyklování tabem,určitě namítnete známe z cmd,nepoužitelné.PowerShell konečně je věc která to umí použitelně a inteligentně,doplňovaní a cyklovaní tabem.Takže fakt funguje get-pro* nebo get-pro a začít točit a doplňovat tabem ,tam a zpět.Ve videu vidíte novinku kterou jsem v prvních dílech ůmyslně deaktivoval – jde o PowerTab,komunitní projekt přidávající funkcionalitu kterou vidíte na videu.K dokonalosti to potom dovádějí projecty typu PowershellPro nebo jinak na to jde pro změnu BGSHELL – záložky.

Tak a teď zpět k pohybu po disku.Máme k dispozici všechny příkazy co známe z cmd – to je myslím samozřejmost, proč není třeba opět zdůrazňovat.A celou řadu nových.My si ukážeme jenom princip na videu, k příkazům pokročilejším se dostaneme v dílech které se budou věnovat například editaci registrů,mazáni souborů adresářů o nulové velikosti,starších než,zapsaných po atd...

Spustíme powershell a GET-LOCATION,NEBOLI KDE TO JSEM?Aliasem pro totéž je gl nebo známé z Unixu pwd.

Přesun jinam základní příkaz – cd takže cd D:

A ověříme pomocí gl kde jsme.Opravdu nemá význam prozatím dokud nezačne díl s vlastní prací se soubory,vytváření,mazání,prace s objekty vysvětlovat co je ../ při pohybu hledání,spouštění,jaké jsou všechny novinky a změny oproti pohybu v cmd.

Práce s historii – známé klávesy F3 a F5 nám zůstaly.Novinkou je, viz video jak pracovat s klávesami F7 a F9.Protože by to asi šlo těžko popsat ,ve videu je ukázka s vyhozením chyby – jde o to že předtím byl zadán script o velikosti dejme tomu 40 řádků.Pokud pomocí F9 budete chtít spustit příkaz – objeví se okno zadejte číslo příkazu.Vy víte že jste zadali script,poté dva příkazy a hledáte předposlední příkaz ,ocitnete se zcela jinde.

A to logicky.Powershell hledá zadání a co řádek skriptu to jedno zadání.Takže vhodnější je použít klávesu F7 kde Vám pěkně přehledně graficky vyběhne co jste předtím naťukali a odentrovat co chcete opakovat.Další možností je get-history a výpis bud na obrazovku nebo rourou do textového souboru.

Na konci vidíte opět základ jak rozumět chybě.Neboli může Vám vypsat že na řádku 56 a char 18 missing  “.Tak ho tam doplňte a script spusťte znovu.Nebo pouze bude žádat correct protože processiiii fakt nezná.a bude Vás opravovat od písmena kde je jisté že výstup nefunguje.Takže procesiii nebude znát taky a místo 18 char Vás upozorní na 17 dejme tomu.Prostě umazali jste jedno písmeno a následující syntaxe je taky špatně.

Takže to by bylo vše,protože máme probrané základy co je PowerShell od příštího dílu tady budou jenom praktické ukázky věnující se vždy pouze jediné věci a kdy přirozeným způsobem se tím pádem nabalí vysvětlení jak fungují záležitosti které nebyly ukázány nebo vysvětleny.

Video

Seznam příkazů

get-location

gl

pwd

cd X:

get-history

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

sobota 12. prosince 2009

PowerShell – profil a práce s nápovědou

Profily v PowerShellu [dále jen PS]

PS používá user profily.Je to script který se logicky musí spustit při každem spuštění PS.Ůkolem profilu je nastavení prostředí PS bezprostředně po startu,při spuštění PS dochází k načtení výchozí konfigurace ale i   nastavení pro jednotlivé uživatele.Tyto parametry se ukládají do uživatelského profilu neboli souboru profile.

Při startu PS může zpracovávat 4 takové soubory najednou maximálně.Polovina je vázaná na konkrétního uživatele systému,umístnění na konkrétní uživatelský profil v systému.

Neboli profil uživatele naleznete v Dokumentech ve složce PowerShell

Globální profil  - Windows\System32\WindowsPowerShell\

Konkrétně,nejprve ověříme zda profil pro uživatele skutečně existuje.

 

test-path -path $profile odpovědí je nám true,pravda takže ověříme kde.

$profile

Profil můžeme upravit a cest je k tomu několik.Například notepad $profile nebo edit $profile

Pro ty kteří si chtějí pohrát nastudujte příkazy set-alias a new-item –path

A tím se oklikou dostáváme k slibovaným základům práce s nápovědou v PS a protože základy, začneme s nápovědou pro nápovědu….

Neboli všimněte si rozdílů get-help,get-help –detailed,get-help –examples,get-help –full,get-help –full,get-help *

Použití napřiklad get-help –examples je v začatcích velmi užitečné protože vidíte vzorový přiklad z nějž si odvodíte jak má příkaz vypadat.

Video

 

 

 

Seznam použitých příkazů

test-path -path $profile

notepad $profile

$profile

edit $profile

get-help

 

Příště

Práce s procesy,roura,typy výpisů

středa 9. prosince 2009

Powershell - start

Co je windows powershell?

Jde o nové rozhraní pro ovládání operačního systému windows které využívá textovou konzoli,původně známo pod názvem Monad.Jak později uvidíme inspirací byl unixový shell a snaha mít podobný plnohodnotný nástroj i pro Windows.Samozřejmě možnosti poměrně široké byly i před příchodem powershellu – pomineme CMD a WSH a vzpomeneme na Services for unix a komplexní řešení ze světa open source cygwin.


Důvodem proč se věnovat powershellu je několik argumentů.


Serverové aplikace s ním počítají jako se samozřejmostí že ho budete používat,pro správu i lokálně bude v budoucnu pravděpodobně nejvhodnějším nástrojem.


Jednoduché zpřístupnění WMI,zpřístupnění možnosti využívat sílu platformy NET FRAMEWORK.


Vynikající nástroj pro výstupy,statistiky,inventury,tvorbu nejrůznějších vlastních přehledů bez nutnosti pořizovat, kupovat si nějakou aplikaci která dělá totéž a mnohdy hůř.


Objektová roura – tomu se budeme věnovat později.Nicméně tady je vidět jasná inspirace unixem a pokud Vás to bude zajímat a najdete si názory lidí kteří za powershellem stáli tak etalonem a inspirací pro ně byl jednoznačně unixový shell.


Poměrně solidní komunita s mnoha addony a hotovými scripty.


Nyní se budeme věnovat praktickým záležitostem.Administratoři na serverových platformách celkem jistě ví jestli powershell je nebo není součast systemu ve kterém pracují,jak se s ním pracuje a podobně.Pro ně proto není vůbec určen tento blog,je určen pro člověka který by chtěl zkusit windows z druhé strany ovladat,popřípadě zkusit si najít některe věci které by mu vyhovovaly z možností které mu dává powershell,nebo je prostě jenom zvědavý….


Takže pro Windows 7 je powershell již součástí systému,pro Windows Vista a XP je dostupný ve formě aktualizace systému.


Jak spustit…v připadě Seven,Vist políčko start,napsat powershell a nyní zastavím,poměrně důrazně bych doporučoval až na vás vykoukne možnost powershell odentrovat a spustit tak místo toho v připadě seven provést  akci upnout na hlavní panel,získáte tím par bonusů které Vám jak bude později popsáno poměrně usnadní práci s ním.V připadě Vist bych doporučoval  na plochu umistnit zástupce volby spuštění jako Administrátor.


Varianta  další využijeme cmd a napišeme powershell.


Nastavení výchozí bezpečnosti,politiky a práce s nápovědou


Rysem powershellu je opravdu striktní kontrola spouštění scriptů v defaultním nastavení – přesněji powershell scripty ktere si vytvoříme nebo stáhneme tedy mujscript.ps1,nebo mujscript.ps1xml si prostě nespustíme.Je nutné provést základní nastavení bezpečnostních politik.To se mění voláním cmdletu Set-ExecutionPolicy nás budou zajímat dvě možnosti.


První ..Set-ExecutionPolicy unrestricted pokud toto zadáme do Powershellu tak právě jsme se rozhodli že mu umožníme spouštět zcela cokoliv,tedy zodpovědnost za případné škody je jen na nás protože právě tak jsme to chtěli.


Daleko praktičtější bude použit volbu Set-ExecutionPolicy –ExecutionPolicy Remotesigned


Po zadání  nebude možno spouštět scripty vzdáleně uložené,s lokálními nebude problém.


V příštím díle začneme s praktickými ukázkami jak v powershellu pracovat,jak pracovat s vlastním profilem a základním pomocníkem pro orientaci což je jeho velmi kvalitní nápověda.


Na konci dílu následuje seznam videí které demonstrují použití scriptů,příkazů v daném dílu a seznam použitých příkazů.


Videa







Použité příkazy


Set-ExecutionPolicy


Get-Help