- Konu sahibi
- #1
İlk olarak PowerShell’i Yönetici olarak açın. Windows Server’ın Windows Update veya WSUS ilkeleriyle erişebildiği güncellemeleri Windows Update Agent üzerinden tarayıp indirmek ve yüklemek için aşağıdaki betiği çalıştırabilirsiniz. Betik önce uygulanabilir güncellemeleri listeler, ardından indirir ve yükler; işlem sonunda yeniden başlatma gerekip gerekmediğini bildirir. Windows Update Agent, Windows Update ve WSUS üzerinden güncelleme arama, indirme ve yükleme işlemlerini programatik olarak destekler.
Üretim sunucusunda çalıştırmadan önce bakım aralığını, uygulama bağımlılıklarını ve olası yeniden başlatmayı planlayın. Güncelleme yüklemek, çalışan hizmetlerin yeniden başlatılmasına veya sunucunun yeniden başlatılmasına neden olabilir. Sunucu bir etki alanı ya da WSUS politikasıyla yönetiliyorsa PowerShell betiği yalnızca o sunucuya sunulan güncellemeleri görebilir; Microsoft Update’te bulunan her güncellemenin doğrudan görünmesi garanti değildir.
PowerShell oturumunun yönetici yetkisiyle açıldığından emin olun. Sunucunun güncelleme kaynağına erişebilmesi, Windows Update hizmetinin çalışır durumda olması ve sistem diskinde yeterli boş alan bulunması gerekir. Güncelleme sırasında sunucuyu yeniden başlatmayacaksanız, betiği bakım penceresinde çalıştırın ve yeniden başlatma gerektiren sonuçları ayrıca değerlendirin.
Windows Server’ın hangi güncelleme kaynağını kullandığını değiştirmeden önce kurum politikasını kontrol edin. WSUS kullanılıyorsa arama sonucu WSUS’un onayladığı güncellemelerle sınırlı olabilir. Bu davranış bir PowerShell hatası değil, güncelleme yönetimi politikasının sonucudur.
Aşağıdaki betik, yalnızca yüklü olmayan, gizlenmemiş yazılım güncellemelerini arar. Önce başlıklarını gösterir; sonuç yoksa yüklenebilecek güncelleme bulunmadığını bildirir. Güncelleme varsa indirme ve yükleme adımlarını sırayla başlatır.
Betik bir dosyaya kaydedilecekse örneğin
Betik sonunda hem genel yükleme sonucu hem de her güncelleme için ayrı sonuç kodu gösterilir. Genel sonuç başarılı görünse bile tek tek güncellemelerin sonuçlarını kontrol edin; bazı güncellemeler başarılı olurken bazıları başarısız olabilir.
Güncelleme geçmişini incelemek için Olay Görüntüleyicisi’nde
Betiğin
Yükleme başarısızsa yalnızca “güncelleme yüklenmedi” bilgisiyle işlem açmayın. Her güncellemenin başlığını, KB bilgisini, sonuç kodunu, sunucu adını, çalıştırma zamanını ve yeniden başlatma durumunu kaydedin. WSUS kullanılıyorsa aynı KB’nin sunucuya onaylanıp onaylanmadığını; doğrudan Windows Update kullanılıyorsa ağ, ara sunucu ve hizmet erişimini bu bilgilerle inceleyin. Bu ayrıntılar, sorunun betikten mi, güncelleme kaynağından mı yoksa güncellemenin kendi ön koşulundan mı kaynaklandığını ayırmaya yardımcı olur.
Üretim sunucusunda çalıştırmadan önce bakım aralığını, uygulama bağımlılıklarını ve olası yeniden başlatmayı planlayın. Güncelleme yüklemek, çalışan hizmetlerin yeniden başlatılmasına veya sunucunun yeniden başlatılmasına neden olabilir. Sunucu bir etki alanı ya da WSUS politikasıyla yönetiliyorsa PowerShell betiği yalnızca o sunucuya sunulan güncellemeleri görebilir; Microsoft Update’te bulunan her güncellemenin doğrudan görünmesi garanti değildir.
Çalıştırmadan önce kontrol edilmesi gerekenler
PowerShell oturumunun yönetici yetkisiyle açıldığından emin olun. Sunucunun güncelleme kaynağına erişebilmesi, Windows Update hizmetinin çalışır durumda olması ve sistem diskinde yeterli boş alan bulunması gerekir. Güncelleme sırasında sunucuyu yeniden başlatmayacaksanız, betiği bakım penceresinde çalıştırın ve yeniden başlatma gerektiren sonuçları ayrıca değerlendirin.
Windows Server’ın hangi güncelleme kaynağını kullandığını değiştirmeden önce kurum politikasını kontrol edin. WSUS kullanılıyorsa arama sonucu WSUS’un onayladığı güncellemelerle sınırlı olabilir. Bu davranış bir PowerShell hatası değil, güncelleme yönetimi politikasının sonucudur.
Güncellemeleri tarama, indirme ve yükleme
Aşağıdaki betik, yalnızca yüklü olmayan, gizlenmemiş yazılım güncellemelerini arar. Önce başlıklarını gösterir; sonuç yoksa yüklenebilecek güncelleme bulunmadığını bildirir. Güncelleme varsa indirme ve yükleme adımlarını sırayla başlatır.
Kod:
$ErrorActionPreference = 'Stop'
$session = New-Object -ComObject Microsoft.Update.Session
$searcher = $session.CreateUpdateSearcher()
Write-Host 'Güncellemeler aranıyor...'
$searchResult = $searcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")
if ($searchResult.Updates.Count -eq 0) {
Write-Host 'Yüklenecek güncelleme bulunamadı.'
return
}
$updates = New-Object -ComObject Microsoft.Update.UpdateColl
for ($i = 0; $i -lt $searchResult.Updates.Count; $i++) {
$update = $searchResult.Updates.Item($i)
if (-not $update.EulaAccepted) {
$update.AcceptEula()
}
[void]$updates.Add($update)
Write-Host ("{0}. {1}" -f ($i + 1), $update.Title)
}
Write-Host ("Toplam güncelleme: {0}" -f $updates.Count)
$downloader = $session.CreateUpdateDownloader()
$downloader.Updates = $updates
Write-Host 'Güncellemeler indiriliyor...'
$downloadResult = $downloader.Download()
Write-Host ("İndirme sonucu kodu: {0}" -f $downloadResult.ResultCode)
$installableUpdates = New-Object -ComObject Microsoft.Update.UpdateColl
for ($i = 0; $i -lt $updates.Count; $i++) {
$update = $updates.Item($i)
if ($update.IsDownloaded) {
[void]$installableUpdates.Add($update)
}
}
if ($installableUpdates.Count -eq 0) {
Write-Warning 'İndirilebilen güncelleme yok. Windows Update günlüklerini ve bağlantı durumunu kontrol edin.'
return
}
$installer = $session.CreateUpdateInstaller()
$installer.Updates = $installableUpdates
Write-Host 'Güncellemeler yükleniyor...'
$installResult = $installer.Install()
Write-Host ("Yükleme sonucu kodu: {0}" -f $installResult.ResultCode)
Write-Host ("Yeniden başlatma gerekiyor mu: {0}" -f $installResult.RebootRequired)
for ($i = 0; $i -lt $installableUpdates.Count; $i++) {
$updateResult = $installResult.GetUpdateResult($i)
Write-Host ("{0} => {1}" -f $installableUpdates.Item($i).Title, $updateResult.ResultCode)
}
Betik bir dosyaya kaydedilecekse örneğin
C:\Admin\Install-WindowsUpdates.ps1 adıyla kaydedin ve yönetici PowerShell oturumunda şu komutla çalıştırın:
Kod:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
C:\Admin\Install-WindowsUpdates.ps1
Process kapsamı yalnızca açık PowerShell oturumu için geçerlidir; kalıcı yürütme ilkesi değişikliği yapmaz. Kurumunuzun betik çalıştırma ilkesi daha kısıtlıysa bu komut da engellenebilir. Böyle bir durumda yürütme ilkesini kalıcı olarak değiştirmek yerine, kurum politikasına uygun imzalı betik veya izinli çalışma yöntemi kullanın.Çıktıyı nasıl yorumlamalısınız?
Betik sonunda hem genel yükleme sonucu hem de her güncelleme için ayrı sonuç kodu gösterilir. Genel sonuç başarılı görünse bile tek tek güncellemelerin sonuçlarını kontrol edin; bazı güncellemeler başarılı olurken bazıları başarısız olabilir.
| Görülen durum | Anlamı | Sonraki işlem |
|---|---|---|
| Yüklenecek güncelleme bulunamadı | Sunucu, mevcut arama kaynağına göre uygulanabilir güncelleme döndürmedi. | WSUS onaylarını, Windows Update hizmetini ve son başarılı tarama zamanını kontrol edin. Bu sonuç sunucunun tüm güvenlik güncellemelerini kesin olarak aldığı anlamına gelmez. |
| İndirme başarılı, yükleme başarısız | Güncelleme dosyası alınmış ancak kurulum sırasında koşul veya hata oluşmuş olabilir. | Her güncellemenin ayrı sonuç kodunu, WindowsUpdateClient olaylarını ve güncelleme günlüklerini inceleyin. Hata koduyla birlikte ilgili KB numarasını yönetin veya destek talebine ekleyin. |
| Yükleme başarılı, yeniden başlatma gerekiyor: True | Kurulum tamamlanmış olabilir ancak değişikliklerin etkinleşmesi için yeniden başlatma bekleniyor. | Hizmet sahiplerini bilgilendirip bakım penceresinde sunucuyu yeniden başlatın; ardından güncelleme geçmişini ve çalışan hizmetleri doğrulayın. |
| İndirme sonucu başarısız veya eksik | Güncelleme kaynağına, ara sunucuya, WSUS’a veya ağ erişimine ilişkin sorun olabilir. | WSUS/Windows Update erişimini, sistem tarih-saatini, disk alanını ve Windows Update hizmetini kontrol edin. Hata kodunu ve sunucu adını birlikte iletin. |
Windows Logs > System altında kaynak olarak WindowsUpdateClient olaylarını filtreleyebilirsiniz. Bu kayıtlar, yükleme sonucunu ve hata kodunu betik çıktısından daha ayrıntılı gösterebilir. WUA API ile yapılan işlemlerin ilerleme ve geçmiş bilgileri Windows Update arayüzünde beklediğiniz biçimde görünmeyebilir; bu nedenle olay günlüklerini de kontrol etmek gerekir.Yükleme sonrasında doğrulama
Betiğin
RebootRequired değeri True ise yeniden başlatmayı ertelemek, güncellemenin tüm etkilerinin devreye girmediği anlamına gelir. Yeniden başlatmadan sonra aynı taramayı tekrar çalıştırarak ilgili güncellemenin artık yüklü görünmediğini ve yeni bekleyen güncelleme kalıp kalmadığını kontrol edin.Yükleme başarısızsa yalnızca “güncelleme yüklenmedi” bilgisiyle işlem açmayın. Her güncellemenin başlığını, KB bilgisini, sonuç kodunu, sunucu adını, çalıştırma zamanını ve yeniden başlatma durumunu kaydedin. WSUS kullanılıyorsa aynı KB’nin sunucuya onaylanıp onaylanmadığını; doğrudan Windows Update kullanılıyorsa ağ, ara sunucu ve hizmet erişimini bu bilgilerle inceleyin. Bu ayrıntılar, sorunun betikten mi, güncelleme kaynağından mı yoksa güncellemenin kendi ön koşulundan mı kaynaklandığını ayırmaya yardımcı olur.