Скрипт для получения информации о версии Exchange и установленных Rollup Update

Обнаружил, на мой взгляд,  интересный скрипт, для получения информации о версии Exchange и установленных на нем накопительных пакетов обновлений (Rollup Update). За скрипт спасибо Jason Sherry, а также авторам более ранней версии скрипта Jeff Guillet’s и Paul Faherty.

Этот скрипт выводит на экран список всех серверов, установленных в организации Exchange, с указанием: имени сервера, установленных ролей, основной версии Exchange, а также список установленных на сервере накопительных пакетов обновлений (Rollup Update).

Get-ExchangeServerVersion

Этот скрипт полезен тем, что позволяет узнать различия в установленных обновлениях на серверах Exchange  в организации, если по каким-либо причинам такое могло произойти.  Для того, чтобы запустить скрипт достаточно его запустить на машине с установленным Exchange Management Shell или на одном из серверов Exchange.

Данный скрипт корректно работает для версий Exchange 2007, 2010 и 2013.

# This script will get the Exchange 2007+ version and Update Rollup numbers
# Source: http://izzy.org/scripts/Exchange/Admin/Get-ExchangeVer.ps1

# Created by Paul Flaherty, v 1.2 source from Jeff Guillet 9/17/2009
# Orginal source: http://www.expta.com/2009/05/powershell-script-to-get-exchange.html

# Modifed by Jason Sherry | Last Updated: 10/22/2012 | Version 1.2
#   05/15/2011 1.1 - Added logging to a file
#   12/27/2022 2.0 - Changed code to match latest 1.2 code from Jeff Guillet and added support for Exchange 2010 and 2013

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

 #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
  $txt1 = $MsxServer.Name + " [" + $MsxServer.ServerRole + "] [" + $MsxServer.Edition + "] " + $MsxServer.AdminDisplayVersion #$MsxVersion.ExchangeBuild.toString()
  $txt1 | Out-File -FilePath $FileName -Append
  write-host $txt1

  $Version= $MsxServer.AdminDisplayVersion
    If ($Version -Like "Version 8*") {
      $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\461C2B4266EDEF444B864AD6D9E5B613\Patches\"
        $Version = 2007}
    If ($Version -Like "Version 14*") {
      $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\AE1D439464EB1B8488741FFA028E291C\Patches\"
        $Version = 2010}
    If ($Version -Like "Version 15*") {
      $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\AE1D439464EB1B8488741FFA028E291C\Patches\"
        $Version = 2013}

  #Connect to the Server's remote registry and enumerate all subkeys listed under "Patches"
  $Srv = $MsxServer.Name
  $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 patch
  $ErrorActionPreference = "SilentlyContinue"
  ForEach($sub in $regKey.GetSubKeyNames())
  {
   $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
    Installed = ""
        IF ($Subx -eq "Installed")   {
     $Installed = $SUBRegkey.GetValue($SubX)
     $Installed = $Installed.substring(4,2) + "/" + $Installed.substring(6,2) + "/" + $Installed.substring(0,4)
    }
        $DisplayName = ""
    IF ($Subx -eq "DisplayName") {
            $DisplayName = $SUBRegkey.GetValue($SubX) }
    If ($Installed -ne "" -And $DisplayName -ne "") {
        Write-Host "`t$Installed : $DisplayName" 
        "`t$Installed : $DisplayName" | Out-File -FilePath $FileName -Append }
   }
  }
   write-host ""
 }

Скачать скрипт можно по ссылке:

  Get-ExchangeServerVersion.zip (1,4 КиБ, 264 hits)

  Get-ExchangeServerVersion.ps1 (3,1 КиБ, 860 hits)

Конечно, существуют и другие способы определения установленных обновлений на Exchange, например:

  1. Просмотр информации об установленных продуктах на сервере: Control Panel –> Programs and Features –> View Installed Updates:

Installed Updates

  1. В Exchange Management Console открыть в меню Help –> About Exchange Server 2010

About Exchange 2010

  1. По версии файла ExSetup.exe, расположенного по умолчанию C:\Program Files\Microsoft\Exchange Server\V14\Bin:

ExSetup File Info

Однако для второго и третьего случаев можно определить версию крайнего обновления, хотя, наверное, это и есть необходимая информация. Но для того чтобы определить какой именно RU, был установлен придется воспользоваться таблице номеров билдов Exchange на странице: http://technet.microsoft.com/en-us/library/hh135098%28v=exchg.141%29.aspx или http://social.technet.microsoft.com/wiki/contents/articles/240.exchange-server-and-update-rollups-build-numbers.aspx

 

Как найти актуальные версии Microsoft Exchange server можно в статье: Exchange Server: версии билдов и даты релизов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.