Chuťovky v Power Shellu 1.0 pro programátory

Tomáš Jecha, MVP, MCSD       16.09.2009       C#, VB.NET, Offtopic       11836 zobrazení

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!

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: Chuťovky v Power Shellu 1.0 pro programátory

Jen pár poznámek, protože už uplynulo relativně dost času a vyšla verze 2.0 :)

1. Nefunguje vzdálený přístup

Už funguje.

Invoke-Commans { iisreset } -comp mujserver

4. Chytání vyjímek

try, catch, finnaly můžete vesele používat

try { throw 'toto je chyba' } catch{ write-host $error[0] } finally { write-host 'finally' }

6. Absence intellisense

Psaní v command line je otrava. Dobře se pro mě osvědčilo PowerGui. Není to sice jako VS pro C#, ale např. to umí nabídnout .NETí metody, parametry cmdletu, atd.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Chuťovky v Power Shellu 1.0 pro programátory

Zvlášť pětka je poměrně nepříjemná - už vidím, jak nějakému kolegovi vysvětluju, jak ten zatracený skript spustit.

Jinak dík za sepsání poznatků!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback