K Vánocům jsem si pořídil novou knihu o PowerShellu – Best Practices. Autorem je Ed Wilson AKA Scripting Guy. Rozhodně se nejedná o žádnou brožuru do kapsy (narozdíl od například PowerShell Administrator’s Pocket Consultant), má 752 stran a váží víc než můj netbook.
Kniha je rozčleněna do pěti částí (17. kapitol + 6 příloh) a obsahuje CD, na kterém jsou popisované skripty a několik dalších informací. Kniha není určena pro začátečníky. Předpokládá, že znáte základy a ve skriptech nevysvětluje použité konstrukce. Na druhou stranu – pokud jste alespoň o trochu chápavější než dlažební kostka, nebudete mít většinou s pochopením problém a chybějící informaci si dohledáte například v nápovědě.
Na stránkách Microsoft Press si můžete přečíst, jak je kniha členěna (anglicky).
Část 1. – Úvod
Tato část je rozdělena do čtyř kapitol. První dvě se věnují opravdu základům PowerShellu. Novým cmdletům (práce s WMI, *-Computer, …), případně novým parametrům starých cmdletů (např. parametr -ComputerName). Další dvě kapitoly se věnují (pro mne překvapivě) práci s Active Directory včetně ukázky práce s databází nebo Excelem (pro účely importu dat). Pro všechny příklady jsou bohužel použity akcelerátory [ADSI] a [ADSiSearcher] a není zde zmínka od AD cmdletech. Chápu, že ne všichni mají doménu s Windows 2008 R2 serverem, ale osobně bych tyto dvě zmiňované kapitoly oželel. V této části se objevuje i další neduh – osobně nepotřebuji výpisy na tři strany, které dostanu na konzoli jednoduchým příkazem, např. Get-WmiObject Win32_Process | Get-Member.
Část 2. – Plánování
Zde začínám opět výtkou. V knize nazvané Best Practices bych nečekal použití RegRead. Proč??? Pokud lidem ukážeme, že mohou v PowerShellu “používat syntaxi z VBS”, těžko pak budou hledat důvod pro přechod. V prvním příkladu této kapitoly je krásně ukázán největší neduh knihy – opět se vracím k VBS – PowerShell skript s VBS syntaxí. Uvedu jej celý:
$path = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine"
$psv = Get-ItemProperty -Path $path
$psv.RunTimeVersion
Chápal bych tento příklad v kontextu vysvětlení, že jej lze napsat lépe (i bez ztráty čitelnosti), například takto:
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine" -Name RunTimeVersion
nebo po prostudování nápovědy takto:
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine" RunTimeVersion
a pokud chcete opravdu jen číslo verze, není problém použít následující kód:
(Get-ItemProperty -path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine).RunTimeVersion
Zbytek kapitoly se věnuje zjišťování verzí .NETu nebo operačního systému. V další kapitole se mluví a profilech, vytváření funkcí, proměnných, PSDrives (mimochodem tomuto tématu se věnuji v dalším díle seriálu pro TechNet Flash). Další kapitola ukazuje WMI, registry (konečně je zde ukázáno “správné” řešení příkladu z první kapitoly, ale s poznámkou, že řešení je matoucí – nechápu!) Na konci kapitoly je letmo zmíněna .NET třída System.Math a zbytek kapitoly okupuje opět COM (příklad tvorby CAB souboru).
V poslední kapitole je ukázán cmdlet Invoke-Command a poté opět Active Directory. [ADSISearcher], ds* příkazy (proč?) a konečně zmínka a AD cmdletech (ukázán je ovšem pouze jediný). Konec kapitoly je věnován benefitům skriptů.
Část 3. – Design
V návrhu funkcí jsou probírány například vstupní parametry nebo filtry a poté navazuje kapitola o tvobě nápovědy, včetně třinácti pravidel pro psaní efektivních komentářů. V následující kapitole jsou probrány moduly a také tvorba nápovědy pro funkce (?). V další kapitole je ukázána práce se vstupem a výstupem a popsány novinky v PowerShellu v2 z hlediska advanced functions. Ukázána je dále práce s heslem (uložení do souboru, registru, …) a výstupy (soubor, obrazovka). Poslední kapitola se věnuje ošetřování chyb ve skriptech. Osobně bych očekával větší ukázku použití konstrukce try-catch-finally.
Část 4. Testování a nasazení
Popisuje testování z různých pohledů, jako například rychlost nebo komplexnost. Dále jsou popsány parametry Debug a WhatIf. V části nazvané spouštění skriptů je ukázáno jak změnit ExecutionPolicy nebo pracovat s číslování verzí. Vyloženě výsměchem je část nazvaná Understanding Code Signing – na jedné straně se dozvíte, že existuje cmdlet Set-AuthenticodeSignature, ale o jeho použití se nedozvíte vůbec nic (zato jsou ukázány dva screenshoty).
Část 5. – Optimalizace
Tato část je rozdělena na dvě kapitoly. V první je ukazováno logování do souboru, event logu a registru. Poslední kapitola se věnuje debugování pomocí Set-PSDebug a cmdletů *-PSBreakpoint.
Přílohy
Obsahují kapitoly: Seznam cmdletů, Common Verbs, Useful COM Objects, Useful WMI Classes, Useful .NET Classes, WMI Error Messages.
Shrnutí mých dojmů
Z prědchozích řádek je asi jasné jaký bude můj závěr. Musím říct, že kniha mě zklamala. Měl bych dvě hlavní výtky: 1) Knihou prostupuje stín VB Scriptu 2) Obsah mi přijde řazený značně chaoticky – některá témata jsou ukázána na různých místech a pokud si chcete přečíst informace (např. o AD), najdete je “rozházené” po knize. Na to množství stran, si myslím, že užitečných informací je v knize žalostně málo. Pokud čtete help a sledujete blogy, moc nového si neodnesete. Rozhodně se nejedná o žádné Best Practices. Na druhou stranu, každá propagace PowerShellu je dobrá a pokud tato kniha přítáhne k PowerShellu víc lidí, bude to jen dobře. Dobrým počinem knihy jsou i vložené "Inside Track" od lidí jako např. Jeffrey Snover, Brandon Shell a další.
Za oficiální cenu 60 dolarů (38 na Amazonu) si nemyslím, že je tato kniha rozumnou investicí. Rozhodně bych spíše doporučil počkat do konce ledna na Windows PowerShell 2.0: TFM od Sapien Press ($35 za ebook nebo $42 za tištěnou knihu).
4 komentáře:
AD cmdlety vs. akceleratory? Divne, cekal bych, ze bude (pokud mozno) pouzivat v podstate nativni veci jazyka (coz jsou cmdlety).
Neni to mozna tim, ze nejsou primo v Posh z instalace? (predpokladam, get-command mi je nevratil; jinak s tim nedelam). Aha, v dalsim odstavci ctu, ze se o nich zminuje, hmm...
==
RegRead - to je nejaka vbskovina? :) Fuj.
==
K tomu největšímu neduhu:
1) u sebe bych se nedivil, ze neznam parametr -Name (duvod viz bod #2). Pokud ale nevi Ed, je to spatne.
2) jsem programator, takze pro me je nativnejsi syntaxe '(get neco).property' (vraci hodnotu) nez 'get neco -name property' (vraci PSCustomObject) - tj. tak divny mi to neprijde. Duvod: vetsinou pracuju primo s hodnotami promennych nez s jejich zabalenymi verzemi v nejakych Ps(Custom)Object.
V pripade ale, ze tech props muze byt hodne, tak je fakt, ze neuvedeni -name muze mit vliv na vykon, co?
==
ta tvorba napovedy pro funkce bude ty s [CmdletBinding()]?
==
u security (podpis kodu) bych asi cekal vice info... (proc, jak na to, pripadne jak na automaticky podpis jako mel tusim Jayukl). A taky info, proc to nemit uplne vypnuty a jak a kdy vypinat. Ja to mam porad unrestricted (ale nejsem cilova skupina PowerShellu).
==
pokud je tam vicekrat nejaky vypis (jako z Get-WmiObject Win32_Process | Get-Member), neni divu, ze ma tolik stran ;)
--------
Osobne se tesim na Posh in Action, ale kdesi jsem videl, ze se snad ma zpozdit :(
Diky za recenzi. Sice bych si ji nekoupil, ale aspon nemusim litovat...
Diky za comment.
ad 1) Podle me je to tim, ze proste ve VBS se to delalo takhle a s Edem se to tahne. Ja bych cekal bud zadny AD (coz by ciste PowerShell knizce davalo smysl) nebo cmdlety.
ad 2) jojo :)
ad 3) Nevim, jestli nevi - spis na to fakt neni zvyklej - a jsme zase u VBS. Pro me osobne (ac neprogramatora) se casem taky stalo nativnejsi (hezky cesky slovo :) "(get neco).property" z duvodu, ktery zminujes - vetsinou chci nejakou hodnotu a ni dal pracuju. V pripade vice properties asi budes mit pravdu, protoze (get).prop vrati celou sadu a pak vybere konkretni prop.
Vsuvka: Ted jsem to zkousel a u WMI je to tak - s parametrem -Property zhruba 2,5x rychlejsi nez pri (get).prop
ad 4) napoveda typu <# .SYNOPSIS - .EXAMPLE #> pokud me pamet neklame, tak CmdletBinding, jsem v cely knize nepotkal (ale ruku do ohne bych za to nedal)
ad 5) skoda mluvit. I kdyz o ExecutionPolicy tam toho bylo o trochu vic.
ad 6) co dodat
Na PowerShell in Action fakt nic nema - pro zacatecnika je hodne nestravitelna (vim, cetl jsem ji jako prvni :), ale po par mesicich uz je to lepsi. I tak je to ale knizka, kterou stale nechapou celou (ale napr. vic nez TAOCP :))
S tim [CmdletBinding()] - vypada to, ze neni k napovede potreba. Jen pro upresneni, trochu me to asi zmatlo ;)
Btw. projit tu knizku v tak kratkym case, to teda klobouk dolu.
Dnes uveřejnil Ed Wilson na webu MS Pressu následující příspěvek: http://blogs.msdn.com/microsoft_press/archive/2010/01/14/ed-wilson-developing-windows-powershell-best-practices-book.aspx
Jen pro info, jedná se o kompletní odpověď, kterou mi poslal před pár dny mailem jako reakci na mé hodnocení knihy. Myslím, že je zajímavé si ji přečíst.
Některé z reakcí chápu, některé už méně, nicméně naše konverzace pokračuje dál, takže možná přijdu opět s nějakým updatem.
Okomentovat