sunucu.com.tr
Windows Sunucular

PowerShell ile Windows Update: Windows Server'da PSWindowsUpdate ve zamanlanmış görevle otomatik güncelleme ve yeniden başlatma

PowerShell ile Windows Update yönetimini PSWindowsUpdate modülüyle kurun: güncellemeleri listeleyin, sorunlu KB'leri hariç tutun, her çalışmayı günlüğe yazan betikle kurulum yapın ve sunucuyu yalnız gece bakım penceresinde yeniden başlatan haftalık zamanlanmış görev oluşturun.

sunucu.com.tr Ekibi12 dk okuma

Domain'e bağlı olmayan ya da WSUS kullanmayan tek veya birkaç Windows Server'ı yönetiyorsanız güncellemeler genelde "birisi hatırlarsa" yapılır. PowerShell ile Windows Update yönetimi bu işi tekrarlanabilir hale getirir: güncellemeleri komut satırından listeler, istemediğiniz KB'leri dışarıda bırakır, sonucu günlüğe yazar ve sunucuyu yalnız sizin belirlediğiniz gece saatlerinde yeniden başlatırsınız. Yazı, bu işi tek sunucuda ya da küçük bir sunucu grubunda yapan sistem yöneticileri ve KOBİ BT sorumluları için hazırlandı.

Neden arayüz yerine PowerShell ile Windows Update

Ayarlar ekranındaki Windows Update düğmesi tek sunucu için yeterli görünür. Sorun şu ki ne zaman çalıştığını, neyin kurulduğunu ve sunucunun ne zaman yeniden başlayacağını tam kontrol edemezsiniz. Muhasebe ya da ERP yazılımı çalışan bir sunucu mesai ortasında yeniden başlarsa bütün ofis bekler.

PowerShell tarafında Microsoft'un yerleşik bir "Install-WindowsUpdate" komutu yoktur. Bu boşluğu topluluk tarafından geliştirilen ve PowerShell Gallery'de yayınlanan PSWindowsUpdate modülü doldurur. Modül, Windows Update Agent API'sini kullanır; yani arayüzdeki güncellemelerle aynı kaynaktan beslenir.

Ön koşullar

  • Windows Server 2016, 2019, 2022 ya da 2025.
  • Windows PowerShell 5.1 (zamanlanmış görev için önerilen kabuk budur).
  • Yönetici olarak açılmış PowerShell oturumu.
  • PowerShell Gallery'ye internet erişimi.
  • Güncelleme öncesi alınmış bir yedek ya da snapshot (aşağıda ayrıca değiniyoruz).

Sunucunuz destek sonuna yaklaşan bir sürümdeyse güncelleme otomasyonu tek başına yetmez; Windows Server 2016 destek sonu yazısındaki seçenekleri de değerlendirin.

PSWindowsUpdate kurulumu: NuGet, TLS 1.2 ve PowerShell 5.1 notu

Eski Windows Server sürümlerinde Install-Module komutu çoğu zaman iki sebeple başarısız olur. Birincisi, PowerShell 5.1 varsayılan olarak eski TLS sürümleriyle bağlanmaya çalışır ve PowerShell Gallery bunları kabul etmez. İkincisi, NuGet paket sağlayıcısı yüklü değildir ve komut etkileşimli onay ister; bu da betik içinde takılmaya yol açar.

Aşağıdaki blok bu iki sorunu çözer ve modülü tüm kullanıcılar için kurar. Windows Server 2016 ile 2025 arası ve Windows PowerShell 5.1 için hazırlandı. Tekrar çalıştırmak zarar vermez: modül zaten varsa yeniden kurmaz. Geri almak için Uninstall-Module PSWindowsUpdate -AllVersions yeterlidir.

powershell
# Yönetici PowerShell 5.1 oturumunda çalıştırın.
# 1) Bu oturum için TLS 1.2'yi etkinleştir (PowerShell Gallery bağlantısı için gerekli)
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12

# 2) NuGet sağlayıcısı yoksa etkileşimsiz kur
if (-not (Get-PackageProvider -ListAvailable -Name NuGet -ErrorAction SilentlyContinue)) {
    Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Scope AllUsers | Out-Null
}

# 3) Modül yoksa tüm kullanıcılar için kur (SYSTEM hesabı da görebilsin diye AllUsers)
if (-not (Get-Module -ListAvailable -Name PSWindowsUpdate)) {
    Install-Module -Name PSWindowsUpdate -Scope AllUsers -Force -AllowClobber
}

# 4) Modülü yükle ve sürümünü göster
Import-Module PSWindowsUpdate
Get-Module PSWindowsUpdate | Select-Object Name, Version

-Scope AllUsers seçimi önemlidir. Modülü yalnız kendi kullanıcınız için kurarsanız, SYSTEM hesabıyla çalışan zamanlanmış görev modülü bulamaz ve sessizce başarısız olur. Galeride yayınlanan güncel sürümü görmek için Find-Module PSWindowsUpdate komutunu, kurulu sürümü yükseltmek için Update-Module PSWindowsUpdate komutunu kullanabilirsiniz.

Bekleyen güncellemeleri listeleme ve Microsoft Update hizmetini ekleme

Varsayılan durumda Windows Update yalnız işletim sistemi güncellemelerini getirir. SQL Server, .NET ya da diğer Microsoft ürünlerinin yamalarını da almak istiyorsanız Microsoft Update hizmetini kaydetmeniz gerekir. Aşağıdaki komutlar mevcut hizmetleri gösterir, Microsoft Update'i ekler ve bekleyen güncellemeleri listeler. Aynı sürümler için hazırlandı; hizmeti kaldırmak için Remove-WUServiceManager -ServiceID komutunu aynı kimlikle kullanabilirsiniz.

powershell
# Kayıtlı güncelleme hizmetlerini göster (Windows Update, Microsoft Update, WSUS vb.)
Get-WUServiceManager

# Microsoft Update hizmetini kaydet (zaten kayıtlıysa tekrar eklemez, uyarı verir)
Add-WUServiceManager -MicrosoftUpdate -Confirm:$false

# Bekleyen güncellemeleri listele (Microsoft Update dahil)
Get-WindowsUpdate -MicrosoftUpdate

# Daha okunur bir tablo: KB, boyut ve başlık
Get-WindowsUpdate -MicrosoftUpdate | Select-Object KB, Size, Title | Format-Table -AutoSize

# Daha önce kurulan güncellemelerin geçmişi (son 20 kayıt)
Get-WUHistory -Last 20

Get-WindowsUpdate komutu hiçbir şey kurmaz, yalnız tarar. Bu yüzden ilk denemelerinizi her zaman bu komutla yapın ve listeyi gözden geçirin.

Güncellemeleri kurma: -AcceptAll, -IgnoreReboot, -AutoReboot ve KB hariç tutma

Kurulum için Install-WindowsUpdate (ya da aynı işi yapan Get-WindowsUpdate -Install) kullanılır. Bilmeniz gereken parametreler şunlar:

  • -AcceptAll: Her güncelleme için onay sormaz. Betikte zorunludur, yoksa komut kullanıcıdan yanıt bekler.
  • -IgnoreReboot: Kurulum yeniden başlatma gerektirse bile sunucuyu yeniden başlatmaz ve sormaz.
  • -AutoReboot: Gerekiyorsa kurulum biter bitmez sunucuyu yeniden başlatır. Saat kontrolü yapmaz.
  • -NotKBArticleID: Belirttiğiniz KB numaralarını kurulumdan hariç tutar.
  • -NotCategory: Belirli kategorileri (örneğin "Drivers") dışarıda bırakır.
  • -MicrosoftUpdate: Taramayı Microsoft Update üzerinden yapar.

Elle, kontrollü bir kurulum için aşağıdaki örnekleri kullanabilirsiniz. KB0000000 yerine gerçekten hariç tutmak istediğiniz KB numarasını yazın.

powershell
# Tüm güncellemeleri kur, sürücüleri ve belirtilen KB'yi hariç tut, yeniden BAŞLATMA
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -IgnoreReboot `
    -NotCategory 'Drivers' -NotKBArticleID 'KB0000000' -Verbose

# Sunucunun yeniden başlatma bekleyip beklemediğini öğren (True / False)
Get-WURebootStatus -Silent

# Sorunlu bir güncellemeyi kalıcı olarak gizle (bir sonraki taramada listelenmez)
Hide-WindowsUpdate -KBArticleID 'KB0000000' -Confirm:$false

-AutoReboot kullanışlı görünür, ama gün içinde elle çalıştırdığınızda sunucuyu o an yeniden başlatır. Üretimdeki bir sunucuda bunu yapmak yerine -IgnoreReboot ile kurup yeniden başlatmayı kendiniz planlamak daha güvenlidir. Aşağıdaki betik tam olarak bunu yapar.

Betik: güncelle, günlüğe yaz, bakım penceresinde yeniden başlat

Betik şu adımları izler: TLS 1.2 ve modül kontrolü yapar, bekleyen güncellemeleri tarar, hariç tutulanlar dışında hepsini kurar, her adımı tarihli bir günlük dosyasına yazar, yeniden başlatma gerekiyorsa saati kontrol eder. Saat bakım penceresinin içindeyse 5 dakika uyarı vererek yeniden başlatır; dışındaysa yalnız günlüğe not düşer. 30 günden eski günlükleri yalnız kendi günlük klasöründen temizler.

Windows Server 2016 ile 2025 arası ve Windows PowerShell 5.1 için hazırlandı. Dosyayı C:\Scripts\WU-Guncelle.ps1 olarak kaydedin. Değiştirmeniz gereken değerler betiğin başındaki param bloğundadır: HaricKB listesine kendi KB numaralarınızı yazın (örnekteki KB0000000 bir yer tutucudur), bakım penceresini kendi saatlerinize göre ayarlayın. Geri almak için dosyayı ve aşağıdaki zamanlanmış görevi silmeniz yeterlidir; betik sistem ayarı değiştirmez. Planlanan bir yeniden başlatmayı 5 dakikalık süre içinde iptal etmek için shutdown.exe /a kullanın.

powershell
<#
    WU-Guncelle.ps1
    PSWindowsUpdate ile güncelleme kurar, günlük tutar,
    yalnız bakım penceresinde yeniden başlatır.
    Windows Server 2016-2025, Windows PowerShell 5.1 için hazırlandı.
#>
param(
    [string]  $GunlukKlasoru     = 'C:\Scripts\Logs',      # Günlüklerin yazılacağı klasör
    [string[]]$HaricKB           = @('KB0000000'),         # Kurulmayacak KB'ler (yer tutucu, kendi listenizi yazın)
    [string[]]$HaricKategori     = @('Drivers'),           # Kurulmayacak kategoriler
    [string]  $PencereBaslangic  = '02:00',                # Bakım penceresi başlangıcı (SS:dd)
    [string]  $PencereBitis      = '05:00',                # Bakım penceresi bitişi (SS:dd)
    [int]     $GunlukSaklamaGun  = 30                      # Kaç günlük günlük saklanacak
)

$ErrorActionPreference = 'Stop'

# --- Günlük klasörü ve dosyası ---
if (-not (Test-Path -Path $GunlukKlasoru)) {
    New-Item -Path $GunlukKlasoru -ItemType Directory -Force | Out-Null
}
$GunlukDosyasi = Join-Path $GunlukKlasoru ("wu-{0}.log" -f (Get-Date -Format 'yyyyMMdd-HHmm'))

function Write-Gunluk {
    param([string]$Mesaj)
    $satir = '{0}  {1}' -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $Mesaj
    Add-Content -Path $GunlukDosyasi -Value $satir -Encoding UTF8
}

try {
    Write-Gunluk "Başladı. Bilgisayar: $env:COMPUTERNAME, kullanıcı: $env:USERNAME"

    # --- TLS 1.2 ve modül kontrolü ---
    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
    if (-not (Get-Module -ListAvailable -Name PSWindowsUpdate)) {
        if (-not (Get-PackageProvider -ListAvailable -Name NuGet -ErrorAction SilentlyContinue)) {
            Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Scope AllUsers | Out-Null
        }
        Install-Module -Name PSWindowsUpdate -Scope AllUsers -Force -AllowClobber
        Write-Gunluk 'PSWindowsUpdate modülü kuruldu.'
    }
    Import-Module PSWindowsUpdate

    # --- Ortak parametreler (splatting) ---
    $ortak = @{
        MicrosoftUpdate = $true
        NotCategory     = $HaricKategori
    }
    # Boş liste verilirse parametre eklenmez
    $gercekHaricKB = $HaricKB | Where-Object { $_ -and $_ -ne 'KB0000000' }
    if ($gercekHaricKB) { $ortak['NotKBArticleID'] = $gercekHaricKB }

    # --- Tarama ---
    $bekleyen = @(Get-WindowsUpdate @ortak)
    Write-Gunluk ("Bekleyen güncelleme sayısı: {0}" -f $bekleyen.Count)
    foreach ($g in $bekleyen) { Write-Gunluk ("  Bekliyor: {0}  {1}" -f $g.KB, $g.Title) }

    # --- Kurulum ---
    if ($bekleyen.Count -gt 0) {
        $sonuc = Install-WindowsUpdate @ortak -AcceptAll -IgnoreReboot -Confirm:$false
        foreach ($s in $sonuc) { Write-Gunluk ("  Sonuç: {0}  {1}  {2}" -f $s.Result, $s.KB, $s.Title) }
    }

    # --- Yeniden başlatma kararı ---
    if (Get-WURebootStatus -Silent) {
        $simdi     = Get-Date
        $baslangic = [datetime]::Today.Add([timespan]$PencereBaslangic)
        $bitis     = [datetime]::Today.Add([timespan]$PencereBitis)

        if ($simdi -ge $baslangic -and $simdi -lt $bitis) {
            Write-Gunluk 'Yeniden başlatma gerekiyor, bakım penceresi içindeyiz. 5 dakika sonra yeniden başlatılacak.'
            # Oturum açık kullanıcılara uyarı gider; iptal için: shutdown.exe /a
            & shutdown.exe /r /t 300 /c "Windows Update bakımı: sunucu 5 dakika içinde yeniden başlatılacak."
        }
        else {
            Write-Gunluk 'Yeniden başlatma gerekiyor ancak bakım penceresi dışındayız. Bir sonraki pencere beklenecek.'
        }
    }
    else {
        Write-Gunluk 'Yeniden başlatma gerekmiyor.'
    }
}
catch {
    Write-Gunluk ("HATA: {0}" -f $_.Exception.Message)
    exit 1
}
finally {
    # Yalnız bu betiğin günlük klasöründeki eski wu-*.log dosyalarını temizle
    Get-ChildItem -Path $GunlukKlasoru -Filter 'wu-*.log' -File -ErrorAction SilentlyContinue |
        Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$GunlukSaklamaGun) } |
        Remove-Item -Force -ErrorAction SilentlyContinue
    Write-Gunluk 'Bitti.'
}

Bakım penceresi mantığı neden ayrı yazıldı? Çünkü kurulum bazen uzun sürer. Görev saat 02:00'de başlar, büyük bir toplu güncelleme 06:00'ya kadar sürerse sunucu sabah mesaisinde yeniden başlamamalıdır. Betik bu durumda yeniden başlatmayı bir sonraki çalışmaya bırakır.

Register-ScheduledTask ile haftalık otomatik güncelleme görevi

Betiği SYSTEM hesabıyla, en yüksek yetkiyle ve haftada bir çalıştıran bir görev oluşturalım. -Force parametresi aynı adla görev varsa üzerine yazar, böylece komutu tekrar çalıştırmak güvenlidir. Windows Server 2016 ile 2025 arası ve PowerShell 5.1 için hazırlandı. Geri almak için en alttaki Unregister-ScheduledTask satırını kullanın.

powershell
# Görev adı ve betik yolu (kendi yolunuza göre değiştirin)
$GorevAdi  = 'WU-Haftalik-Guncelleme'
$BetikYolu = 'C:\Scripts\WU-Guncelle.ps1'

# Çalıştırılacak komut: profil yüklemeden, bu betik için yürütme ilkesini atlayarak
$eylem = New-ScheduledTaskAction -Execute 'powershell.exe' `
    -Argument "-NoProfile -NonInteractive -ExecutionPolicy Bypass -File `"$BetikYolu`""

# Her pazar 02:00
$tetikleyici = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At '02:00'

# SYSTEM hesabı, en yüksek yetki
$kimlik = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest

# Kaçırılırsa açılışta çalıştır, en fazla 3 saat sürsün, aynı anda ikinci kopya başlamasın
$ayarlar = New-ScheduledTaskSettingsSet -StartWhenAvailable `
    -ExecutionTimeLimit (New-TimeSpan -Hours 3) -MultipleInstances IgnoreNew

Register-ScheduledTask -TaskName $GorevAdi -Action $eylem -Trigger $tetikleyici `
    -Principal $kimlik -Settings $ayarlar `
    -Description 'PSWindowsUpdate ile haftalık güncelleme, bakım penceresinde yeniden başlatma' -Force

# Geri almak için:
# Unregister-ScheduledTask -TaskName 'WU-Haftalik-Guncelleme' -Confirm:$false

Tetikleyici seçenekleri için New-ScheduledTaskTrigger, görev kaydı için Register-ScheduledTask belgelerine bakabilirsiniz.

-StartWhenAvailable önemlidir: Sunucu pazar 02:00'de kapalıysa görev açıldıktan sonra çalışır. Ancak bu durumda saat büyük olasılıkla bakım penceresi dışında olacağı için betik kurulum yapar ama yeniden başlatmaz. Beklenen davranış budur.

Doğrulama

Görevi beklemeden hemen deneyin ve sonucu kontrol edin:

powershell
# Görevi şimdi başlat
Start-ScheduledTask -TaskName 'WU-Haftalik-Guncelleme'

# Son çalışma zamanı ve sonuç kodu (0 = başarılı)
Get-ScheduledTaskInfo -TaskName 'WU-Haftalik-Guncelleme' |
    Select-Object LastRunTime, LastTaskResult, NextRunTime

# En yeni günlük dosyasının son 30 satırı
Get-ChildItem 'C:\Scripts\Logs' -Filter 'wu-*.log' |
    Sort-Object LastWriteTime -Descending | Select-Object -First 1 |
    Get-Content -Tail 30

# Kurulum geçmişi
Get-WUHistory -Last 10 | Select-Object Date, KB, Result, Title

LastTaskResult değeri 267009 görünürse görev hâlâ çalışıyordur; birkaç dakika sonra tekrar bakın. Günlükte "HATA" satırı varsa mesajı aşağıdaki hata listesiyle karşılaştırın.

Uzak sunucularda Invoke-WUJob ve WSUS'a bağlı sunucular

Birkaç sunucuyu tek yerden güncellemek istediğinizde ilk akla gelen Invoke-Command ile Install-WindowsUpdate çağırmaktır. Bu çoğu zaman 0x80070005 (Erişim reddedildi) hatasıyla biter, çünkü Windows Update API'si uzak PowerShell oturumundan güncelleme indirmeye izin vermez. PSWindowsUpdate bunun için Invoke-WUJob komutunu sunar: uzak sunucuda SYSTEM hesabıyla çalışan geçici bir zamanlanmış görev oluşturur ve komutunuzu o görev içinde yürütür.

Aşağıdaki örnek, modülün hedef sunucularda da kurulu olduğunu ve WinRM'in açık olduğunu varsayar. SRV01 ve SRV02 yerine kendi sunucu adlarınızı yazın. Windows Server 2016 ile 2025 arası ve PowerShell 5.1 için hazırlandı. Uzak sunucuda oluşan görevi kaldırmak için Unregister-ScheduledTask -TaskName PSWindowsUpdate komutunu o sunucuda çalıştırabilirsiniz.

powershell
$Sunucular = @('SRV01', 'SRV02')   # Kendi sunucu adlarınız

# Her sunucuda SYSTEM hesabıyla hemen çalışacak bir görev oluştur
Invoke-WUJob -ComputerName $Sunucular -RunNow -Confirm:$false -Script {
    Import-Module PSWindowsUpdate
    Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -IgnoreReboot |
        Out-File -FilePath 'C:\Windows\Temp\PSWindowsUpdate.log' -Encoding UTF8
} -Verbose

# Görev durumunu izle
Get-WUJob -ComputerName $Sunucular

Domain dışı (workgroup) sunucularda WinRM bağlantısı için TrustedHosts ayarı ve yerel yönetici hesabı gerekir. WinRM için güvenlik duvarında değişiklik yapacaksanız önce RDP (3389) iznini koruduğunuzdan emin olun. Yanlış bir kural sunucuya erişiminizi kesebilir, bu yüzden sağlayıcınızın konsol erişimini hazır tutun. RDP'yi internete açık bırakıyorsanız RDP brute force engelleme yazısındaki önlemler bu otomasyonla birlikte iyi çalışır.

WSUS'a bağlı sunucularda Get-WindowsUpdate varsayılan olarak WSUS'u sorgular ve yalnız onaylanmış güncellemeleri görür. WSUS'ta reddedilmiş ya da onay bekleyen bir güncelleme listede çıkmaz; bu bir hata değil, politika gereğidir. Doğrudan Microsoft'tan çekmek isterseniz -MicrosoftUpdate ya da -WindowsUpdate parametresini verebilirsiniz, ancak bunu WSUS yöneticisiyle konuşmadan yapmayın. Grup İlkesi bazı ortamlarda internet kaynağını engeller.

Sık yapılan hatalar

Sunucu hiç yeniden başlamıyor. En yaygın nedeni betiğin bakım penceresi dışında çalışmasıdır. Görevin başlangıç saatinin pencere içinde olduğunu ve kurulumun pencere bitmeden tamamlandığını günlükten kontrol edin. Gerekirse pencereyi genişletin.

Görev çalışıyor ama hiçbir şey olmuyor. Modül yalnız sizin kullanıcınız için kurulmuşsa SYSTEM onu bulamaz. Get-Module -ListAvailable PSWindowsUpdate çıktısındaki yolun C:\Program Files\WindowsPowerShell\Modules altında olması gerekir.

0x80070005 Erişim reddedildi. Yerelde yönetici olmayan bir oturumdan çalıştırıyorsunuz ya da uzak oturumda Invoke-Command kullanıyorsunuz. Yerelde PowerShell'i yönetici olarak açın, uzakta Invoke-WUJob kullanın.

Install-Module bağlantı hatası veriyor. TLS 1.2 satırı çalışmamıştır ya da sunucunun proxy arkasından çıkışı yoktur. TLS satırını aynı oturumda tekrar çalıştırın ve PowerShell Gallery adresine erişimi kontrol edin.

Betik onay bekliyor. -AcceptAll ya da -Confirm:$false eksiktir. Zamanlanmış görevde etkileşim olmadığı için komut sonsuza kadar bekler ve 3 saatlik sınırda sonlandırılır.

Güncelleme öncesi yedek ve anlık görüntü

Güncellemelerin büyük çoğunluğu sorunsuz kurulur, ama özellikle eski sürücüler ya da iş yazılımlarıyla çakışan bir yama sunucuyu açılmaz hale getirebilir. Remove-WindowsUpdate -KBArticleID ile bir güncellemeyi kaldırmak mümkündür, fakat sunucu açılmıyorsa bu komutu çalıştıracak bir oturumunuz da olmaz.

Bu yüzden zamanlanmış görevi, yedeğin tamamlandığı saatten sonraya koyun. Sanal sunucuda güncelleme gecesinden önce snapshot almak en hızlı geri dönüş yoludur; ancak snapshot yedeğin yerini tutmaz. Verinin sunucudan ayrı bir yerde durduğu planlı yedekleme ile birlikte kullanın. Kendi donanımınız yoksa bulut sunucu üzerinde snapshot alıp aynı adımları uygulayabilirsiniz.

Sık sorulan sorular

PSWindowsUpdate Microsoft'un resmi modülü mü?

Hayır. Topluluk tarafından geliştirilen ve PowerShell Gallery'de yayınlanan bir modüldür. Arka planda Windows'un kendi Windows Update Agent API'sini kullandığı için güncellemeleri arayüzle aynı kaynaktan alır. Kurumsal politikanız üçüncü taraf modülleri kısıtlıyorsa önce onay alın.

PowerShell 7 (pwsh) ile çalışır mı?

Modül PowerShell 7 içinde de yüklenebilir, ancak zamanlanmış görevlerde ve SYSTEM hesabıyla çalışırken en az sürprizi Windows PowerShell 5.1 verir. Her Windows Server'da hazır geldiği için görevi powershell.exe ile çalıştırmanızı öneririz.

Belirli bir güncellemeyi kalıcı olarak nasıl engellerim?

Tek seferlik hariç tutma için betikteki HaricKB listesine KB numarasını ekleyin. Güncellemenin listede hiç görünmemesini istiyorsanız Hide-WindowsUpdate -KBArticleID kullanın. Gizlemeyi geri almak için Show-WindowsUpdate komutu vardır.

Görev kurulumu yaptı ama yeniden başlatmadı, sunucu güvende mi?

Güncellemeler kurulmuş olsa da çoğu yeniden başlatma olmadan etkinleşmez. Get-WURebootStatus -Silent True dönüyorsa sunucu hâlâ eski dosyalarla çalışıyordur. Bir sonraki bakım penceresini beklemek yerine uygun bir saatte elle yeniden başlatmanız daha doğrudur.

Güncellemeyi kaç sıklıkla çalıştırmalıyım?

Microsoft güvenlik güncellemelerini genellikle her ayın ikinci salı günü yayınlar. Haftalık görev, bu yayından sonraki ilk hafta sonunda yamaları alır ve arada çıkan acil güncellemeleri de yakalar. Kritik bir sunucuda yamaları önce bir test sunucusunda denemek iyi bir alışkanlıktır.

Sonuç

PowerShell ile Windows Update yönetimi üç parçadan oluşur: PSWindowsUpdate modülünü tüm kullanıcılar için doğru kurmak, kurulumu yeniden başlatmadan yapıp kararı bakım penceresine göre veren bir betik yazmak ve bu betiği SYSTEM hesabıyla haftalık bir göreve bağlamak. Günlük dosyaları neyin ne zaman kurulduğunu gösterir, yedek ve snapshot da ters giden bir yamada geri dönüş yolu sağlar. İlk haftalarda günlükleri düzenli okuyun; hariç tutma listesini ve bakım penceresini ihtiyacınıza göre ayarlayın.

  • #powershell
  • #windows update
  • #pswindowsupdate
  • #windows server
  • #zamanlanmış görev
  • #otomatik güncelleme

Windows Sunucular

Amazon satıcı hesabı için sunucu

Bu yazımızda, son dönemlerde sıklıkla talep aldığımız eticaret devi Amazon üzerinde satış yapan ya da yapmak isteyen kullanıcıların, satıcı hesaplarını yöneteceği Amazon satıcı hesabı sunucusu ihtiyaçlarını nasıl karşılayacağınızı anlatıyoruz. Aslında normal olarak sağlanan bulut sunucu, vps ya da vds sunucu…