Виправляємо помилки установки оновлень Windows 7

Windows 7 і раніше залишається найпопулярнішою операційною системою в корпоративному середовищі, незважаючи на те, що вже вийшли дві нові версії клієнтських ОС. Розширена підтримка «сімки» закінчиться лише 14 січня 2020 р., а це означає, що найближчі 4 роки для неї будуть виходити оновлення, які виправляють виявлені вразливості.

Існує правило – якщо є оновлення, тобто і проблеми з їх установкою. Давайте розберемо, які основні проблеми виникають при оновленні Windows 7 Windows Server Update Services (WSUS) і як їх виправити з найменшими витратами.



Помилка #1. Failed to find updates with error code 80244010
Цю помилку ви практично гарантовано будете спостерігати на будь-якій системі, що вперше звернулася до сервера WSUS. У WindowsUpdate.log також зустрінеться попередження:
WARNING: Exceeded max server round trips
 

Причина проблеми в тому, що список оновлень став занадто великим, і клієнт не може прийняти його за один захід. Подробиці — blogs.technet.microsoft.com/sus/2008/09/18/wsus-clients-fail-with-warning-syncserverupdatesinternal-failed-0x80244010
Яке рішення пропонує Microsoft? Якщо після помилки запустити повторний пошук оновлень, то процес завантаження метаданих продовжиться з моменту виникнення помилки. Терпіння, панове, терпіння. Три, п'ять спроб
wuauclt /detectnow 
– і все владнається. Не забудьте при повторному пошуку дочекатися закінчення попереднього циклу пошуку, інакше магія не спрацює!

Помилка #2. Не встановлюються оновлення Windows з помилкою 0x80070308
Зустрічається епізодично, і в одному випадку із 100 у неї є єдине і дуже специфічне рішення — видалити ключ
HKLM\Components\PendingRequired=1
 

Перезавантажитися. Тут важливо не перестаратися, не слід видаляти ніякі інші ключі в цьому розділі, навіть якщо вони вам не подобаються, тому що після цього оновлення припинять ставитися назавжди.

Помилка #3. Всі інші помилки
Практично 100% інших помилок може вирішити перевірки готовності Системи до оновлень (SURT) з статті support.microsoft.com/en-us/kb/947821
Завантажуєте пакет для вашої системи, встановлюєте, читаєте лог
%windir%\Logs\CBS\CheckSUR.log 
, якщо він закінчується приблизно так:
Summary:
Seconds executed: 1164
Found 16 errors
Fixed 4 errors
то ви наш клієнт.

Проблема полягає в тому, що під час інсталяції оновлень в системі можуть з'явитися биті файли. Що є причиною — несправна мережа, диск, оперативна пам'ять, сам Windows Update – з'ясувати не вийде, а виправити помилки для встановлення наступних оновлень доведеться.

Як правило, пошкоджуються *.cat, *.mum, *.manifest файлів. У кого-то пошкоджуються *.dll, але я на практиці не стикався. І начебто засіб SURT повинен сам виправити помилки, оскільки всередині нього є величезний каталог еталонних файлів. Тільки в останній раз SURT оновлювався в жовтні 2014 року, а виправлень на операційну систему з тих пір вийшло безліч, і багатьох файлів в каталозі не вистачає.



Нижче я опишу послідовність дій, необхідних для виправлення помилок установки оновлень Windows 7 x64 з використанням SURT. Для редакції x86 просто потрібно інший пакет SURT з KB947821.

Послідовність дій буде наступна.

1. Запустити перший прохід Windows6.1-KB947821-v34-x64.msu
Користувача від роботи відволікати не буде потрібно, все зробимо віддалено. Створюємо наступний командний файл і запускаємо його:
set machine=BUHWKS02
xcopy Windows6.1-KB947821-v34-x64.msu \\%machine%\admin$\temp
psexec -s \\%machine% wusa "c:\windows\temp\Windows6.1-KB947821-v34-x64.msu" /quiet /norestart
pause

де BUHWKS02 – цільова машина.
Коли скрипт відпрацює і встане на паузу, перевіряємо
%windir%\Logs\CBS\CheckSUR.log

Якщо помилок не знайдено – справа не в битих оновлення.
Якщо він закінчується
Summary:
Seconds executed: 1164
Found 16 errors
Fixed 4 errors

CSI Empty All Zeros Total count: 6
CSI Catalog Corrupt Total count: 3
Fixed: CSI Catalog Corrupt. Total count: 3
CBS MUM Corrupt Total count: 3
CBS Catalog Corrupt Total count: 3
CSI Catalog Thumbprint Invalid Total count: 1
Fixed: CSI Catalog Thumbprint Invalid. Total count: 1
Unavailable repair files:
winsxs\manifests\wow64_microsoft-windows-gdi32_31bf3856ad364e35_6.1.7601.19091_none_c19fa2719495aca9.manifest
winsxs\manifests\amd64_microsoft-windows-capi2-weakcrypto_31bf3856ad364e35_6.1.7601.23290_none_5e936c9c5ce2e8e6.manifest
winsxs\manifests\wow64_microsoft-windows-gdi32_31bf3856ad364e35_6.1.7601.23290_none_c22840d8adb43043.manifest
winsxs\manifests\amd64_microsoft-windows-gdi32_31bf3856ad364e35_6.1.7601.19091_none_b74af81f6034eaae.manifest
winsxs\manifests\amd64_microsoft-windows-capi2-weakcrypto_31bf3856ad364e35_6.1.7601.19091_none_5e0ace3543c4654c.manifest
winsxs\manifests\amd64_microsoft-windows-gdi32_31bf3856ad364e35_6.1.7601.23290_none_b7d3968679536e48.manifest
servicing\packages\Package_2_for_KB3123479~31bf3856ad364e35~amd64~~6.1.1.0.mum
servicing\packages\Package_2_for_KB3123479~31bf3856ad364e35~amd64~~6.1.1.0.mum
servicing\packages\Package_for_KB3123479_SP1~31bf3856ad364e35~amd64~~6.1.1.0.mum
то будемо виправляти.

2. Копіюємо оригінальні файли на цільову машину
Microsoft пропонує нам довгу, путанную процедуру з витягом хороших файлів оновлень і розміщенням їх у певні каталоги кошти SURT. При цьому шляху у статтях невірні. Десь і зовсім рекомендують підкладати оригінальні msu файли.

Самий простий і правильний варіант наступний — скопіювати еталонні файли з робочої системи:

*.mum and *.cat з C:\Windows\servicing\Packages складаються в %windir%\Temp\CheckSUR\servicing\packages
*.manifest з C:\Windows\winsxs\Manifests складаються в %windir%\Temp\CheckSUR\winsxs\manifests\

Проблема в тому, що битих файлів зазвичай десятки, і їх дуже складно вибрати і скопіювати. Тоді на допомогу приходить наступний скрипт (еталонної вважається машина, з якої ви запускаєте скрипт)

cls
$flag = $false
$destPC = "\\BUHWKS02"
$log=get-content $($destPC + "\admin$\Logs\CBS\CheckSUR.log")
$MUMCATSource = "C:\Windows\servicing\Packages\"
$MUMCATDest = $destpc + "\admin$\Temp\CheckSUR\servicing\Packages\"
$MANIFESTSource = "C:\Windows\winsxs\Manifests\"
$MANIFESTDest = $destpc + "\admin$\Temp\CheckSUR\winsxs\Manifests\"
If ((Test-Path -Шлях $MUMCATDest -PathType Container) -eq $false) {New-Item -Path $MUMCATDest -ItemType directory }
If ((Test-Path -Шлях $MANIFESTDest -PathType Container) -eq $false) {New-Item -Path $MANIFESTDest -ItemType directory}
foreach ($line in $log) { 
if ($flag -eq $True){
if ($line.trim().Length -ne 0) { 
$fileArray=$($line.Split("\"))
$file = $FileArray[$FileArray.Length-1]
$extArray = $file.split(".")
$ext = $extArray[$extArray.length-1]
if ($ext -eq "manifest") {
Write-Warning $("Copying " + $($MANIFESTSource+$file)+" to " + $MANIFESTDest)
Copy-Item $($MANIFESTSource+$file) $($MANIFESTDest+$file)
}
if (($ext -eq "mum") -or ($ext -eq "cat") ) {
Write-Warning $("Copying " + $($MUMCATSource+$file)+" to " + $MUMCATDest)
Copy-Item $($MUMCATSource+$file) $($MUMCATDest+$file)
}
}
}
if ($line -eq "Unavailable repair files:") {$flag = $true} 
} 

Як бачите, простий скрипт і може бути легко заточений напилком під вашу інфраструктуру.

3. Запускаємо другий прохід Windows6.1-KB947821-v34-x64.msu
Після копіювання файлів ми повторно запускаємо SURT, використовуючи командний файл з першого кроку. При повторному запуску засіб зможе підхопити скопійовані нами оригінальні файли з %windir%\Temp\CheckSUR і замінити ними зіпсовані.
Якщо ми зробили все правильно, то %windir%\Logs\CBS\CheckSUR.log прийме наступний вигляд:
=================================
Checking System Update Readiness.
Binary Version 6.1.7601.22471
Package Version 26.0
2016-03-03 09:15
Checking Windows Servicing Packages
Checking Package Manifests and Catalogs
Checking Package Watchlist
Checking Component Watchlist
Checking Packages
Checking Component Store
Summary:
Seconds executed: 1435
No errors detected


Тепер можна продовжити установку оновлень на цільову машину, наприклад, такими командними файлами:
set machine= BUHWKS02
 
psexec -i -s \\%machine% wuauclt /detectnow
 
pause
 

 
set machine= BUHWKS02
 
psexec -i -s \\%machine% wuauclt /updatenow
 
pause
 

Помилка #4. Якщо SURT відпрацював нормально, а оновлення все одно не ставляться
Спробуйте вдатися до старого прийому – скинути службу Windows Update в початковий стан. Для цього необхідно видалити теку %windir%\SoftwareDistribution.

Створюємо файл WU-cleanupCMD.cmd:
net stop wuauserv
 
rmdir /s /q %windir%\SoftwareDistribution
 
net start wuauserv
 
wuauclt /detectnow
 

Запускаємо:
set machine= BUHWKS02
 
psexec -c -s \\%machine% WU-cleanupCMD.cmd
 
pause
 

Після цього виникне Помилка #1, але як боротися з нею ми вже знаємо.

Вдалого адміністрування!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.