Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Hlavně neinstalujte Windows Management Framework 3.0 (PowerShell 3.0) na Exchange server
březen 19
Hlavně neinstalujte Windows Management Framework 3.0 (PowerShell 3.0) na Exchange server

Ach jo, zase nejde aktualizovat nějaký Exchange.

Pozóooor. Nikdo neinstalujte nový Windows Management Framework 3.0 ani na Exchange Server, ani na System Center, ani na SharePoint, dokonce ani na Unified Access Gateway (UAG), ani ideálně nikam jinam. Obsahuje to nový PowerShell 3.0, jenže to je právě cesta do pekel. PowerShell 3.0 mění určité syntaktické věci a není úplně zpětně kompatibilní se starším PowerShell 2.0.

Funkce programů jako je Exchange, System Center i SharePoint je velmi provázána s různými PowerShell skripty PS1, které jsou ale napsané pro PowerShell 2.0 a možná nefungují s jeho novějším bratříčkem. Dokonce je k tomu oficiálně napsáno, že Windows Management Framework 3.0 není podporován s těmito aplikacemi:

Windows Management Framework 3.0 on Exchange 2007 and Exchange 2010
Windows Management Framework 3.0 Compatibility Update

Už jsem si to dvakrát užil se SharePoint 2010, jednou s UAG 2010 a zrovna tu řeším problém, proč nelze instalovat žádnou aktualizaci na Exchange 2010:

Event ID: 1023
Event Type: Error
Event Source: MsiInstaller
Message: Microsoft Exchange Server - Update 'Update Rollup for Exchange Server 2010 Service Pack 2' could not be installed. Error code 1603.

Zkoumal jsem jestli to třeba není tímto, ale není. Ve skutečnosti jsem zjistil v MSI logu (chyby jako 1603, 0x80070001, CAQuietExec Failed apod.), že je to opravdu záležitost toho, že nepracujse správně ani ServiceControl.ps1 BeforePatch:

MSI (s) (14:B8) [20:26:50:219]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI9284.tmp, Entrypoint: CAQuietExec
MSI (s) (14!90) [20:26:50:219]: Creating MSIHANDLE (379) of type 790531 for thread 8080
CAQuietExec:  "C:\Program Files\Microsoft\Exchange Server\V14\\bin\QuietExe.exe" "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" " -command . 'C:\Program Files\Microsoft\Exchange Server\V14\\bin\servicecontrol.ps1' BeforePatch"
MSI (s) (14!90) [20:26:50:219]: Closing MSIHANDLE (379) of type 790531 for thread 8080
MSI (s) (14!90) [20:27:00:672]: Creating MSIHANDLE (380) of type 790531 for thread 8080
CAQuietExec:  Error 0x80070001: Command line returned an error.
MSI (s) (14!90) [20:27:00:672]: Closing MSIHANDLE (380) of type 790531 for thread 8080
MSI (s) (14!90) [20:27:00:672]: Creating MSIHANDLE (381) of type 790531 for thread 8080
CAQuietExec:  Error 0x80070001: CAQuietExec Failed
MSI (s) (14!90) [20:27:00:672]: Closing MSIHANDLE (381) of type 790531 for thread 8080
CustomAction CA_SAVEDATA_STOP_SERVICES returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)

Když jsem si ten skriptík zkusil spustit ručně, tak jsem dostal tyhle hlášky:

PS C:\Program Files\Microsoft\Exchange Server\V14\Bin> .\ServiceControl.ps1 BeforePatch
Write-ExchangeSetupLog : At C:\Program Files\Microsoft\Exchange Server\V14\Scripts\ManageScheduledTask.ps1:459 char:5
+                 return $success
+                 ~~~~~~~~~~~~~~~
Control cannot leave a finally block.
At C:\Program Files\Microsoft\Exchange Server\V14\Bin\ServiceControl.ps1:647 char:4
+             Write-ExchangeSetupLog -Error $entry
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Write-ExchangeSetupLog], ParseException
    + FullyQualifiedErrorId : CB8B3CC3,Microsoft.Exchange.Management.Deployment.WriteExchangeSetupLog

At C:\Program Files\Microsoft\Exchange Server\V14\Scripts\ManageScheduledTask.ps1:459 char:5
+                 return $success
+                 ~~~~~~~~~~~~~~~
Control cannot leave a finally block.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ControlLeavingFinally

Prostě to není kompatibilní s PowerShell 3.0 a nesmíte tam mít tedy Windows Management Framework 3.0.

Jak zjistíte, jestli máte PowerShell 3.0? Takto, použijte Get-Host:

PS C:\> get-host

Name             : ConsoleHost
Version          : 3.0
InstanceId       : 44dd6e73-c98c-4f9e-9917-2afbda220527
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : cs-CZ
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

Řešení?

  1. rozhodně si nedávejte Windows Management Framework 3.0, protože to je cesta do pekel.
  2. jestli ho tam už máte, tak ho odinstalujte. Je to záplata KB2506143, najdete to v sekci Microsoft Windows. Bude to chtít restart, ale to neva, stejně byste to museli otočit po instalaci té záplaty na Exchange. Úspěšnost odinstalace můžete zase zkontrolovat pomocí Get-Host, musíte tam vidět Version = 2.0 - mě se to na poprvé nepodařilo, nechápu, prostě to chtělo odebrat dvakrát.

 

Comments

There are no comments for this post.

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