| 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í?
- rozhodně si nedávejte Windows Management Framework 3.0, protože to je cesta do pekel.
- 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.
|