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

Sorry comments are disable due to the constant load of spam *


Omlouvám se, ale příval spamu nelze kontrolovat, takže mi prosím pošlete email, pokud máte nějaký dotaz, nebo připomínku.

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 *


Email


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

Attachments