Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Proč PowerShell 3.0 není úplně kompatibilní s PowerShell 2.0
březen 20
Proč PowerShell 3.0 není úplně kompatibilní s PowerShell 2.0

Zrovna včera jsem tu psal o problému, který mají Exchange, SharePoint, System Center, UAG a další s novým PowerShell 3.0. Já jsem napsal za poslední rok cca 11 000 řádků PowerShell kódu a neměl jsem s přechodem skoro žádné problémy. Prostě jsem svoje starší kódy spustil na verzi 3.0 a šlapou jako hodinky.

Rozhodně je ale moje zkušenost tato - pokud to jede ve verzi PowerShell 2.0, tak to jede spolehlivě na PowerShell 3.0 taky. To byl zřejmě i cíl pánů vývojářů, protože novinky jsou přidávány jen velmi citlivě. Ano, některé věci, které jdou v PowerShell 3.0, samozřejmě nepojedou ve starší verzi, ale opačně mi to prozatím žádné problémy nedělalo.

Tak co tam sakra může mít ten Exchange za problém? Menší průzkum objevil třeba toto:

function Vracej-Cislo ()
{
  try {

    Write-Host 'Tohle jenom vraci cislo'
  }

  finally {

    return 17
  }
}


Vracej-Cislo

Přechozí skriptík funguje úplně v pohodě na PowerShell 2.0, zatímco v nové verzi dostanete chybovou hlášku Control cannot leave a finally block:

At line:7 char:5
+     return 17
+     ~~~~~~~~~
Control cannot leave a finally block.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ControlLeavingFinally

Zkoušení

Kdybyste to potřebovali vyzkoušet, ani nemusíte shánět stroj s Windows 7, nebo Windows 2008 R2. Pokud máte "jen" PowerShell 3.0, můžete si spustit i starší verzi. Na to je parametr -version. Zkontrolovat to můžete vzápětí pomocí Get-Host

powershell -version 2.0
get-host

Tak pozor. Není to vždycky tak hladce kompatibilní, jak by se mohlo na první pohled zdát.

Aktualizace: Další podobnou "chybku" má například příkaz switch.

Comments

Re: Proč PowerShell 3.0 není úplně kompatibilní s PowerShell 2.0

nemesis on 20.3.2013 14:42

Re: Proč PowerShell 3.0 není úplně kompatibilní s PowerShell 2.0

a tak jsme dneska vyřešili ještě podobný související problém:

WinRM IIS Extension Error: Attempt to install WinRM IIS Extension failed with error code 0x80070819. Unknown error (0x819)

http://social.technet.microsoft.com/Forums/cs-CZ/windowsservercs/thread/b80a2855-1c20-41ab-a572-69b90a1b2594/
ondass on 3.4.2013 12:12

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments