K tomu, aby člověka PowerShell začal zajímat je celá řada důvodů. Pro nás (čti “lidé zajímající se o programování”) to bude bezesporu objektový přístup, založení na .NET frameworku a možnost rozšiřování pomocí .NET sestavení. Jinými slovy tu je konečně pořádný skriptovací nástroj pro pokročilé administrátory a vývojáře… ale… srazili se tu 2 proudy – programátoři a administrátoři – moderní vývojové prostředky s zaběhnutými principy příkazové řádky. Jak to asi dopadlo a co “nás” na výsledku bude odpuzovat nejvíce? Sepsal jsem 7 chuťovek, které nejen programátora úplně nepotěší.
1. Nefunguje vzdálený přístup
Možná sice existují rozšíření třetích stran, ale vzdáleného přístupu v PowerShellu 1.0 se prostě nedočkáte. Už jenom tento fakt vyčaroval na tváři nejednoho IT člověka nedůvěřivý pohled. Nezbývá, než se připojit vzdálenou plochou.
2. Porovnávací operátory známé například z C# nebo Visual Basicu tu nenajdete
Operátory >, <, >=, <=, =, či == si v PowerShellu musíte odpustit. Místo toho využijte zkratky, například $promenna –eq $promenna (eq = equals, rovná se). Nevím jak vy, ale já si na to ne a ne zvyknout.
3. Mezi parametry funkcí jsou mezery
Parametry funkcí oddělujte mezerou. Při psaní deklarace funkce je nutná ale čárka. Navíc pokud na to zapomenete a čárky při volání stejně použijete, není to chyba, jen parametry předáte jako pole a tím pádem to nebude fungovat. A pokud PowerShell dobře neznáte, tak budete pěknou chvilku na monitor tupě koukat a marně hledat chybu.
function funkce1 ($a, $b)
{ …
}
funkce1 $a $b
4. Chytání vyjímek
Nebudu to protahovat. Powershell nemá try { } catch { } finally. Má trap. Definujete, který typ výjimek, který když nastane, váš kód zpracuje. Je to opak toho, co znáte z C# nebo VB. A ano, dělá mi to problémy. Více o trap na tomto webu.
5. Spouštění ps1 souborů
Je celkem obvyklé, že si uložíte svůj script do souboru, který budete chtít spustit. Pro velký úspěch vás čekají hned 2 problémy. Tím prvním je to, že script nebude podepsaný – a nebude jej tedy možné podle PowerShellu z bezpečnostních důvodů spustit. Je proto nutné zapsat tento příkaz do PS řádky spuštěné jako administrátor:
Set-ExecutionPolicy remotesigned
Od teď již lokální skripty nemusí být podepsané a můžete je v klidu volat. Jenže přichází druhé ale… Normální smrtelník očekává, že spustí powershell.exe s parametrem cesty k souboru ps1 (přípona pro PowerShell skripty) a script se vykoná. Bohužel to tak nemusí být. Za odměnu na vás vybafne další rudá hláška. Tentokrát se dozvíte, že PowerShell tento příkaz “jménoScriptu.ps1” nezná. To vyřešíte uvedením buď celé nebo relativní cesty (každopádně je nutné dát vědět, že se jedná o soubor a ne příkaz):
powershell.exe “c:\todel\mujScript.ps1”
Nebo:
powershell.exe “.\mujScript.ps1”
6. Absence intellisense
První verze powershellu má velmi omezený intellisense. Dokáže pouze doplňovat základní příkazy cesty. Nikoliv však výčtové parametry, či při práci s .NETem. Bohužel.
7. Windows Server 2008 Core bez PowerShell
Tohle je sice problém Windows Serveru, ale i tak stojí za zmínku. Microsoft se chvástá osekanou verzí serverového systému s označením Core. Je bez grafického prostředí a tak vás musí napadnout, že správa pomocí PowerShellu je pro něj jak dělaná. Bohužel není. Windows 2008 Core nepodporuje .NET a proto na něm ani nerozběháte PowerShell jakožto nástroj postavený nad .NETem. Smůla.
Závěr
Všechny tyto informace se vztahují k PowerShellu 1.0, je možné, že další verze mají již některé záležitosti řešené jinak. PowerShell mám rád a většina věcí, co jsem uvedl nejsou chyby nebo nedodělky - jen přístup, na který si jen tak nezvyknu. Děkuji @borekb za nakopnutí k napsání příspěvku!