by Arman Obosyan
7. December 2009 23:31
…и снова определяем установленные Update Rollup на наших (или чужих) серверах. Я уже как то раз затрагивал эту тему, но недавно наткнулся на ещё один интересный скрипт по определению установленных Update Rollup на Exchange Server-ах
Так выглядит output отработанного скрипта,


Немного модифицированная версия скрипта (спасибо ребятам из PowerShell_Ru v2.0 и Microsoft Exchange Server – Russia за советы)
$exservers = Get-ExchangeServer | ? {$_.ServerRole -notlike "edge"}
foreach ($ex in $exservers)
{
$version = (get-exchangeserver -identity $ex).admindisplayversion
$edition = (get-exchangeserver -identity $ex).edition
write-host " "
write-host "-----------------------------------------------------"
write-host " "
write-host "Exchange Server: $ex"
write-host $version
write-host "Edition: $edition"
write-host "Installed Update Rollups:"
$baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(’LocalMachine’, $ex)
$regKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\461C2B4266EDEF444B864AD6D9E5B613\Patches\"
$baseKey = $baseKey.OpenSubKey($regKey)
$Updates = $baseKey.GetSubKeyNames()
$array = New-Object -comObject System.Collections.ArrayList
ForEach($Update in $Updates)
{
$fullPath= $regKey + $Update
$UpdateKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(’LocalMachine’, $ex)
$UpdateKey = $UpdateKey.OpenSubKey($fullPath)
$values = $UpdateKey.GetValueNames()
ForEach($value in $values)
{
if ($value -eq "DisplayName")
{[void]$array.Add($UpdateKey.GetValue($value))}
}
}
$array | sort -desc
write-host " "
write-host "-----------------------------------------------------"
write-host " "
}
сам скрипт тут
Get-E12UpdateRollup.ps1
Updated, Для Exchange Server 2010 ключ
$regKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\AE1D439464EB1B8488741FFA028E291C\Patches\"
исправленый скрипт тут
Get-E14UpdateRollup.ps1

See also Exchange Server Update Rollup Version and Build Numbers Table (updates regular)