Windows Server İşletim Sisteminin Clean Install mı? Yoksa In-Place Upgrade mi Olduğu Nasıl Anlaşılır?

Windows Server İşletim Sisteminin Clean Install mı? Yoksa In-Place Upgrade mi Olduğu Nasıl Anlaşılır?

Windows Server ortamlarında bazen bir sunucunun ilk kurulum yöntemini bilmek kritik hale gelebilir. Özellikle uzun süredir çalışan sistemlerde mevcut işletim sisteminin sıfırdan temiz kurulumla mı kurulduğu yoksa daha eski bir Windows Server sürümünden in-place upgrade yöntemiyle mi yükseltildiği her zaman net olmayabilir.

Bu bilgi sorun giderme, uyumluluk analizi, işletim sistemi yaşam döngüsü planlaması, güvenlik denetimleri ve migration projeleri sırasında oldukça faydalıdır.

Örneğin bir sunucu üzerinde Windows Server 2019 veya Windows Server 2022 çalışıyor olabilir. Ancak bu sistem geçmişte Windows Server 2012 R2 ya da Windows Server 2016 üzerinden yükseltilmiş olabilir.

Bu tür yükseltmeler sonrasında bazı eski sistem bileşenleri, registry kayıtları, sürücü kalıntıları veya uygulama bağımlılıkları sistemde kalmaya devam edebilir.

Bu nedenle bazı durumlarda şu sorunun cevabını bulmak gerekebilir:

Bu Windows Server sıfırdan mı kuruldu, yoksa eski bir Windows Server sürümünden upgrade mi edildi?

Bu kontrolü PowerShell ile oldukça pratik şekilde yapabiliriz.

Clean Install ve In-Place Upgrade Nedir?

Clean Install Nedir?

Clean install işletim sisteminin sıfırdan kurulması anlamına gelir. Bu yöntemde disk genellikle yeniden hazırlanır, eski işletim sistemi dosyaları korunmaz ve Windows Server temiz bir ortam üzerine kurulur.

Clean install yapılan sistemlerde önceki işletim sistemine ait yükseltme geçmişi bulunmaz.

In-Place Upgrade Nedir?

In-place upgrade mevcut Windows Server işletim sisteminin korunarak daha yeni bir Windows Server sürümüne yükseltilmesidir.

Örneğin:

Windows Server 2012 R2 -> Windows Server 2016
Windows Server 2016 -> Windows Server 2019
Windows Server 2019 -> Windows Server 2022

Bu işlem sırasında sistem, uygulamalar, roller, bazı ayarlar ve kullanıcı verileri korunur. Ancak Windows, upgrade işlemine ait bazı bilgileri registry üzerinde saklar.

Biz de bu bilgileri okuyarak sistemin geçmişte upgrade edilip edilmediğini görebiliriz.

Windows Upgrade Bilgileri Nerede Saklanır?

Windows, işletim sistemi kurulum ve yükseltme geçmişine ait bazı bilgileri aşağıdaki registry alanında tutar:

HKLM:\System\Setup

Eğer sistem daha önce eski bir Windows Server sürümünden yükseltilmişse bu alan altında genellikle şu formatta kayıtlar oluşur:

Source OS
Source OS (Updated on ...)

Bu kayıtlar sistemin önceki işletim sistemi bilgilerini içerir.

Örneğin:

PreviousOS : Windows Server 2012 R2
ReleaseId  : ...
UpgradeDate: ...

Eğer bu kayıtlar yoksa genellikle sistemin clean install yöntemi ile kurulduğu anlaşılır.

PowerShell Script

Aşağıdaki PowerShell script’i Windows Server üzerinde daha önce yapılmış bir in-place upgrade geçmişi olup olmadığını kontrol eder.

Get-ChildItem -Path "HKLM:\System\Setup" | Where-Object {$_.Name -like "*Source OS*"} | ForEach-Object {
  $path = $_.Name.Replace("HKEY_LOCAL_MACHINE", "HKLM:")
  $properties = Get-ItemProperty -Path $path
   
  # Tarihi hatasız bir şekilde .NET fonksiyonu ile dönüştürüyoruz
  $epoch = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)
  $upgradeDate = $epoch.AddSeconds($properties.InstallDate).ToLocalTime()

  [PSCustomObject]@{
    UpgradeDate = $upgradeDate
    PreviousOS = $properties.ProductName
    ReleaseId  = $properties.ReleaseId
  }
}

Script Ne İşe Yarar?

Bu script, registry üzerinde HKLM:\System\Setup altında yer alan Source OS kayıtlarını arar.

Eğer sistem daha önce eski bir Windows Server sürümünden yükseltilmişse ilgili kayıtları okuyarak aşağıdaki bilgileri gösterir:

UpgradeDate : Upgrade işleminin yapıldığı tarih ve saat
PreviousOS  : Upgrade öncesindeki işletim sistemi
ReleaseId   : Önceki işletim sistemine ait release bilgisi

Örneğin çıktı aşağıdaki gibi olabilir:

UpgradeDate                                   PreviousOS                                ReleaseId
-----------                                             ----------                                        ---------
6/19/2022 3:12:33 AM                     Windows Server 2012 R2

Bu çıktı bize şunu söyler;

Sunucu mevcut işletim sistemine sıfırdan kurulmamış daha önce Windows Server 2012 R2 üzerinden upgrade edilmiştir. Upgrade işlemi de belirtilen tarih ve saatte gerçekleşmiştir.

Çıktı Boş Gelirse Ne Anlama Gelir?

Script çalıştırıldığında herhangi bir çıktı gelmiyorsa, registry altında Source OS bilgisi bulunmuyor demektir.

Bu durumda sistem büyük ihtimalle clean install yöntemiyle kurulmuştur.

Yani çıktı boşsa şu şekilde yorumlanabilir:

Bu sistemde önceki bir Windows Server işletim sisteminden upgrade geçmişi bulunmamaktadır.
Sistem clean install olarak kurulmuş olabilir.

Ancak burada küçük bir not düşmek faydalı olur. Registry kayıtları manuel olarak temizlenmiş, sistem üzerinde özel imajlama işlemleri yapılmış ya da bazı kayıtlar silinmişse sonuç farklı yorumlanabilir. Fakat standart Windows Server kurulumlarında bu kontrol oldukça pratik ve güvenilir bir yöntemdir.

Script Satır Satır Ne Yapıyor?

İlk satırda registry üzerinde Windows kurulum bilgilerini içeren alan taranır:

Get-ChildItem -Path "HKLM:\System\Setup"

Ardından sadece adı içerisinde Source OS geçen kayıtlar filtrelenir:

Where-Object {$_.Name -like "*Source OS*"}

Bu kayıtlar genellikle upgrade geçmişi olan sistemlerde bulunur.

Sonrasında her bir kayıt için registry yolu PowerShell formatına dönüştürülür:

$path = $_.Name.Replace("HKEY_LOCAL_MACHINE", "HKLM:")

Registry değerleri okunur:

$properties = Get-ItemProperty -Path $path

Windows, kurulum tarihini Unix epoch formatına benzer şekilde saniye bazlı tutabildiği için tarih bilgisi okunabilir formata çevrilir:

$epoch = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)
$upgradeDate = $epoch.AddSeconds($properties.InstallDate).ToLocalTime()

Son olarak bilgiler düzenli bir tablo halinde ekrana yazdırılır:

[PSCustomObject]@{
  UpgradeDate = $upgradeDate
  PreviousOS = $properties.ProductName
  ReleaseId  = $properties.ReleaseId
}

Daha Açıklayıcı Versiyon

İsterseniz script’i biraz daha kullanıcı dostu hale getirerek çıktı boş geldiğinde de bilgilendirme mesajı verecek şekilde kullanabilirsiniz.

$UpgradeHistory = Get-ChildItem -Path "HKLM:\System\Setup" |
Where-Object {$_.Name -like "*Source OS*"} |
ForEach-Object {
    $path = $_.Name.Replace("HKEY_LOCAL_MACHINE", "HKLM:")
    $properties = Get-ItemProperty -Path $path

    $epoch = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)
    $upgradeDate = $epoch.AddSeconds($properties.InstallDate).ToLocalTime()

    [PSCustomObject]@{
        UpgradeDate = $upgradeDate
        PreviousOS  = $properties.ProductName
        ReleaseId   = $properties.ReleaseId
    }
}

if ($UpgradeHistory) {
    Write-Host "In-place upgrade geçmişi bulundu:" -ForegroundColor Yellow
    $UpgradeHistory | Format-Table -AutoSize
}
else {
    Write-Host "Source OS kaydı bulunamadı. Sistem büyük ihtimalle clean install olarak kurulmuştur." -ForegroundColor Green
}

Bu versiyon özellikle birden fazla sunucuda kontrol yaparken daha anlaşılır çıktı üretir.

Hangi Durumlarda Kullanılabilir?

Bu kontrol özellikle aşağıdaki senaryolarda faydalıdır:

Windows Server upgrade geçmişini kontrol etmek
Eski işletim sisteminden kalma sorunları analiz etmek
Migration öncesi mevcut sistemi incelemek
Sunucu envanteri çıkarmak
Denetim ve uyumluluk kontrolleri yapmak
İşletim sistemi yaşam döngüsü planlaması yapmak
Performans veya sürücü kaynaklı sorunlarda geçmiş kurulum bilgisini doğrulamak

Özellikle production ortamlarında eski işletim sistemlerinden yükseltilmiş sunucular ile clean install yapılmış sunucular arasında davranış farklılıkları görülebilir. Bu nedenle sorun giderme sırasında sistemin kurulum geçmişini bilmek önemli bir avantaj sağlar.

Windows Server sistemlerinde işletim sisteminin clean install mı yoksa in-place upgrade ile mi kurulduğunu öğrenmek için registry üzerinde bulunan Source OS kayıtları kontrol edilebilir.

PowerShell ile bu kontrolü hızlıca yapmak mümkündür. Eğer script çıktısında önceki işletim sistemi bilgisi, release bilgisi ve upgrade tarihi görülüyorsa sistem daha önce eski bir Windows Server sürümünden yükseltilmiştir.

Eğer çıktı boş geliyorsa, sistemde upgrade geçmişi bulunmuyor demektir ve bu durum genellikle clean install kurulum yapıldığını gösterir.

Bu basit PowerShell kontrolü, özellikle sistem yöneticileri için migration, troubleshooting ve envanter çalışmalarında oldukça pratik bir yöntemdir.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *