Como detectar a versão de Rollup Update instalada no Exchange Server 2007 ou 2010


Uma coisa que nós sempre nos questionamos quando fazemos uma visita, ou estamos em um caso de suporte é: “qual é a versão do Exchange Server e o Rollup que está instalado em seus servidores?”. Muitas vezes a resposta é: “claro, a versão do Exchange é 20xx, Service Pack X, mas o último Rollup eu não sei!”. Para muitos de nós, assim também como vamos ver em outros artigos, este valor do Rollup Update é muito importante. Para conhecê-lo, existem varias maneiras de se obter este valor, claro que cada uma delas tem suas vantagens e desvantagens.

Primero, utilizando a interface gráfica (GUI) é muito útil e você pode fazer através do Painel de Controle, Programas e Características. Como se pode observar na figura a continuação:

Selecionamos a opção “view installed updates” (Ver as atualizações instaladas):

Na próxima janela, podemos observar qual é o Rollup instalado, neste exemplo a figura mostra que nós temos o Rollup número 2 instalado neste servidor Exchange.

Existe alguma desvantagem neste processo? Sim existe, automação! Se você tem que fazer este mesmo processo em 5, 10 ou 50 servidores Exchange, você vai levar muito tempo para coletar a informação necessária. Para automatizá-lo existe a opção de realizar um script powershell.

A opção mais comum seria o comando Get-ExchangeServer, mas ele oferece unicamente a informação da versão do Exchange Server e não do Rollup instalado, para obter está informação, temos que conectar no registro do servidore e obter as chaves de registro de atualização do produto.

Para resumir a história, as chaves de registro são:

para Exchange 2007:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\461C2B4266EDEF444B864AD6D9E5B613\Patches\

e para Exchange 2010:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\AE1D439464EB1B8488741FFA028E291C\Patches\

O script que consulta estas chaves de registro para os servidores está detalhado a continuação. O importante é que este script está adaptado para coletar a informação do Exchange Server 2007 e do Exchange Server 2010.

#Get-ExchangeServerPlus.ps1 
#v1.3, 07/11/2011
#Written By Paul Flaherty, blogs.flaphead.com
#Modified by Jeff Guillet, www.expta.com
#modified by Gregorio Parra, blogs.technet.com


#Get a list of Exchange servers in the Org excluding Edge servers
$MsxServers = Get-ExchangeServer | where {$_.ServerRole -ne "Edge" } | where {$_.ServerRole -ne "ProvisionedServer" } | sort Name

#Loop through each Exchange server that is found
ForEach ($MsxServer in $MsxServers)
{

#Get Exchange server version
$MsxVersion = $MsxServer.ExchangeVersion

#Create "header" string for output
# Servername [Role] [Edition] Version Number
$majorver = $MsxServer.AdminDisplayVersion.Major
$txt1 = $MsxServer.Name + " [" + $MsxServer.ServerRole + "] [" + $MsxServer.Edition + "] [" + $MsxServer.AdminDisplayVersion + "] [Version:" + $majorver + "]"
write-host $txt1

#Connect to the Server's remote registry and enumerate all subkeys listed under "Patches"
$Srv = $MsxServer.Name
$key = ""

#define the registry key, depending on Exchange Version 2007 or 2010
if ($majorver -eq "8") # Exchange 2007
{
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\461C2B4266EDEF444B864AD6D9E5B613\Patches\"
}
if ($majorver -eq "14") # Exchange 2010
{
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\AE1D439464EB1B8488741FFA028E291C\Patches\"
}
$type = [Microsoft.Win32.RegistryHive]::LocalMachine
$regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $Srv)
$regKey = $regKey.OpenSubKey($key)

#Loop each of the subkeys (Patches) and gather the Installed date and Displayname of the Exchange 2007 patch
$ErrorActionPreference = "SilentlyContinue"
ForEach($sub in $regKey.GetSubKeyNames())
{
Write-Host "- " -nonewline
$SUBkey = $key + $Sub
$SUBregKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $Srv)
$SUBregKey = $SUBregKey.OpenSubKey($SUBkey)
ForEach($SubX in $SUBRegkey.GetValueNames())
{
# Display Installed date and Displayname of the Exchange 2007 patch
IF ($Subx -eq "Installed") {
$d = $SUBRegkey.GetValue($SubX)
$d = $d.substring(4,2) + "/" + $d.substring(6,2) + "/" + $d.substring(0,4)
write-Host $d -NoNewLine
}
IF ($Subx -eq "DisplayName") {write-Host ": "$SUBRegkey.GetValue($SubX)}
}
}
write-host ""
}

Se precisarem utilizar o script, ele está anexado a este post no blog.

 

Façam um bom uso dele!

Atenciosamente,

Raphael Barini

– Post original by GP traduzido pelo PFE de Exchange Server, Raphael Barini.

Get-ExchangeServerVersion-v1.zip

Comments (0)

Skip to main content