آموزش حذف آپدیت (Update) های اضافه از WSUS برای افزایش فضای دیسک

در این آموزش نحوه حذف چهار دسته از آپدیت های بلااستفاده و کم مصرف در سرور WSUS رو به منظور افزایش فضای موجود هارد بررسی میکنیم.زمانی که شما یک product رو در سرور WSUS برای ارائه آپدیت در شبکه خود approve میکنید انواع مختلفی از آپدیت های این product که برای پردازنده هایی با معماری های مختلف ارائه میشوند از سایت مایکروسافت دانلود و approve میشود برای مثال آپدیت تجمعی ویندوز 10 نسخه 1709 در ماه جاری با KB 4512516 شامل سه فایل برای پردازنده های 32 ، 64 بیتی و ARM-based است.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

پردازنده های ARM-based در دستگاه هایی مثل Microsoft Surface استفاده میشود و در بسیاری از شبکه ها اینچنین دستگاه هایی وجود ندارد یا تعداد آن ها بسیار محدود است و در نتیجه نگهداری حجم بالای آپدیت تنها برای این دستگاه ها منطقی به نظر نمیرسد.به همین ترتیب آپدیت هایی که برای پردازنده های itanium منتشر میشود به دلیل نادر بودن این سری از پردازنده ها ممکن است در بسیاری از محیط های عملیاتی معقولانه نباشد.

علاوه بر این دو دسته از آپدیت ها (itanium based و ARM-based) نگهداری آپدیت هایی که مختص به ویندوز 8 میباشد (به دلیل اتمام دوره پشتیبانی این نسخه) ممکن است در بسیاری از شبکه ها دیگر توجیحی نداشته باشد در نتیجه بهتر است که این آپدیت ها به منظور کاهش فضای هارد اشغال شده در سرور WSUS حذف شوند. دسته دیگری از آپدیت ها که برای ارائه feature های جدید بصورت تستی و اولیه ارائه میشود آپدیت های preview هستند که در آپدیت های بعدی بصورت کامل و تست شده ارائه میشوند نگهداری این آپدیت ها نیز الزامی و منطقی نیست بنابراین این آپدیت ها نیز قابل حذف است.

آپدیت های فوق الذکر با گذشت زمان بنابر تشخیص سرور WSUS بر مبنای شرایطی بتدریج decline و سپس حذف میشود اما این پروسه عموما بسیار کند است و گاهی هرگز اتفاق نمی افتد. با استفاده از اسکریپت ارائه شده در این آموزش میتوانید آپدیت های چهار دسته فوق را decline وسپس حذف نمایید.اجرای این اسکریپت بر روی یک سرور WSUS با حدود 500 گیگ آپدیت، در حدود 60 گیگ فضا را خالی نمود که بیش از 10 درصد فضای اشغالی است.

علاوه بر این ممکن است آپدیت های دیگری برروی سرورهای شما وجود داشته باشد که دیگر مورد نیاز نیست و شما میتوانید با اعمال تغییراتی برروی این اسکریپت آن آپدیت ها را نیز حذف نمایید.پیش از اجرای اسکریپت در محیط کنسول wsus در بخش All Update گزینه approval را بر روی declined قرار دهید و refresh را بزنید اگر آپدیتی در این لیست نمایش داده میشود این آپدیت ها نیز به همراه آپدیت هایی که با اسکریپت زیر decline میشود حذف خواهند شد.برای اجرای اسکریپت متن زیر را در محیط powershell ise بصورت run as administrator کپی کنید و اجرا نمایید.

set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | Out-Null

# This requires an elevated console/host.
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer(‘MyserverName’,$False,"8530")


$Updates=$wsus.GetUpdates()
$win8Updates=$Updates|where-object {$_.ProductTitles.count -eq 1 -and $_.ProductTitles -like "Windows 8"}
$ARMUpdates=$Updates|where-object {$_.Title -like "*ARM64-based*"}
$ItaniumUpdates=$Updates|where-object {$_.LegacyName -match "ia64"}
$PreviewUpdates=$Updates|where-object {$_.Title -like "*Preview of*"}

foreach($update in $win8Updates){$update.Decline()}
foreach($update in $ARMUpdates){$update.Decline()}
foreach($update in $ItaniumUpdates){$update.Decline()}
foreach($update in $PreviewUpdates){$update.Decline()}

پس از اجرای اسکریپت فوق تمامی آپدیت هایی که مربوط به چهاردسته فوق الذکر باشند decline میشوند مجددا لیست declined ها را در کنسول wsus چک کنید تا از decline شدن آپدیت ها مطمئن شوید.علاوه براین بر روی سربرگ لیست کلیک راست کنید و گزینه Needed Count را فعال نمایید سپس مطمئن شوید که مقدار این ستون برای تمامی آپدیت های decline شده در لیست 0 باشد در غیر این صورت آپدیت در شبکه مورد نیاز است و دستگاه یا دستگاه هایی به آن آپدیت نیازمند هستند که با راست کلیک کردن و انتخاب گزینه approveمیتوانید آن ها را مجددا از حالت decline خارج کنید.بعد ازین برای حذف آپدیت های decline شده دستورات زیر را اجرا کنید:

[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
 $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
 $declined=$wsus.GetUpdates() | Where {$_.IsDeclined -eq $true}
 $declined| ForEach-Object {$wsus.DeleteUpdate($_.Id.UpdateId.ToString()); Write-Host $_.Title removed } 

پس از این کار کافیست که server cleanup wizard رو از قسمت Option در کنسول wsus اجرا کنید تا فضای هارد خالی شود.اگر سرورهای downstream دارید کافیست پس از اجرای اسکریپت decline برروی سرور upstream ، سرورهای downstream را sync نمایید و سپس قسمت حذف آپدیت ها را بر روی تمامی سرورها اجرا نمایید.


نظرات