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).